[ - Intro - ExplicationsTutoriaux - Liens - Notes de fin - ]
 
[ - L'outil expliqué - ]

W32Dasm ( 8.5 / ... /  8.93 / 9 ) de URSoftware est un désassembleur longtemps fourni en version démo, très apprécié par les Crackers pour son utilisation très simple. Il possêde un debugger intégré qui ne vaut pas Softice, mais qui peut servir sur des programmes pas très lourds.
Quelques personnes y ont ajouté des fonctionnalités nouvelles que je ne présenterai pas ici. A vous de les découvrir sur protools.
Son principale concurrent est IDA de Datarescue qui présente une interface beaucoup plus lourde mais qui reste une référence dans la matière par sa fiabilité et la possibilité de "customisation" par script, plugins...
 
W32Dasm 8.93 / fonction désassembleur

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.
 

Programmes non-désassemblables

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. 
 

Lise Grim 2002 / WiA