[pDrilI's
Crypto keygenme #2 ]
par Amenesia |
||||||
Analyse du code:
_text:004010D6 LongNom: _text:004010D6 lea edi, [Nom] _text:004010DD or ecx, 0FFFFFFFFh ; _text:004010E0 xor eax, eax ; _text:004010E2 xor edx, edx ; Calcul de _text:004010E4 repne scasb ; la longueur _text:004010E6 not ecx ; du Nom _text:004010E8 dec ecx ; _text:004010E9 mov [Clef], 0 _text:004010F1 test ecx, ecx _text:004010F3 jle Suite _text:004010F5 _text:004010F5 CalculClef: _text:004010F5 movsx ecx, [Nom] ; recupere un caractere ; du nom _text:004010FD mov eax, ecx _text:004010FF lea edi, [Nom] _text:00401106 shl eax, 4 ; le multiplie par 16 _text:00401109 add eax, ecx ; somme le resultat avec ; la valeur du caractere _text:0040110B shl eax, 4 _text:0040110E add eax, ecx ; idem _text:00401110 shl eax, 4 _text:00401113 add eax, ecx ; idem _text:00401115 mov ecx, [Clef] _text:00401119 inc edx _text:0040111A lea eax, [eax+eax*4] ; Resultat*5 _text:0040111D lea eax, [ecx+eax*2] ; Clef + Resultat*5*2 _text:00401120 or ecx, 0FFFFFFFFh _text:00401123 mov [Clef], eax _text:00401127 xor eax, eax _text:00401129 repne scasb _text:0040112B not ecx _text:0040112D dec ecx _text:0040112E cmp edx, ecx _text:00401130 jl CalculClef _text:00401132 Suite: D'ou Clef = Somme[ ((( caractere * 16 + caractere)*16 + caractere)*16
+ caractere )*10 ] = caractere * 43690
Puis le programme verifie que le serial ne comporte que des lettres et des chiffres: _text:0040116F Majuscule:
Une fois le format du serial verifié, la chaine est transformée
en nombre ( 'MIRACL error from routine ' => utilisation de la librairie
Miracl ), et pour compliquer un peu la chaine est interpreté comme
si le serial etait ecrit en base 60.
_text:004011AE
lea eax, [Serial]
On remarque que un peu plus bas le programme utilise les valeurs 7E2BDC8ED8856EE745A9D6F93E143B7ACE202999 et 10001 ( un nombre premier )... Tout semble indiquer que le programme utilise RSA... _text:004011E7
push ebp
; RSASerial
Ou RSASerial = Serial_^10001 mod 7E2BDC8ED8856EE745A9D6F93E143B7ACE202999
Un fois RSASerial calculé, le programme s'assure que les 4 premieres
lettres verifient :
_text:00401204
mov eax, [RSASerial] ; les 4 premieres lettre
Puis compare la Clef et le RSASerial privé de ses 5 premieres lettres: _text:00401235
lea eax, [RSASerial + 5]
Trouver un Nom/Serial valide:
Nom:
Serial:
Les clef utilisée etant tres petite "RSA Tool" n'a aucune difficultée pour la determiner:
D = 3FC69E031A914000E925FC61F2BF888F410EB07D
Serial = 2C1C24FC8ECA1305E553142DBC3EF29D151B55F6
Conclusion :
Amusez vous bien ;)
|
l |