Titre: Rajout de code sur Olly Posté par: epsilon09 le 03 Avril 2011 à 10:41:44 Bonjour a tous !
Nouveau dans le cracking (et pour cause, en recherche d'emploi, ce qui laisse pas mal de temps!), je pioche un peu partout des Crackme sur le net. Sur l'un d'eux (me tuez pas, il vient pas de NC :/ ), vraiment lambda (2 textbox : 1 Name,1 serial + 1 bouton), je voulais afficher le bon serial calculé par la routine dans un des textbox. Niveau code, on peut pas dire que ca soit très compliqué... Mon problème vient d'ailleurs (comme la vérité?) . (je paste un bout du code, en gros celui qui m'intéresse) : CPU Disasm Address Hex dump Command Comments 00401177 /. 6A 00 PUSH 0 ; /ModuleName = NULL 00401179 |. E8 40000000 CALL <JMP.&kernel32.GetModuleHandleA> ; \KERNEL32.GetModuleHandleA 0040117E |. A3 40304000 MOV DWORD PTR DS:[403040],EAX 00401183 |. 6A 00 PUSH 0 ; /InitParam = 0 00401185 |. 68 7C104000 PUSH 0040107C ; |DialogProc = ***.40107C 0040118A |. 6A 00 PUSH 0 ; |hParent = NULL 0040118C |. 6A 64 PUSH 64 ; |TemplateName = 64 0040118E |. FF35 40304000 PUSH DWORD PTR DS:[403040] ; |hInst = NULL 00401194 |. E8 07000000 CALL <JMP.&user32.DialogBoxParamA> ; \USER32.DialogBoxParamA 00401199 |. 6A 00 PUSH 0 ; /ExitCode = 0 0040119B \. E8 18000000 CALL <JMP.&kernel32.ExitProcess> ; \KERNEL32.ExitProcess 004011A0 $- FF25 1C204000 JMP DWORD PTR DS:[<&user32.DialogBoxPara 004011A6 $- FF25 18204000 JMP DWORD PTR DS:[<&user32.EndDialog>] 004011AC $- FF25 14204000 JMP DWORD PTR DS:[<&user32.GetDlgItemTex 004011B2 $- FF25 10204000 JMP DWORD PTR DS:[<&user32.MessageBoxA>] 004011B8 $- FF25 08204000 JMP DWORD PTR DS:[<&kernel32.ExitProcess 004011BE $- FF25 04204000 JMP DWORD PTR DS:[<&kernel32.GetModuleHa 004011C4 >- FF25 00204000 JMP DWORD PTR DS:[<&kernel32.IsDebuggerP 004011CA 00 DB 00 004011CB 00 DB 00 004011CC 00 DB 00 004011CD 00 DB 00 004011CE 00 DB 00 Je voudrais rajouter mon code par exemple en 4011CC, appelé grâce à un JMP dans la routine du serial (pas décrite ici), et faire un JMP back pour y retourner ensuite (si je vous ai pas encore largué, le code que je veux insérer ici servira donc à écrire le bon serial dans la textbox). Le problème, c'est que quand je commence à écrire en 4011CC, tout se passe bien, en le lancant sur Olly ca tourne du tonerre, j'arrive bien à sauvegarder les modifs dans un executable, sans problème. Par contre, quand je rouvres l'exe sur Olly, la, c'est la cata :/ Les données sont bien présentes, sous forme hexa, par contre Olly ne les "reconnait" plus : 004011CC |. C705 47314000 MOV DWORD PTR DS:[403147],OFFSET 0040300 devient 004011CC |. C705 004011CD |. 47 004011CE |. 31 004011CF |. 40 004011D0 |. 00 Et résultat, plus rien ne marche :/ Persévérant, je me dit "allez hop, on se renseigne pour voir d'où ca vient!". Sur ce, je m'intéresse aux code sections. Sans attendre, je sors mon LordPE favori, regarde un peu les sections, et voila ce que je trouve (sorry, mon post va commencer à faire long!) : ->Section Header Table 1. item: Name: .text VirtualSize: 0x00001000 VirtualAddress: 0x00001000 SizeOfRawData: 0x000001CD PointerToRawData: 0x00000400 PointerToRelocations: 0x00000000 PointerToLinenumbers: 0x00000000 NumberOfRelocations: 0x0000 NumberOfLinenumbers: 0x0000 Characteristics: 0x80000020 (CODE, WRITE) 2. item: Name: .rdata VirtualSize: 0x00001000 VirtualAddress: 0x00002000 SizeOfRawData: 0x00000114 PointerToRawData: 0x00000600 PointerToRelocations: 0x00000000 PointerToLinenumbers: 0x00000000 NumberOfRelocations: 0x0000 NumberOfLinenumbers: 0x0000 Characteristics: 0xC0000040 (INITIALIZED_DATA, READ, WRITE) Et la, paf, le SizeOfRawData vaut 1CD... coïncidence non?! Ni d'une ni de deux, je modifie tout ca (de 1CD, je passe à 3CD (rajout de 200h)), me disant que pitetre que la ca marchera... Recommence toute l'opération, les modifs toussa toussa, et la, c'est le fail, ca marche toujours pas... J'ai essayé d'autres méthodes moins jolies (par exemple, créer une nouvelle section et mettre mon code dedans, sans trop de succès non plus)... Donc voila, déja ceux qui sont arrivés jusqu'ici : bravo! Si vous avez des remarques / conseils / plaintes contre ma stupidité à faire, n'hésitez pas, je vous dirais quand meme merci :) Sur ce, on doit bien être en 2015, donc bonne journée ;) Epsilon Titre: Re : Rajout de code sur Olly Posté par: _o_ le 03 Avril 2011 à 15:13:38 Et résultat, plus rien ne marche :/ Que veux-tu dire par «plus rien ne marche» ? Le fait qu'Olly n'affiche pas le code est une chose (et de mémoire, il y a un menu qui permet de reforcer l'analyse à partir d'un emplacement de l'exécutable). Le fait que l'exécutable ne fonctionne plus en est une autre. Titre: Re : Re : Rajout de code sur Olly Posté par: epsilon09 le 03 Avril 2011 à 18:24:28 il y a un menu qui permet de reforcer l'analyse à partir d'un emplacement de l'exécutable Ca ca m'intéresse, je me plonge dedans! Pour répondre à ta question, lorsque je le lance directement, il plante (fenêtre qui se ferme directement, sans mettre un message d'erreur), et quand je le debug, j'ai bien mon premier saut qui fonctionne (donc, celui qui m'amène en 4011CC), je trace, et la il me sort une exception :/ Titre: Re : Rajout de code sur Olly Posté par: epsilon09 le 03 Avril 2011 à 18:58:00 Hé bien _o_ tu avais bien raison ! Merci :)
Je travaillais sur OllyDbg 2.0 (qui donc, n'accepte pas de plugin), et en repassant sur la 1.10, avec le plugin AnalyseThis, le code apparait bien, et est bien traité ! Comme quoi, à une version près, ca change tout... Il me reste un chti problème, mais je devrais pouvoir le régler en cherchant bien. (Et dire que ca faisait 3-4 jours que je me triturais la tête sur les sections, ... rien de perdu!) |