Vous êtes sur la page 1sur 21

Introduction la fissuration partir de zro en utilisant

OllyDbg - Chapitre 4
Date de publication 27 Janvier 2007

Introduction la fissuration partir de zro en utilisant


OllyDbg - Chapitre 4 - Archives WASM.RU
INSTRUCTIONS
Comme il est mentionn dans la dernire partie, le but principal de la Introduction ... est
une explication de la thorie, la pratique OllyDbg, digrer, et plus tard, aprs l'acquisition de
la confiance dans leurs comptences, aller aux possibilits qu'elles offrent.

Ayant examin en OllyDbg presque tous les drapeaux, nous passons l'examen des
instructions les plus importantes. Si vous rencontrez dans l'instruction d'inscription, qui ne
sera pas apparatre ici, vous pouvez consulter certains guide plus complet l'assembleur.

NOP (NO OPERATION)

Ce guide, qui, au dmarrage ne produit pas de changements dans les registres, une pile ou la
mmoire, donc en anglais son nom signifie INACTIVE , savoir qu'il n'a pas
anznacheniya spcial, et donc il peut tre utilis, par exemple, si vous voulez remplacer un
instructions l'autre plus courte. Que le processeur ne soit pas confront des erreurs,
l'espace supplmentaire est rempli de NOP.

il sert galement la destruction complte des autres instructions, il a besoin de le remplacer


par une quantit approprie de nop, ou tout simplement zaNOPat.

Encore une fois ouvert krekmi CrueHead'a.

Au dbut, nous voyons le code d'origine. Pour zanopat premire instruction PUSH 0, ce qui a
une taille de 2 octets, notez la ligne de cotation correspondante avec la souris, puis appuyez
sur la touche espace ou le bouton droit de la souris - MONTER.
Ici, nous voyons que vous pouvez vraiment juste appuyer sur l'espace , qui ouvre la fentre
de saisie des instructions souhaites.

Ecrire NOP et cliquez sur MONTER.

Voir que Olli, sauf celles qui frappent le NOP, tant programme trs intelligent, prendre en
compte que PUSH occupe deux octets, et ne pas laisser a introduit un NOP plus agit, l'octet
suivant.

Maintenant, l'endroit o tait le PUSH 0, il y a deux NOP'a que les performances ne font
rien, ce que nous pouvons voir en appuyant sur F7 deux fois, pour devenir l'appel de
l'instruction marque. Nous voyons que seulement chang le registre EIP, contenant l'adresse
de l'instruction excuter ensuite, mais rien d'autre n'a chang sa valeur: pas d'autres registres
ou la pile, pas de drapeaux, pas de mmoire.

Maintenant, nous devons examiner ces deux nouveaux octets dans le DUMP, et les trouver l,
nous avons besoin de leur adresse en mmoire, et il est 401000 et 401001.

Allez la fentre DUMP, clic droit - Aller - Expression , puis besoin d'entrer
l'adresse o nous sommes situs les octets ncessaires.
Nous entrons 401000.

Nous voyons que:

La couleur rouge a chang octets Olli. Les deux premiers sont 90, puis la E8, FF, et tous les
octets restants relatifs aux instructions suivantes pour les NOP, qui est d'appeler.

Ollie peut ramener les octets modifis de nous?

Hehe, oui, peut-tre.

Dans l'une des deux fentres - DUMP ou une liste, marquer les deux octets.

Ensuite, cliquez sur le bouton droit de la souris et slectionnez Undo Selection

Et l encore, il y a la PUSH d'origine.


De plus, si nous regardons le DUMP, nous verrons que les octets originaux sont l.

C'est tout ce qui vient NOP instructions.

INSTRUCTIONS STACK
Nous avons dj dit que la pile - une pile de lettres sur lequel ces derniers sont placs au-
dessus ou d'o ils viennent.

Ensuite, suivez les instructions pour placer ou enlever les lettres .

POUSSER

instruction PUSH - instruction pour un espace typique lettres ou une valeur sur la pile.
Nous pouvons voir que la premire instruction krekmi CrueHead'a - une PUSH.

Dans ce cas, la PUSH 0 ', et, lorsqu'il est excut, cette instruction met 0 sur le dessus de la
pile, mais qui tait avant le sommet, sera sous cette valeur.

Nous pouvons voir comment la pile ressemble aprs l'excution PUSH. Adresse sur votre
machine peut tre diffrente, mais l'effet sera le mme.
Cette pile sur ma machine. Adresse 12FFC4 otlicheatsya vous pouvez, parce que la pile
chaque fois peut tre plac diffrents endroits, et son contenu initial peut galement varier,
par exemple, vous pouvez avoir une valeur autre que 7c816d4f. En appuyant sur F7 sur le
dessus obtiendra un zro, et tout le reste serait au fond de celui-ci. Cliquez sur Suivant pour
F7.

On voit que sur la pression F7, zro si joint au-dessus de ce que nous avons vu. En bas
12ffc4 est toujours la valeur 7c816d4f, et aucun des autres valeurs de la pile ne sont pas
modifis.

La principale diffrence est que la valeur suprieure de la pile est maintenant 12ffc0 (c'est l
neaohditsya zro, ce qui nous avons plac par une instruction PUSH), c'est vraiment de mettre
au-dessus de la meute des nouvelles lettres, qui sera au sommet, et l'autre - sous la lui, mais
rien dans les ne changera pas.

En outre, nous voyons que l'ESP, qui est l'adresse de la pile la plus haute valeur contient
maintenant 12FFc0.

Bien sr, l'instruction PUSH a plusieurs options pour mettre sur la pile, non seulement le
nombre de:

Le PUSH EAX EAX valorise haut de la pile. De mme, nous pouvons mettre sur la pile la
valeur d'un numro de registre, etc.

Vous pouvez galement placer la valeur en mmoire une adresse particulire:

Code (texte):

PUSH [401008]
S'il vous plat noter que cela interpretirovatitsya diffremment de ce qui suit:

Code (texte):

PUSH 401008

(Sans parenthses)

Si vous excutez la PUSH 401 008 ', puis le numro de pile 401 008 sera plac.

Aprs avoir fait, nous avons ce qui suit:

Si remplac par 'PUSH [401008]'

Les crochets indiquent le contenu de la mmoire 401 008 cellules, qui est, nous devons aller
la dchetterie et de voir ce qui est contenu l.

Avec l'aide de GOTO EXPRESSION 401008, nous voyons:

Dans ces quatre octets sont CA 20 40 00 Run PUSH F7.


On voit que dans la pile est la valeur que nous avons vu l'tape prcdente, mais octets a
retourn, savoir, ils ont t placs dans l'ordre inverse.

Ceci est l'une des proprits de la CPU: lors de la lecture ou l'criture du contenu vers / depuis
les octets de mmoire sont toujours retournes. Dnoncer ce fabricant de processeur, hehe.

En gnral, l'ide principale est que sans le paramtre rglable carrs entre parenthses est
juste un nombre, mais eux, il est l'adresse de la cellule de mmoire, qui contient une valeur
sur la pile.

Maintenant, nous savons que Ollie, quand nous crivons PUSH [401000] et affiche
interprte

Code (texte):

PUSH DWORD PTR DS: [401008]

En effet, sauf indication contraire spcifiquement, Olli estime que la ncessit de lire 4 octets
de mmoire, qui est, DWORD. Le reste des options sera discut dans d'autres manuels.

POP

instruction POP est inverse PUSH: elle obtient la premire lettre ou la premire valeur de la
pile et la place dans les instructions de destination des paramtres spcifis. Par exemple, POP
EAX prend une premire valeur de la pile et le place dans l'EAX, la valeur est passe ct,
la stanositsya suprieure.

