MD5 Le premier programme auquel nous allons nous intéresser est un crackme à serial unique écrit en Delphi et compressé par UPX. Une fois décompressé (en utilisant l'option "Decompress" d'UpxGui), IDA va avoir des choses à dire (View -> Open subwiews -> Strings) :
Pas compliqué de deviner ici qu'il s'agit d'un hashage MD5.... :00441065 mov edx, dword ptr [ebp-08] > edx = caractères entrés ... :00441087 mov eax, dword ptr [ebp-04] > eax = hash corespondant ... :004410A1 mov eax, dword ptr [ebp-04] > eax = 8 derniers bytes du hash * Possible StringData Ref from Code Obj ->"a5ba6896" :004410A4 mov edx, 004410FC > edx = a5ba6896 :004410A9 call 00403C74 > comparaison avec les 8 derniers bytes du hash_serial_entré :004410AE jne 004410C8 > Pas Glop ! c'est la sortie :004410B0 push 00000000 > Glop Glop ! la MsgBox s'affiche. :004410B2 mov ecx, 00441108 * Possible StringData Ref from Code Obj ->"serial valide" :004410B7 mov edx, 0044110C > serial valide Et le tout l'un au-dessus de l'autre, il n'y a plus à hésiter ! Reste que dans ce cas précis, il sera nécessaire de bricoler un MD5 Brute Forcer testant des valeurs numériques puis alphanumériques. Heureusement, le serial sera de type décimal, composé de 4 caractères, et rapide à trouver. (mode d'emploi: vous entrez le DWORD recherché dans la quatrième case, vous indiquez que la recherche doit se faire entre 1 et 99999 par exemple dans les valeurs mini/maxi et vous cliquez sue "Search") MD5 recoit, lors de son initialisation (c'est une de ses caractèristiques), une chaine de caractères typiques:
Suivant les programmeurs, elle est, ou non, en clair. 30 31 32 33 34 35 36 37-38 39 61 62 63 64 65 66 0123456789abcdef 01 23 45 67 89 AB CD EF-FE DC BA 98 76 54 32 10 .#Eg........vT2. (le #Eg est significatif) il va falloir commencer à regarder dans la fenêtre des Data si un hash n'apparait pas... Mais cette string n'est pas toujours apparente dans les Strings Ref :00401800 mov dword ptr [ecx], 067452301h ; Possible Hash found can be SHA-1 or MD5a or Ripe-MD !!! :00401806 mov dword ptr [ecx+4], 0EFCDAB89h :0040180D mov dword ptr [ecx+8], 098BADCFEh :00401814 mov dword ptr [ecx+0Ch], 010325476h Vous vous doutez bien que la jolie petite phrase en bleu n'est pas apparue magiquement
lors du déssasemblage. MD5 est tout simple et ne pose pas de problème, par contre il est souvent utilisé combiné avec un autres algo, et bien souvent du RSA... |