WTF_CrackMe By elooo par Kharneth | |||
---|---|---|---|
Outils utilisés | Public | Cible | |
- PeID - OllyDbg - Papier, Crayon, Cerveau 5.0 | Débutant / avancé en Cracking ayant de bonnes connaissances en programmation | WTF_CrackMe.exe | |
I - Présentations | |||
Nous sommes en présence d'une jolie jeune fille, nommée WTF CrackMe, qui nous invite à prendre du plaisir avec elle. Ne pouvant résister aux brunes ténébreuses, je m'exécute immédiatement ! | |||
II - Passage à l'acte | |||
Etant parvenu à la déshabiller, il reste encore à lui faire dévoiler tous ces charmes. Je commence donc par chercher la zone érogène 111 (WM_COMMAND), celle-ci étant découpée en plusieurs parties, je finis par retenir celle qui nous permet une meilleure communication (ID 199). A partir de là, il ne reste qu'une seule possibilité que je vais donc suivre en 0040142A. Intéressée mais prudente, ma douce invitée préfère vérifier que mes intentions envers elle ne sont point hostiles, avant de me permettre de poursuivre plus intensément notre relation. Il faut savoir qu'il existe une technique qui permet d'interpréter correctement ses signaux (Analysis-->During next analysis, treat selection as). Une fois rassurée, elle modifie le nom que je lui ai donné en ajoutant d'abord 1E aux 5eme, 9eme et 13eme caractères. Puis Xor chaque caractère avec 13 valeurs, ce qui me permet de supposer que le nom doit faire 13 caractères. Je continue là où elle me demande d'aller (en 004018D1) et découvre qu'elle va enfin se décontracter et m'autoriser de nouvelles possibilitées en sortant un Kris finement aiguisé. C'est alors qu'elle grave profondément dans sa chair, mon nom crypté (en 004018B5). Elle effectue de nouveaux des calculs, mais sur chaque WORD du Serial cette fois. 6E69 (peut être une proposition...) est ajouté puis 0063 est retranché. Malheureusement, je suis surpris de constater qu'elle doute encore de la douceur de mes caresses et me tend subitement un piège. Mais je suis déterminer à aller jusqu'au bout et j'accéderai à toutes ses requêtes. Je ralentis donc le rythme qu'elle semble trouver trop soutenu. Finalement, le serial est crypté avec 13 nouvelles valeurs. on peut donc supposé que le serial contient également 13 caractères. Elle mutile de nouveau son corps en inscrivant le serial à la suite de mon nom avant de répandre un liquide noir sur ses plaies. Les lettres gravées se transforment alors, mais le résultat ne semble pas lui convenir, et je ne peux qu'assister impuissant à sa fuite dans un hurlement de fureur. Il parait évident que je ne suis pas celui qu'elle espérait. | |||
III - Création de l'illusion | |||
Calculs sur le nom: Nom: 1 2 3 4 5 6 7 8 9 10 11 12 13 + 1E 1E 1E Xor: 2C 35 E0 87 83 A9 23 04 02 01 73 37 87 = 1ere partie du code de la MsgBoxCalculs sur le serial: Serial: 1 2 3 4 5 6 7 8 9 10 11 12 13 + 6E 69 6E 69 6E 69 6E 69 6E 69 6E 69 - 63 63 63 63 63 Xor 91 47 A3 26 80 4B 0F 23 3B 5B DB CE 21 = 2eme partie du code de la MsgBoxCode classique d'une MsgBox: 6A 10 68 D3 32 40 00 68 7F 32 40 00 6A 00 E8 08 05 00 00 <Bad Guy>6A 10 PUSH 10 ; /Style = MB_OK|MB_ICONHAND 00401433 68 D3324000 PUSH 004032D3 ; |Title = "Hey Guy..." 00401438 68 7F324000 PUSH 0040327F ; |Text = "It will be more..." 0040143D 6A 00 PUSH 0 ; |hOwner = NULL 0040143F E8 08050000 CALL <JMP.&user32.MessageBoxA> ; \MessageBoxADéjà le code d'une MsgBox classique fait 19 octets au lieu des 26 (2x13) supposés. On peut supposer aussi que les 2 x 8 octets xor les 2 clés (Key03 et Key04) correspondent au titre et au texte de la MsgBox (voir la dernière capture): <Key03> 26 25 A3 9C - 65 B4 77 1E Xor 8 1ers octets du code = Titre de la MsgBox <Key04> 03 12 37 69 - 3E 5D B7 20 Xor 8 autres octets du code = Texte de la MsgBoxNous avons donc plusieurs indices pour retrouver le code de la MsgBox. il s'agit maintenant de faire des tests et de vérifier si le titre et le texte veulent dire quelque chose. La première MsgBox utilise le style MB_ICONHAND pour afficher l'icône de danger. On suppose donc que ici, l'icône d'information sera utilisé. Ce qui donne les opcodes 6A 40 pour Push MB_ICONINFORMATION. On vérifie avec XOR 25 26 que ça pourrait vouloir dire quelque chose et effectivement on obtient 4C 65 qui correspond à "Le". Ca s'annonce pas trop mal. On suppose donc que la suite serait un truc du style "Le pass...". On prend donc les codes de " pass" (20 70 61 73 73) et on Xor avec Key03. L e p a s s 4C 65 20 70 61 73 73 Xor 26 25 A3 9C 65 B4 77 = 6A 40 83 EC 04 C7 04 Code: 6A 40 PUSH 40 83EC 04 SUB ESP, 4 C704XX XXXXXXXX MOV DWORD PTR [...],...On voit que le 2eme Push est émulé de manière simple. Ce Push correspond à l'adresse du titre, c'est à dire Key03 soit 0040324D. Les instructions manquantes sont donc [ESP], 0040324D soit les opcodes 24 4D 32 40 00. En appliquant les calculs inverses du nom, on trouve justement le nom: "Fuckin' 1337". Mais il manque le dernier caractère. Après avoir tester différents opcode, on ne trouve rien qui puisse correspondre. Donc on va réfléchir sur d'autres façons d'émuler un push. On peut par exemple essayer: 004018C1 B8 56324000 MOV EAX, OFFSET <Key04> 004018C6 50 PUSH EAXLe B8 nous donne un "!" qui correspond bien. Donc on va essayer avec les opcodes suivants pour faire les calculs sur le serial. 56 32 40 00 50 Xor 91 47 A3 26 80 + 00 63 00 63 00 - 6E 69 6E 69 6E = 59 6F 75 20 62 Y o u bPour la suite, on sait que les 5 derniers opcodes seront E8 7D 00 00 00 car ils correspondent à CALL <JMP.&user32.MessageBoxA>. On effectue donc les calculs inverses pour retrouver le serial et on obtient: "You b___ e me!". Il nous manque donc le Push 0 juste avant l'appel à la MsgBox. Et nous avons 3 octets pour ça. Après une brève réflexion, on trouve Xor eax, eax Push eax. Mais le serial ainsi obtenu ne veut rien dire. Donc on va tester les différents registres jusqu'à trouver le bon qui est EDX. Nous trouvons finalement le code suivant: <PolyCode> \6A 40 PUSH 40 004018B7 . 83EC 04 SUB ESP, 4 004018BA . C70424 4D324000 MOV DWORD PTR [ESP], OFFSET <Key03> 004018C1 B8 56324000 MOV EAX, OFFSET <Key04> 004018C6 . 50 PUSH EAX 004018C7 . 33D2 XOR EDX, EDX 004018C9 . 52 PUSH EDX 004018CA . E8 7D000000 CALL <JMP.&user32.MessageBoxA>Ce qui correspond au couple Nom / Serial: You broke me! | |||
IV - Retrouvailles | |||
Je peux maintenant me présenter en toute confiance devant la Belle ténébreuse qui reste tout aussi suspicieuse. Mais cette fois, ses plaies se referment, et elle peut ainsi, enfin, s'offrir pleinement à moi. | |||
Father, yes son, I want to kill you Mother...I want to...fuck you | |||