Il semble qu'au dbut krekmi CrueHead'a ont la dclaration suivante:


Remplacer ces instructions POP EAX , prenant note de la premire ligne et en appuyant
sur le gap :

C'est ce qui va garder la pile avant d'excuter les instructions suivantes:

Un ESP indique 12FFc4, qui est l'emplacement de la valeur suprieure contenue dans la pile.

Et nous voyons que EAX contient zro (dans mon cas).

Appuyez sur F7.


On voit que la pile tait parti notre premire lettre et ESP pointe vers 12ffc8.

Mais d'o notre lettre ? tant donn que le guide tait POP EAX , nous voyons que
contient maintenant la valeur de EAX 7c816d4f - il est dans mon cas, et votre valeur peut tre
rgle, il y aura quelque chose qui tait couch sur le dessus de la pile.

De la mme faon, il y avait POP ECX la valeur leve une instruction serait place dans le
registre ECX ou d'un autre registre, qui serait indiqu.

Donc, nous avons examin les instructions qui sont placs ou prises de la pile des valeurs une
la fois.

Pushad

PUSHAD met le contenu des registres la pile dans un certain ordre, savoir PUSHAD
quivalent pousser EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI.

Voyons voir s'il est vrai que nous avons dit camarade CAOS REPTANTE dans son tutoriel
sur assembleur, hehe.

Chargez nouveau le menu krekmi CrueHead'a appel pour obtenir des instructions de
remplacement et d'criture PUSHAD.
Ceci est ma pile de dpart et les registres avant les registres.

Appuyez sur F7 et voir que maintenant dans la pile:

Nous voyons que tous les registres ont t PUSH'u. 12ffc4 adresse est une valeur qui se
trouvait au-dessus de la pile avant d'excuter des instructions, mais maintenant, aprs il est nul
(PUSH EAX), le contenu de ECX et 12ffb0 - qui est dans le ECX. Vient ensuite le contenu
des registres de l'ESP l'EDI.

popd

L'inverse de l'instruction est PUSHAD popad, qui prend une valeur de la pile et les place dans
les registres appropris. Popad quivalent 'EDI pop, ESI, EBP, ESP, EBX, EDX, ECX,
EAX.

Comme dans l'exemple prcdent, nous prsentons les instructions popad:


tant donn que la pile contient dj les valeurs des registres, l'excution popad il retourne
son tat d'origine.

Maintenant, il est exactement la mme que celle avant la PUSHAD, et les registres ont repris
leur valeur.

Combinaison PUSHAD-popad souvent utilis quand il est ncessaire la fois pour enregistrer
le contenu de tous les registres, puis effectuer toute autre opration qui modifie la valeur du
registre et la pile, puis les restaurer l'tat d'origine en utilisant popad.

Il y a aussi les options suivantes:

PUSHA 'AX-poussoir, CX, DX, BX, SP, BP, SI, DI'.


POPA quivalent DI pop, SI, BP, SP, BX, DX, CX, AX (valeurs recouvrables
correspondantes ESP et SP ne sont pas placs dans ces registres, et sont exclus).

PUSHA et POPA comme leurs surs PUSHAD popad et, en plus, qui sont utiliss dans les
programmes 16 bits, donc nous ne sommes pas intresss, comme OllyDbg - un dbogueur
pour les programmes 32 bits.
INSTRUCTIONS POUR LA MANIPULATION DES
DONNEES
MOV

Cette dclaration dplace le deuxime oprande au premier, par exemple:

Code (texte):

MOV EAX, EBX

Ici, il y a un mouvement des valeurs bits de EBX de EAX. Nous regardons Olly et notre bon
vieux krekmi de CrueHead'a.

Je ne veux plus tre rpte si ncessaire pour nous d'entrer dans les instructions, il suffit de
regarder les registres:

