Muy buenas tardes, Soy nueva en el Foro y en el mundo del Cracking.
Necesito ayuda con un tema de Cryptografia de la función CryptCreateHash, CryptCreateHash, y CryptDeriveKey.
Estoy con un compañero, crakeando un .exe que genera unos archivos binarios, hasta ahora todo bien, excepto por dos de los archivos que genera el programa.
El problema resulta en que uno de los archivos me cifra una ruta de la computadors con una clave que ya descubrimos gracias al Ollydbg, sin embargo usando el seudo código del IDAPRO6.4 el programa te ayuda un poco más a ver que containers utilizó el programador fuente para realizar su cifrado.
En este sentido,según la ayuda del MSDN, dichas funciones tienen los siguientes parámetros:
BOOL WINAPI CryptCreateHash(
_In_ HCRYPTPROV hProv,
_In_ ALG_ID Algid,
_In_ HCRYPTKEY hKey,
_In_ DWORD dwFlags,
_Out_ HCRYPTHASH *phHash
);
El programa me funciona bien si coloco los valores por defecto.
CryptCreateHash(hCryptProv, 0x8003, 0, 0, &hHash)
Donde hCryptProv es el valor que me arroja otra función (CryptAcquireContext).
Si embargo, el IDA me arroja la siguiente sintaxys:
v4 = (HCRYPTHASH *)((char *)v2 + 4);
if (!CryptCreateHash(*(_DWORD *)v2, 0x8003u, 0, 0, (HCRYPTHASH *)v2 + 1))
v4 = (HCRYPTHASH *)((char *)v2 + 4);
v5 = *(_DWORD *)(a2 - 8);
v11 = (const BYTE *)CString::GetBuffer((CString *)&a2, v5 + 1);
if (!CryptHashData(*v4, v11, v5, 0))
sub_407C50(-536869115, 0, 79, (int)a_IncCkexceptio);
CString::ReleaseBuffer((CString *)&a2, -1);
v6 = *v4;
v7 = *(_DWORD *)v2;
v11 = 0;
if (!CryptDeriveKey(v7, 0x6801u, v6, 1u, (HCRYPTKEY *)v2 + 2))
sub_407C50(-536869113, 0, 79, (int)a_IncCkexceptio);
v13 = 0;
Donde v2=a una plabra password que ya se descubrió en el Olly.
y a2= es la longitud en esa palabra.
Necesito generar el archivo fuente tal cual como lo hizo el programador para luego generar el archivo .bin que tiene este dato cifrado.
Sin embargo, para generar v5 creo una variable int que va a ser (strlen(Password) -8) y luego la casteo a DWORD no lo admite. (no admite los casteos de LPTSTR a string ).
No entiendo por que crea el objeto tipo hash con v4???.
Yo trato para crear v11. Generar un objeto tipo CString y a ese objeto le digo ss.Getbuffer(&a2,v5+1), y me dice que no puede ejecutar el GetBuffer
Y menos me admite como tipo parametro a v11 de CryptHashData.
Lo se estpy en tremendo KILOMBO, alguien podría ayudarme con algo adicional que no estoy tomando en cuenta, algún tipo de conversión o bien alguna pista para leer.