Découvrons EXESCOPE 5.12
By Christal
|
Commençons par le cracker : :0047D15D 8B159C804800 MOV EDX,[0048809C] :0047D163 8B12 MOV EDX,[EDX] > Name :0047D165 A1947F4800 MOV EAX,[00487F94] :0047D16A 8B00 MOV EAX,[EAX] > Serial :0047D16C E8DB780000 CALL 00484A4C :0047D171 84C0 TEST AL,AL :0047D173 0F848D000000 JZ 0047D206 > jmp bad boy Au sortir du Call 00484A4C, AL vaudra 00, et le test conditionnel va vous envoyer
vers la routine d'affichage de la MessageBox " Bad Boy ". :00484A6F E830F1F7FF CALL 00403BA4 > taille du sérial entré :00484A74 83F80A CMP EAX,0A > égale à 10 ? :00484A77 7527 JNZ 00484AA0 > jmp Bad Boy :00484A79 8B45FC MOV EAX,[EBP-04] > sérial entré dans EAX :00484A7C 803841 CMP BYTE PTR [EAX],41 > 1er caractère = " A " ? :00484A7F 751F JNZ 00484AA0 > jmp bad boy :00484A81 8B45FC MOV EAX,[EBP-04] > serial dans EAX :00484A84 0FB64008 MOVZX EAX,BYTE PTR [EAX+08] > 9ème caractère dans EAX :00484A88 8B55FC MOV EDX,[EBP-04] > serial dans EDX :00484A8B 0FB65209 MOVZX EDX,BYTE PTR [EDX+09] > 10ème caractère dans EDX :00484A8F 03C2 ADD EAX,EDX > EAX=EAX+EDX :00484A91 B90A000000 MOV ECX,0000000A > ECX=10d :00484A96 99 CDQ :00484A97 F7F9 IDIV ECX > EAX/ECX -> reste dans EDX :00484A99 83FA04 CMP EDX,04 > si le reste <> de " 4 " :00484A9C 7502 JNZ 00484AA0 > jmp bad boy :00484A9E B301 MOV BL,01 > flag Good Boy :00484AA0 33C0 XOR EAX,EAX > Al = 00 Et voilà !
Par la suite, EBX sera placé dans EAX (BL -> AL).
Même après enregistrement, le menu Help, et les différentes
boites de dialogue restent inchangées, à vous faire douter que le bon password ait été
accepté !
(l'API MessageBoxA se trouve importée dans le programme…)
+ Bitmap
+ Cursor
A supposer que vous souhaitiez modifier le programme pour y inclure un Key Générateur
! object Label4: TLabel Left = 8 > position X du texte Top = 80 > position Y du texte Width = 515 > largeur X de la zone texte Height = 12 > largeur Y de la zone texte Caption = 'This software is a shareware. Please register if you' end object Label5: TLabel Left = 8 Top = 96 Width = 416 Height = 12 Caption = 'continue to use after 2 weeks evaluation period' end Et va pouvoir devenir " registered to " + " Nom de_votre_belle_mère_adorée
"
+ Import
Il y aurait donc moyen de trouver de la place à partir de l'adresse : AXXXXXXXXB - Ou " A
" est un caractère attendu :0047D15D 8B159C804800 MOV EDX,[0048809C] :0047D163 8B12 MOV EDX,[EDX] > Name Le programme à un mode se stockage du serial un peu inhabituel :
La routine va devoir : :00485254 A1EC804800 MOV EAX,[004880EC] > pousse @ Name dans eax :00485259 8B00 MOV EAX,[EAX] > pousse Name dans eax :0048525B E844E9F7FF CALL 00403BA4 > calcul longueur du Name (je réutilise une routine présente dans le programme) :00485260 3D08000000 CMP EAX,00000008 > 8 caractères ? :00485265 7C22 JL 00485289 > saut si inférieur :00485267 8B35EC804800 MOV ESI,[004880EC] > pousse @ Name dans esi :0048526D 8B36 MOV ESI,[ESI] > pousse Name dans esi :0048526F 8B3D9C804800 MOV EDI,[0048809C] > pousse @ serial dans esi :00485277 C60741 MOV BYTE PTR [EDI],41 > place le caractère " A " :0048527A 47 INC EDI > se cale au caractère suivant :0048527B B908000000 MOV ECX,00000008 > taille de la chaîne à déplacer :00485280 F3A4 REPZ MOVSB > déplace la chaîne Name :00485282 BF41000000 MOV EDI,00000041 > place " A " dans EDI :00485287 B90A000000 MOV ECX,0000000A > 10 va être le diviseur :0048528C 8BD7 MOV EDX,EDI > EDX = dernière lettre possible du serial :0048528E A1EC804800 MOV EAX,[004880EC] > Name dans EAX :00485293 8B00 MOV EAX,[EAX] :00485295 0FB64007 MOVZX EAX,BYTE PTR [EAX+07] > 8ème caractère dans EAX :00485299 03C2 ADD EAX,EDX > ajoute val du compteur :0048529B 99 CDQ :0048529C F7F9 IDIV ECX > EAX/10d. Le reste dans EDX :0048529E 47 INC EDI > lettre suivante :0048529F 83FA03 CMP EDX,03 > Reste est égal à 3 ? :004852A2 75E3 JNZ 00485387 > boucle :004852A4 8BC7 MOV EAX,EDI > clé du serial dans EAX :004852A6 8B3D9C804800 MOV EDI,[0048809C] > mise en place de la clé :004852AC 8B3F MOV EDI,[EDI] > à la fin du serial :004852AE 884709 MOV [EDI+09],AL :004852B1 61 POPAD > restaure les registres :004852B2 8B159C804800 MOV EDX,[0048809C] > place le nouveau serial :004852B8 8B12 MOV EDX,[EDX] > dans EDX :004852BA E88DF7FFFF CALL 00484A4C > test du serial :004852BF E9AD7EFFFF JMP 0047D171 > retour à la normale :004852C4 6A00 PUSH 00 > MB_OK (bouton OK) :004852C6 68DD524800 PUSH 004852DD > Attention ! (titre) :004852CB 68E9524800 PUSH 004852E9 > Votre Name… (message) :004852D0 6A00 PUSH 00 > pas de fenêtre propriétaire :004852D2 FF150CB24800 CALL [USER32!MessageBoxA] > affichage :004852D8 E9297FFFFF JMP 0047D206 > Code Invalide :004852DD 41 INC ECX > Début de la chaîne :004852DE 7474 JZ 00485354 > " Attention ! " :004852E0 656E OUTSB GS: :004852E2 7469 JZ 0048534D :004852E4 6F OUTSD :004852E5 6E OUTSB :004852E6 2100 AND [EAX],EAX :004852E8 00566F ADD [ESI+6F],DL :004852EB 7472 JZ 0048535F :004852ED 65204E61AND GS:[ESI+61],CL :004852F1 6D INSD Souvent il m'est arrivé, à mes débuts, de ne pas comprendre
ce que pouvait bien faire tel ou tel partie du programme, les codes n'ayant aucun sens… 0CB2 4800 E929 7FFF FF41 7474 656E 7469 6F6E 2100 0056 6F74 7265 204E 616D 6520 646F 6974 2063 6F6D 706F 7274 6572 2038 2063 6172 6163 74E8 7265 7320 6D69 6E69 6D75 6D00 0000 0000 0000 0000 0000 0000 correspond en fait à : ..H..)...Attention!. .Votre Name doit com porter 8 caract.res minimum............. Pour finir : 0,&File1000,&Open > 1000d = ID 0, > séparateur 1001,&Save 0, > séparateur 1010,&Exit0,&Window1800,&Tile 1801,&Cascade 1802,&Arrange Icons 1803,&Next Window$09F6 > touche [F6] 1804,C&lose All0,&Help1900,&About Et il vous sera facile d'y apporter les modifications que vous souhaitez (Dégriser
un menu ou un Item de menu, le réactiver, le supprimer…) Caption = 'Regist' > Texte de la Barre de titre object Label1: TLabel Left = 10 > position X et Y du texte Top = 12 > " Your Name " Width = 56 > Taille des caractères Height = 12 Caption = 'Your Name' > texte à afficher end object IDEdit: TEdit Left = 78 Top = 40 Width = 150 Height = 20 ImeName = 'MSIME95' PasswordChar = '*' > en supprimant cette ligne, les caractères de ID ne seront plus les " * " TabOrder = 1 end Voilà ! |
Bonne Journée