[ - Intro - Explications - Tutoriaux - Liens - Notes de fin - ] |
[ - L'outil expliqué - ] |
W32Dasm fait office de désassembleur et de debugger, mais c'est le désassembleur qui est sa fonction la plus intéressante.
![]() |
|||
![]() |
Ouvrir un fichier | ![]() |
Sauvegarder le désassemblage |
![]() |
Copier une partie du désassemblage | ![]() |
Imprimer le code |
![]() |
|||
Permet de récupérer le désassemblage d'une sauvegarde. | |||
![]() |
|||
Utilisation du debugger de W32Dasm. | |||
![]() |
|||
![]() |
Rechercher une chaîne de caractère | ||
![]() |
|||
![]() |
Aller au début du code désassemblé | ![]() |
Aller au point d'entrée ( entry point ) du programme |
![]() |
Aller à un numéro de page du code ( pas utile ) | ![]() |
Aller à une ligne donnée du code |
![]() |
|||
![]() |
Faire le saut | ![]() |
Revenir au saut |
![]() |
Entrer dans le call | ![]() |
Revenir à l'appel du call |
![]() |
|||
![]() |
Liste des fonctions importées | ![]() |
Liste des fonctions exportées |
![]() |
|||
![]() |
Expose l'hexa des datas du programme | ![]() |
Expose l'hexa correspondant des instructions |
![]() |
|||
![]() |
Liste des "dialogues" ( boites "windows"... ) | ![]() |
Liste des "menus" |
![]() |
Liste des chaines de caractères du programme |
Utilisation :
Naturellement, plus le programme
est gros en taille, plus le désassemblage est long.
![]() |
![]() Ouvrir le fichier ( exe, dll, com... ) ou un projet existant et laisser W32Dasm faire son travail. |
![]() |
![]() Sauvegarder le fichier : un fichier alf ( code désassemblé ) et un wpj ( hexa ) sont créés. |
![]() |
![]() Rechercher les chaînes de caractères du programme pour trouver des choses intéressantes. ( registered... ) Cliquer sur la chaîne pour arriver sur les instructions et la fonction l'utilisant et recliquer dessus pour voir si cette chaîne n'est pas utilisée ailleurs dans le programme. |
![]() |
![]() ![]() ![]() ![]() ![]() Naviguer dans le code en utilisant les fléches de direction, les touches page up/down du clavier et les boutons de W32Dasm pour faire les jump, rentrer dans les call, en revenir et aller à des numéros de ligne d'instructions. |
![]() |
![]() ![]() ![]() ![]() Pour trouver un API Windows utilisé par le programme, une fonction que la DLL, exe,etc. exporte, une boite de dialogue ou une référence dans le menu qui va nous aider à trouver la protection. |
![]() |
![]() Pour voir l'hexa des instructions ( pour trouver une signature si on a un problème avec la méthode traditionnelle ). |
![]() |
![]() Pour récuperer une partie du code et la mettre dans un fichier texte, html,etc. , il suffit de cliquer dans la marge du numéro d'instruction de début ( un point rouge apparait ), puis d'enfoncer la touche "Maj / Shift" et de recliquer à côté du numéro d'instruction de fin. ( une série de points rouge à côté des lignes sélectionnées apparaît ) Il faut ensuite cliquer sur ce bouton de W32Dasm qui placera les lignes dans le presse-papier de Windows. Un "coller" ou un "Contrôle+V" vous affichera le texte dans Notepad, Word, etc. |
Dans le cas de programmes
qui ont été protégés par des packers, crypters,
etc., le code n'est pas directement lisible par W32Dasm.
Désassemblage non
fait
La liste des sections, infos
imports, exports, etc peuvent être non renseignés et surtout
pas d'instructions
Disassembly
of File: test_aspackupx.exe
Code
Offset = 00000000, Code Size = 00000000
Data
Offset = 0002D200, Data Size = 00000000
Number of Objects = 0006 (dec), Imagebase = 00400000h
Object01: UPX0 RVA: 00001000 Offset: 00000400 Size:
00000000 Flags: C0000040
Object02: UPX1 RVA: 00044000 Offset: 00000400 Size:
0002A800 Flags: C0000040
Object03: .rsrc RVA: 0006F000 Offset: 0002AC00 Size:
00001000 Flags: C0000040
Object04: UPX2 RVA: 00070000 Offset: 0002BC00 Size:
00000600 Flags: C0000040
Object05: .blabla RVA: 00073000 Offset: 0002C200 Size: 00001000 Flags:
C0000040
Object06: .data RVA: 00074000 Offset: 0002D200 Size:
00000000 Flags: C0000040
+++++++++++++++++++
MENU INFORMATION ++++++++++++++++++
There Are No Menu Resources in This Application
+++++++++++++++++
DIALOG INFORMATION ++++++++++++++++++
There Are No Dialog Resources in This Application
+++++++++++++++++++
IMPORTED FUNCTIONS ++++++++++++++++++
Number
of Imported Modules = 0 (decimal)
+++++++++++++++++++
IMPORT MODULE DETAILS +++++++++++++++
+++++++++++++++++++
EXPORTED FUNCTIONS ++++++++++++++++++
Number
of Exported Functions = 0000 (decimal)
+++++++++++++++++++
ASSEMBLY CODE LISTING ++++++++++++++++++
//**********************
Start of Code in Object **************
Program
Entry Point = 00473001 (test_aspackupx.exe File Offset:00073001)
Désassemblage faux
Le code compressé,
crypté, etc. est désassemblé.
Disassembly
of File: CrackMe#4.exe
Code
Offset = 00000400, Code Size = 00000000
Data
Offset = 00000400, Data Size = 00000000
Number of Objects = 0003 (dec), Imagebase = 00400000h
Object01: UPX0 RVA: 00001000 Offset: 00000400 Size:
00000000 Flags: E0000080
Object02: UPX1 RVA: 00044000 Offset: 00000400 Size:
0002BA00 Flags: E0000040
Object03: .rsrc RVA: 00070000 Offset: 0002BE00 Size:
00001400 Flags: C0000040
+++++++++++++++++++
MENU INFORMATION ++++++++++++++++++
There Are No Menu Resources in This Application
+++++++++++++++++
DIALOG INFORMATION ++++++++++++++++++
There Are No Dialog Resources in This Application
+++++++++++++++++++
IMPORTED FUNCTIONS ++++++++++++++++++
Number
of Imported Modules = 0 (decimal)
+++++++++++++++++++
IMPORT MODULE DETAILS +++++++++++++++
+++++++++++++++++++
EXPORTED FUNCTIONS ++++++++++++++++++
Number
of Exported Functions = 0000 (decimal)
+++++++++++++++++++
ASSEMBLY CODE LISTING ++++++++++++++++++
//**********************
Start of Code in Object UPX0 **************
Program
Entry Point = 0046F6C0 (CrackMe#4.exe File Offset:0002BAC0)
:00444000
66
BYTE 066h <===
bidon
:00444001
66FE
BYTE 0feh <===
bidon
:00444003
FF0410
inc dword ptr [eax+edx] <===
bidon
:00444006
40
inc eax <===
....
:00444007
0003
add byte ptr [ebx], al
:00444009
07
pop es
:0044400A
42
inc edx
:0044400B
6F
outsd
:0044400C
6F
outsd
:0044400D
6C
insb
La dernière possibilité
reste que W32Dasm plante ou qu'il se fige.