Code sans GUI qui permet de générer le hash d’une fonction comme par exemple MessageBoxA pour être utilisé dans les shellcodes sur windows.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <windows.h> #include <stdio.h> int main(int argc, char *argv[]) { char *funcname = NULL; DWORD res = 0; if(argc != 2) { printf("USAGE: GenerateHash.exe <funcname>\n"); printf("EXEMPLE: GenerateHash.exe MessageBoxA\n\n"); system("PAUSE"); exit(1); } else funcname = argv[1]; __asm { prepare_hash: mov esi, funcname // On fait pointer esi sur funcname. xor edi, edi // On met edi à zéro. xor eax, eax // On met eax à zéro. cld // Clear direction flag : pour être sûr que ça incrémente (de gauche à droite) pendant l'utilisation de lodsb. hash: lodsb // Charge un byte de esi dans al et incrémente esi. test al, al // On regarde si le byte est à zéro. jz hash_finished // Si oui on a atteint la fin de la string (funcname). ror edi, 0xd // Rotation de 13 bits vers la droite de la valeur courante. add edi, eax // Ajout du caractère au hash. jmp hash // On continue. hash_finished: // On a finit. mov res, edi // On met le hash dans la variable res. } printf("\n%s = %.8x\n", funcname, res); return 0; } |