logo Homepage
+  NewbieContest
|-+  Divers» Cracking» help sur le fonctionnement d'un JMP
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: help sur le fonctionnement d'un JMP  (Lu 4333 fois)
prepa75

Profil challenge

Classement : 1019/54277

Membre Junior
**
Hors ligne Hors ligne
Messages: 97


Voir le profil
« le: 12 Juillet 2012 à 21:13:56 »

Bonsoir à toutes et à tous,

je suis actuellement sur le crackme NAG et en le désassemblant je me suis posé une question :

- la valeur hexa de l'instruction "jump Ma_fonction" est : E9 57 18 00 00
- cette instruction se trouve dans la zone .text à l'adresse 0x4024E4
- .text:004024D8 dd offset Ma_fonction (Ida me donne cette ligne pour le label Ma_fonction)

voici ma question : comment peut-on retrouver l'instruction E9 57 18 00 00 ? je sais qu'il y a des histoires de jump court, long, etc... mais je n'arrive pas a trouver une explication claire sur le sujet.

d'un autre coté voici la fonction ou j'aimerai jumper : .text:00401C88 dd offset loc_401D58
qui comme c'est écrit le data XRef se trouve à l'adresse 0x40C1C88 et la fonction se trouve en 0x401D58.

Quel est le raisonnement pour jumper sur ma fonction que je désire en modifiant l'instruction E9 57 18 00 00 ?

Merci par avance
« Dernière édition: 12 Juillet 2012 à 21:22:19 par prepa75 » Journalisée
harvey

Profil challenge

Classement : 12/54277

Membre Senior
****
Hors ligne Hors ligne
Messages: 316


Voir le profil WWW
« #1 le: 12 Juillet 2012 à 22:40:36 »

L'adresse du jmp est relative, et l'offset est exprimé en little endian par rapport à l'adresse de l'instruction qui suit.
L'offset est +1857h, l'adresse de référence est 4024E4+5. La destination est donc 403D40.

Cela dit tous les jmps n'ont pas le même format, celui-ci n'est pas le meilleur choix si tu veux sauter vers une adresse référencée par un pointeur. Tu trouveras une référence complète sur cette page.
Journalisée

L'entropie vient en mangeant.
prepa75

Profil challenge

Classement : 1019/54277

Membre Junior
**
Hors ligne Hors ligne
Messages: 97


Voir le profil
« #2 le: 12 Juillet 2012 à 22:49:08 »

nikel merci Harvey.

l'opcode E9 est donc limité à un jump de 7f ff ff ff c'est bien ça ? (en supposant que l'on puisse sauter dans des adresses inférieures à la rèf...)

dans la doc que tu m'a passé, a priori l'opcode d'un jump sur un pointeur est EA  (EA   JMPF   ptr16:16/32   Jump)

cependant comment écrire avec cette opcode un jump référencé par un pointeur ?

Journalisée
harvey

Profil challenge

Classement : 12/54277

Membre Senior
****
Hors ligne Hors ligne
Messages: 316


Voir le profil WWW
« #3 le: 13 Juillet 2012 à 17:13:53 »

Citation
l'opcode E9 est donc limité à un jump de 7f ff ff ff c'est bien ça ?
Dans les deux sens, donc il couvre tout l'espace d'adressage 32 bits. Je n'ai pas vérifié qu'un jump avec overflow fonctionne, mais ça ne m'étonnerait pas.

À vrai dire, je ne sais pas trop ce que fait 'EA'.
Citation
$ printf "\xeaabcdef" > jmp
$ ndisasm -b 32 jmp
00000000  EA616263646566    jmp dword 0x6665:0x64636261
Apparemment il faut spécifier le segment de code et l'offset, donc ce n'est pas ce que tu demandes.
Mais il y a un moyen de le trouver:
Citation
$ cat jmp.asm
bits 32
jmp  [ptr_ma_fonction]
jmp  far [ptr_ma_fonction]
ptr_ma_fonction dd  0x42424242
$ nasm jmp.asm
$ ndisasm -b 32 jmp
00000000  FF250C000000      jmp dword near [dword 0xc]
00000006  FF2D0C000000      jmp dword far [dword 0xc]
0000000C  42                inc edx
0000000D  42                inc edx
0000000E  42                inc edx
0000000F  42                inc edx
L'opcode fait deux octets et le paramètre est l'adresse du pointeur en little-endian. Manque de bol l'instruction que tu veux patcher est plus courte, mais rien ne t'empêche de calculer l'offset.

Ollydbg te permet aussi d'éditer le code et de reconstruire un exécutable avec les modifications que tu as faites. C'est plus pratique que nasm/ndisasm si tu as affaire à du PE.
Journalisée

L'entropie vient en mangeant.
prepa75

Profil challenge

Classement : 1019/54277

Membre Junior
**
Hors ligne Hors ligne
Messages: 97


Voir le profil
« #4 le: 16 Juillet 2012 à 10:38:18 »

j'ai bien compris ce que tu m'a expliqué, j'utilise IdaPro, je le trouve beaucoup plus complet que ollydbg

sinon je me suis fait piégé comme un débutant sur le coup du little-endian ! 

bonne semaine à toi
Journalisée
Pages: [1]
  Imprimer  
 
Aller à: