Ir para o conteúdo
c_a2

Encripar/decriptar

Mensagens Recomendadas

c_a2

Como já disse na minha apresentação, eu tenho muito poucos conecimentos em programação e por isso registei-me neste forum para ver se consigo ajuda para tentar resolver um problema que tenho com um código c++.

Este codigo depois de compilado encripta um ficheiro de texto para binário e vise-versa.

#include<fstream.h>
#include<conio.h>
#include<stdio.h>
int main()
{
char name[30],target[30],ch,mod;							 //DeclareVariables
int num[100],i,option;
cout<<"Enter Your Option ";
cout<<"1. To Encrypt The File ";
cout<<"2. To Decrypt The File ";
cout<<"Option : ";
cin>>option;
if(option==1)
{
cout<<"Enter The Path Of A File Which Is To Be Encrypted : ";
gets(name);
ifstream fin(name,ios::binary);							 //Open The Input File In A Binary Mode
if(!fin)
{														 //Show Error Occur If File Does Not Exist
cout<<"Error In Openinig Of A File : ";				 //Or Any Error Occurs
return 1;
}
cout<<"Enter The New Encrypted File Name : ";
gets(target);
ofstream fout(target,ios::binary);						 //Open The OutPut File In A Binary Mode
if(!fout)
{
cout<<"Error In Opening Of Target File : ";		 //Show Error If Any Error Occrs In Opening Of A File
return 1;
}
for(i=0;i<9;i++)
{														 //Multiple ForLoops For Storing The Numbers
num[i]=i;											 //In An Array
}
for(i=14;i<31;i++)										 //Loops Will Store 100 Numbers
{
num[i-5]=i;											 //Which Will Encrypt The Contents Of A File
}
for(i=33;i<=68;i++)									 //To Avoid The Error Ocuur Caused By The
{														 //Enter Key ,Tab Key & Space Key
num[i-7]=i;											 //These Variations In Loops Is Made
}
for(i=97;i<=122;i++)
{
num[i-35]=i;
}
while(fin)
{													 //Open The Input File
fin.get(ch);
if(ch==EOF)break;									 //Exit To Loop When End Of File
if((ch>=97) && (ch<=122))
{													 //Encrypt The Small Letters
i=97;
mod=num[ch-i];
fout<<mod;
}
if((ch>=65) && (ch<=90))
{
i=39;												 //Encrypt The Capital Letters
mod=num[ch-i];									 //And Store In An Output File
fout<<mod;
}
if((ch>=48) && (ch<=57))
{
i=4;											 //Encrypt The Numbers
mod=num[ch+i];
fout<<mod;
}
if((ch==10)||(ch==13))
{
mod=ch;											 //For Enter Key
fout<<mod;
}
if(ch==32)
fout<<ch;											 //For Space Key
if(ch==9)
fout<<ch;											 //For Tab Key
if((ch>=33)&&(ch<=47))
{												 //For Special Symbols
mod=ch+64;
fout<<mod;
}
if((ch>=58)&&(ch<=64))
{												 //For Special Symbols
mod=ch+54;
fout<<mod;
}
if((ch>=91)&&(ch<=96))
{
mod=ch+28;										 //For Special Symbols
fout<<mod;
}
if((ch>=123)&&(ch<=126))
{
mod=ch-40;										 //For Special Symbols
fout<<mod;
}
}
fin.close();										 //Close The Input File
fout.close();										 //Close The Output File
cout<<"Your File Is Encrypted Now........... ";
getch();
return 0;
}

/*===============================================================================================================*/

/* This Program Will Decrypt The Document */

if(option==2)
{
char name[30],target[30],ch,mod;							 //Declare Variables
int num[100],i,flag;
cout<<"Enter The Path Of A File Name Which Is To Be Decrypted : ";
gets(name);
ifstream fin(name,ios::binary);
if(!fin)													 //Open The Encryped File In A Binary Mode
{
cout<<"Error In Opening Of A File : ";
return 1;												 //Show Errorn If File Does Not Exist
}														 //Or Any Occurs In Opening Of A File
cout<<"Enter The New Decrypted File Name : ";
gets(target);
ofstream fout;
fout.open(target,ios::binary);							 //Opens The Output File In An Binary Mode
if(!fout)
{														 //Show Error If Any Error Occurs In Opening Of A File
cout<<"Error In Opening Of A Target File : ";
return 1;
}
for(i=0;i<9;i++)
{														 //Same Multiple For Loops For Storing The Numbers
num[i]=i;												 //In An Array
}
for(i=14;i<31;i++)
{
num[i-5]=i;											 //Loops Will Store 100 Numbers
}
for(i=33;i<=68;i++)										 //Which Encrypts The Document Also Decrypt It
{
num[i-7]=i;
}
while(fin)
{														 //Opens The Encryped File
fin.get(ch);
flag=0;													 //Turn Off Flag
if(ch==EOF)break;
for(i=26;i<52;i++)
{
if(ch==num[i])										 //Loop For Match The Small Letters Letters
{
mod=i+39;											 //If Match Then Put Appropriate Letter
fout<<mod;											 //In A OutPut File
flag=1; break ;											 //Turn On Flag And Exit The Loop
}
}
if (flag==1) continue ;									 //If Flag Is On Then Continue Outer Loop
for(i=0;i<26;i++)
{														 //Loop For Match The Capital Letters
if(ch==num[i])
{													 //If Match ThenPut Appropriate Letter
mod=i+97;											 //In A OutPut File
fout<<mod;
flag=1;break;											 //Turn On Flag And Exit From This Loop
}
}
if (flag==1) continue ;									 //If Flag Is On Then Continue Outer Loop
for(i=52;i<62;i++)
{														 //Loop For Numerical Numbers
if(ch==num[i])
{
mod=i-4;
fout<<mod;
flag=1; break ;
}
}
if (flag==1) continue ;
if((ch==10)||(ch==13))
{
mod=ch;											 //Condition For Enter Key
fout<<mod;
}
if(ch==32)
fout<<ch;											 //Condition For Space Key
if(ch==9)
fout<<ch;											 //Condition For Tab Key
if((ch>=97)&&(ch<=111))
{
mod=ch-64;										 //For Special Symbols
fout<<mod;
}
if((ch>=112)&&(ch<=118))
{
mod=ch-54;										 //For Special Symbols
fout<<mod;
}
if((ch>=119)&&(ch<=124))
{
mod=ch-28;										 //For Special Symbols
fout<<mod;
}
if((ch>=83)&&(ch<=86))
{												 //For Special Symbols
mod=ch+40;
fout<<mod;
}
}
fin.close();									 //Close The Encrypted File
fout.close();									 //Close Your Original Decrypted File
cout<<"The File Is Being Decrypted............ ";
getch();
return 0;
}
return 0;
}

