logo Homepage
+  NewbieContest
|-+  Divers» Cracking» Rajout de code sur Olly
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: Rajout de code sur Olly  (Lu 4160 fois)
epsilon09
Profil challenge

Classement : 9584/55020

Néophyte
*
Hors ligne Hors ligne
Messages: 3


Voir le profil
« 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
Journalisée
_o_
Relecteur

Profil challenge

Classement : 43/55020

Membre Héroïque
*
Hors ligne Hors ligne
Messages: 1258


Voir le profil
« #1 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.
Journalisée

Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie : http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
epsilon09
Profil challenge

Classement : 9584/55020

Néophyte
*
Hors ligne Hors ligne
Messages: 3


Voir le profil
« #2 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
Journalisée
epsilon09
Profil challenge

Classement : 9584/55020

Néophyte
*
Hors ligne Hors ligne
Messages: 3


Voir le profil
« #3 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!)
Journalisée
Pages: [1]
  Imprimer  
 
Aller à: