Buenas ;) hace poco empece con la ingeniería inversa por lo que he estado a full con la práctica pero me he encontrado un inconveniente que no puedo resolver tengo una función de encriptado de paquetes:
0040C120 > 8B5424 1C MOV EDX,DWORD PTR SS:[ESP+1C]
0040C124 > 8BC7 MOV EAX,EDI
0040C126 . 25 FF010000 AND EAX,1FF
0040C12B . 03C2 ADD EAX,EDX
0040C12D . 8B14C5 482D460>MOV EDX,DWORD PTR DS:[EAX*8+1462D48] ; Guarda en EDX un DWORD de la tabla
0040C134 . 8B04C5 4C2D460>MOV EAX,DWORD PTR DS:[EAX*8+1462D4C] ; Guarda en EAX un DWORD de la tabla
0040C13B . 3316 XOR EDX,DWORD PTR DS:[ESI] ; xor de la tabla con ESI = un DWORD del packet
0040C13D . 3346 04 XOR EAX,DWORD PTR DS:[ESI+4] ; con la siguiente posición de ESI
0040C140 . 3355 10 XOR EDX,DWORD PTR SS:[EBP+10] ; ? Ni idea, siempre es 0
0040C143 . 3345 14 XOR EAX,DWORD PTR SS:[EBP+14] ; ? Ni idea, siempre es 0
0040C146 . 8916 MOV DWORD PTR DS:[ESI],EDX ; Guarda DWORD resultado del xor en el packet
0040C148 . 8946 04 MOV DWORD PTR DS:[ESI+4],EAX ; Guarda DWORD resultado del xor en el packet
0040C14B . 83C7 01 ADD EDI,1
0040C14E . 83C6 08 ADD ESI,8
0040C151 . 83E9 01 SUB ECX,1 ; ECX = indice
0040C154 .^75 CA JNZ SHORT DBOG.0040C120
0040C156 . 8B4424 20 MOV EAX,DWORD PTR SS:[ESP+20]
Es solo una parte pero como se puede ver no es muy complicada se trata de dos xor de los paquetes con un tabla aleatoria dentro de un ciclo en teoría para desencriptarlo solo debería hacer de nuevo el xor, el inconveniente que tengo es que no se como hacerlo en C++, el programa al que hago ingeneria inversa envia los packet por WSA por lo cual para acceder al buffer me da un puntero y longitud:
typedef struct __WSABUF {
u_long len;
char FAR *buf;
} WSABUF, *LPWSABUF;
Alguna idea u opinión de cómo?:(