E precisava de implementar neste código 4 rotinas que foram decompiladas com o software Hex-Rays de um ficheiro dll.

Supostamente a extração destas rotinas são em linguagem c só que este software faz uma extração aproximada do c e depois tem que ser corregida para que funcione e era aí que eu precisava de ajuda para ver se alguém me consegu fazer essa correcção.

em Baixo coloco as rotinas que necessitava de implementar.

1ª rotina de encriptação:

char __thiscall sub_10002090(int this)
{
  int v1; // ST04_4@1
  v1 = **(_DWORD **)(this + 8);
  *(_BYTE *)(this + 20) = (**(_DWORD **)(this + 8) >> 24) + (unsigned __int8)(**(_DWORD **)(this + 8) >> 16) + **(_DWORD **)(this + 8) + BYTE1(v1);
  *(_BYTE *)(this + 20) *= 17;
  *(_BYTE *)(this + 21) = *(_BYTE *)(this + 20) + 37;
  return 1;
}

2ª rotina de encriptação:

char __thiscall sub_10001E80(void *this)
{
  char result; // al@2
  void *v2; // [sp+0h] [bp-8h]@1
  unsigned int i; // [sp+4h] [bp-4h]@3
  v2 = this;
  if ( (unsigned __int8)sub_10002090() )
  {
  for ( i = *(_DWORD *)((char *)v2 + 22);
		i < *((_DWORD *)v2 + 4);
		++i )
  {
	 *(_BYTE *)(*((_DWORD *)v2 + 2)
			  + i) ^= ~byte_1006E128[*((_BYTE *)v2 + 20)];
	 *((_BYTE *)v2 + 20) += *((_BYTE *)v2 + 21) + *(_BYTE *)(*((_DWORD *)v2 + 2) + i);
  }
  result = 1;
  }
  else
  {
  result = 0;
  }
  return result;
}

1ª rotina de decriptação:

char __thiscall sub_10002020(int this)
{
  int v1; // ST04_4@1
  v1 = **(_DWORD **)(this + 8);
  *(_BYTE *)(this + 20) = (**(_DWORD **)(this + 8) >> 24) + (unsigned __int8)(**(_DWORD **)(this + 8) >> 16) + **(_DWORD **)(this + 8) + BYTE1(v1);
  *(_BYTE *)(this + 20) *= 17;
  *(_BYTE *)(this + 21) = *(_BYTE *)(this + 20) + 37;
  return 1;
}

2ª rotina de decriptação:

char __thiscall sub_10001DE0(void *this)
{
  char result; // al@2
  char v2; // ST04_1@5
  void *v3; // [sp+0h] [bp-Ch]@1
  unsigned int i; // [sp+8h] [bp-4h]@3
  v3 = this;
  if ( (unsigned __int8)sub_10002020() )
  {
  for ( i = *(_DWORD *)((char *)v3 + 22);
		i < *((_DWORD *)v3 + 4);
		++i )
  {
	 v2 = *((_BYTE *)v3 + 21)
		+ *(_BYTE *)(*((_DWORD *)v3 + 2) + i)
		+ *((_BYTE *)v3 + 20);
	 *(_BYTE *)(*((_DWORD *)v3 + 2)
			  + i) ^= ~byte_1006E128[*((_BYTE *)v3 + 20)];
	 *((_BYTE *)v3 + 20) = v2;
  }
  result = 1;
  }
  else
  {
  result = 0;
  }
  return result;
}

Obrigado pela atenção

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

ora bem

- tens poucos conhecimentos de programação

- estas a tentar criar um código para subverter uma encriptação fechada

- estas a pedir a alguém que faça esse trabalho por ti

... hum ...


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.