Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Programacion > Carbide C/C#/C++


Respuesta Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 17-jun-2012, 10:48   #1
Recien llegado
 
Fecha de Ingreso: julio-2011
Amigos 0
Mensajes: 1
Gracias: 0
Agradecido 0 veces en 0 mensajes.
Predeterminado ¿Invertir este codigo C++builder?

Hola amigos, estoy con una aplicacion que usa un algoritmo de desencriptacion a partir del serial que introduces y desencripta codigo ejecutable que si el serial es malo el programa crashea.
El codigo lo he pasado a mano de olly a C++builder y funciona para desencriptar pero claro, sin el serial bueno, no desencripta bien. Mi idea es entonces poder invertir el codigo para que en vez de darme los dos dwords que desencripta, que nosotros le demos todos los datos incluidos esos dos dwords desencriptados correctamente (suponiendo que los consiguiese) y nos devuelva las 3 partes del serial que cumplan con la condicion. El codigo de desencriptado que quiero invertir para este fin es este:

Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        unsigned long parte1Serial = 0x11111111;
        unsigned long parte2Serial = 0x88888888;
        unsigned long parte3Serial = 0x33333333;
        unsigned long lpVolumeSerialNumber = 0;
        unsigned long crc1 = 0x074FF074;
        unsigned long crc2 = 0x89E23FAF;

        unsigned long serialEncriptado1 = 0;
        unsigned long serialEncriptado2 = 0;
        unsigned long serialEncriptado3 = 0;

        unsigned long valorDesencriptar1 = 0x62E1CFA3;
        unsigned long valorDesencriptar2 = 0x5CC688B2;
        unsigned long constante1 = 0x9E3779B9;
        unsigned long constante2 = 0x2004A000;
        unsigned long eax, ecx, edx, ebx, edi;

        if (GetVolumeInformation(NULL,NULL,0,&lpVolumeSerialNumber,NULL,NULL,NULL,NULL))
        {
                LabelVolumen->Caption = AnsiString().IntToHex(lpVolumeSerialNumber,8);
        }
        else
        {
                ShowMessage("No se pudo sacar el VolumeSerialNumber. Error: " +AnsiString(GetLastError()));
                ExitProcess(0);
        }

        //Encriptacion del serial nuestro
        serialEncriptado1 = parte1Serial;
        serialEncriptado2 = parte2Serial;
        serialEncriptado3 = parte3Serial;
        serialEncriptado1 ^= lpVolumeSerialNumber ^ crc1;
        serialEncriptado2 ^= lpVolumeSerialNumber ^ crc1 ^ 0x12345678;
        serialEncriptado3 ^= lpVolumeSerialNumber ^ crc2;

        //comienza la desencriptacion
        ebx = valorDesencriptar1;
        ecx = valorDesencriptar2;
        edx = constante1;
        eax = edx;
        eax <<= 5;
        //Aqui empieza el for
        for(int i = 0x20; i > 0; i--)
        {
                edi = ebx;
                edi <<= 4;
                ecx -= edi;
                edi = serialEncriptado3;
                edi ^= ebx;
                ecx -= edi;
                edi = ebx;
                edi >>= 5;
                edi ^= eax;
                ecx -= edi;
                ecx -= constante2;
                edi = ecx;
                edi <<= 4;
                ebx -= edi;
                edi = serialEncriptado1;
                edi ^= ecx;
                ebx -= edi;
                edi = ecx;
                edi >>= 5;
                edi ^= eax;
                ebx -=edi;
                ebx -= serialEncriptado2;
                eax -= edx;
        }
        ShowMessage("El primer dword desencriptado queda como EBX="+AnsiString().IntToHex(ebx,8));
        ShowMessage("El segundo dword desencriptado queda como ECX="+AnsiString().IntToHex(ecx,8));
}
  
aguml está desconectado   Responder Citando
Respuesta

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks están Activado
Pingbacks están Activado
Refbacks están Activado



Temas Similares
Tema Autor Foro Respuestas Último mensaje
DUELO empate CARLOS_ CUBAN-HACK cuban-hack Batch 87 07-may-2012 22:20
Alluda con este codigo cual es el error ? cristofer007 Batch 3 03-dic-2011 19:44
Adobe Flash Builder v4.5.1 Premium schiavi13 Software 0 26-ago-2011 21:26
(Vb.08)(PREGUNTA)¿ Como podria hacer que este codigo leyese CADA palabra de un texto? David Novikov Visual Basic y Net 8 25-jul-2011 05:15



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0