Sur ma machine, EAX contient 0 et ECX 7c91eb94. Ces valeurs initiales peuvent avoir
diffrentes, mais la chose importante est que en appuyant sur F7 dplacer valeur EBX dans
EAX, cliquez donc ct de ce bouton.

Est-ce clair?

Nous mov il y a diffrentes options, telles que:


Code (texte):

MOV AL, CL

Cela dplace le contenu CL dans l'AL. Ecrire cette dclaration Ollie.

registres:

Rappelez-vous, AL - est les deux derniers chiffres EAX et CL - les deux derniers chiffres de
ECX. Cliquez sur Suivant pour F7.

On voit que ce ne fut copi dans le AL B0 sans changer le reste du contenu de EAX et ECX,
savoir les deux derniers chiffres de EAX.

Nous pouvons galement dplacer le contenu d'un registre dans la mmoire d'une cellule
spcifique ou vice-versa.

Dans ce cas, dplacer le contenu de l'adresse 405000 dans EAX, et comme mentionn plus
haut, DWORD signifie que vous devez dplacer les quatre octets. Ces instructions peuvent
provoquer l'erreur, si elle est donne par la cellule de mmoire n'existe pas. Nous pouvons
facilement tester en Olli.

Nous allons la dpotage et le faire GOTO expession 405000.

Nous voyons que le contenu de l'emplacement de mmoire - 00 10 00 00 Etant donn que le


contenu de la mmoire est stocke sous une forme inverse, l'EAX obtient 00 00 10 00.
Appuyez sur F7 et voir ce qui se passe.

C'est une valeur de 1000, qui a t lu dans la mmoire. Maintenant, si nous voulons crire une
valeur cette adresse:

Code (texte):

MOV DWORD PTR DS: [400500], EAX

Nous prsentons ces instructions.

Avec DUMP voir 405000:


Cependant, en appuyant sur la F7 vient bummer:

Mouches exception,
et cela est d au fait que nous voulons enregistrer dans la section o crire, c'est, pour le
changer en octets, zaprescheno.Ok comment changer le droit de travailler avec les sections
que nous apprenons alors, alors qu'il est important de lire les instructions. Il est vident que si
peremeschaniya 4 octets ispoletsya mot d'un DWORD, puis de se dplacer deux octets en
utilisant le mot, et le mot BYTE - pour dplacer un.

Regardez.

Code (texte):

MOV AX, WORD PTR DS: [405 008]

Ici dplacer deux octets de mmoire l'adresse 405000 dans AX. Dans ce cas, nous ne
pouvons pas crire EAX, comme le mouvement seulement deux octets, vous devez donc
utiliser un registre de 16 bits.

Avec DUMP look qui est situ 405000.

En appuyant sur F7 doivent se dplacer que ces deux octets dans AX. vrifier:
Et AX dans l'ordre inverse a t lu le contenu de la mmoire, et le reste de EAX n'a pas
chang.

De mme ispol'uet BYTE.

Code (texte):

Mov al, BYTE PTR DS: [405 008]

Dans ce cas, seul le dernier octet est dplac l'AL, soit 08.

MOVSX (Move avec extension de signe)

Copie le contenu du second oprande, qui peut tre un registre ou un emplacement de


mmoire, la premire (qui devrait tre deux fois suprieure la seconde), remplissant les bits
restants valeur gauche du bit le plus significatif du deuxime oprande. est un exemple
suivant.

Dfinition tire de la CAOS'a tutoriel. Maintenant, nous allons essayer de le cas de test dans
OllyDbg, pour lesquels nous utilisons notre ami CrueHead'a.

Je ne serai pas ici pour parler beaucoup, parce que je veux que vous fassiez tout vous-mme et
chercher des valeurs auto-oprandes, hehe. En OllyDbg il y a une fentre la liste de
poyasneneniyam en bas droite et en haut de la fentre DUMP.
Ici, nous voyons que la fentre avec l'explication nous montre la valeur de l'oprande de nos
instructions. Dans mon cas BX contient F000.

Et nous voyons que EAX contient zro, ce qui nous aide toujours OllyDbg interprter les
instructions excuter (j'espre que vous avez matris le concept o et ce qu'il faut
rechercher, hehe).

Appuyez sur F7.

Nous voyons que la copie AX BX, qui contenait le F000, et que l'espace restant rempli de
FFFF, depuis F000 - nombre ngatif de 16 bits. Si contenu BX 1234, EAX serait gal
00.001.234, savoir octets de gauche seraient bouchs avec des zros depuis 1234 - positif
numro 16 bits.

Concept de nombres positifs et ngatifs dans le 16 bits fonctionne de la mme que pour le 32
bits, que dans l'intervalle de 0000 FFFF. Les chiffres de 0000 7FFF sont positifs, et tout ce
qui prcde FFFF - ngatif. Voyons voir ce qui se passe si l'on change la BX 7FFF et EAX
zro puis suivez les instructions.
L'AX a t copi 7FFF, et le reste - zros marqu, comme 7FFF est un nombre positif. Nous
faisons la mme chose avec BX = 8000 (ngatif).

Suivez les instructions de la nouvelle via F7.

La BX 8000 a t copi, et le reste FFFF, puisque 8000 est un nombre ngatif.

MOVZX (Dplacer avec zro Prolonger)

MOVZX similaire l'instruction prcdente, mais dans ce cas, l'espace est tout simplement
rempli de zros, et ne dpend pas du fait que la deuxime dclaration est positive ou non.
Nous ne donnerons pas d'exemples pour cette dclaration, car ils sont semblables celles ci-
dessus, sauf que dans la partie suprieure de EAX aura toujours AX 0000. La mme chose
sera copi BX.

LEA (charge d'adresse effective)

Similaire l'instruction MOV, mais le premier oprande - ce registre usage gnral, et la


seconde - l'adresse de mmoire. Cette instruktsiktsiya surtout utile lorsque l'adresse dpend
des calculs prcdents.

Nous prsentons dans OllyDbg la dclaration suivante:


Dans ce cas, il y a des crochets, mais ils ne fixent pas l'adresse sur la ligne, et les calculs sur
lesquels elle est obtenue.

Dans mon cas, ECX est 12FFb0.

Dans cet exemple LEA ECX ajouter la valeur 38 et la valeur obtenue est mise en EAX.

Dans la fentre d'explication, les deux oprandes seront affichs.

Il montre que l'oprande est 12Ffe8, qui est la somme ECX + 38, et d'excuter des
instructions EAX contient zro.

Appuyez sur F7.

L'adresse spcifie a t place dans EAX, bien que les crochets pourraient nous faire penser
qu'il devrait y avoir le contenu ont t placs cette adresse, comme il l'a fait l'instruction
MOV, mais la LEA vient de mettre l'adresse dans le premier oprande, et non son contenu.

XCHG (Exchange Registre / Mmoire avec le registre)

Cette instruction change le contenu de deux oprandes, par exemple:

Code (texte):
XCHG EAX, ECX

valeur EAX sera plac dans ECX et vice versa. Vrifiez dans Ollie.

Sur ma machine avant l'EAX contient zro et ECX - 12FFb0.

En appuyant sur la F7, nous voyons qu'ils valeurs partages.

Vous pouvez galement utiliser cette instruction la valeur d'change du registre et de la


mmoire, si nous avons la permission de poster cette section.

En appuyant sur F7:

Comme dans l'exemple du MOV a t une exception, puisque nous ne disposons pas des
autorisations d'criture.
Ok, je pense que pervvaya des parties consacres aux instructions que j'espre tait intressant
et utile, que les exemples sont expliqus assez bien le sujet de la prsentation. Dans la partie
suivante , nous allons continuer tudier les instructions. Ricardo Narvaha, trans. Aquila