Welcome to the BeaEngine Sweet Home - x86 x86-64 disassembler library - (IA-32 & Intel64)

Accueil

Cet espace est dédié à la notion de désassemblage de code assembleur sur processeurs intel et amd. Ce projet se compose d'une librairie de désassemblage de base (BeaEngine.lib) pour plateformes windows sur architectures IA-32 ou Intel64, d'outils utilisant cette lib (LookInside, plugin pour Immunity Debugger, plugin pour OllyDbg), d'un "Length Disassembler Engine" (LDE64) et d'une documentation sur l'encodage des instructions x86 et x86-64.

BeaEngine.lib est une librairie codée en C (grâce à l'IDE Code::Blocks et au compilateur Pelles C ) conçue pour décoder les instructions des architectures intel 32 bits et/ou 64 bits. Elle comporte à l'heure actuelle une seule fonction appelée Disasm qui permet de désassembler n'importe quelle ligne de code qui respecte le jeu d'instructions Intel. Ceci inclus le jeu d'instructions standard, les technologies FPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, VMX. Pour les adeptes de l'analyse de codes malicieux et plus généralement de codes obfusqués, BeaEngine décode également les instructions non documentées proposées comme des "alias" sur sandpile. Dans tous les cas de figure, elle renvoie une structure complexe qui décrit de façon très précise l'instruction analysée.

Elle est prévue pour être utilisée en C (utilisable avec Visual Studio, Pelles C, LCC ou MingW), en assembleur (utilisable avec masm32, nasm, fasm, GoAsm) en Python et en Delphi. Elle peut être utilisée indifféremment en ring3 et en ring0 puisqu'elle n'utilise pas l'API windows. Elle a été pensée et conçue pour réaliser de nombreuses tâches. Elle permet dans un premier temps d'obtenir le mnémonic et les opérandes suivant la syntaxe spécifiée : syntaxe intel pour Nasm, masm32 et masm64, GoAsm32 et GoAsm64, fasm et syntaxe AT&T. Elle permet également des analyses fines de data-flow ou de control-flow, pour construire des slices ou pour élaborer des patterns d'obfuscation.Le pack proposé ici est composé de la librairie, de son code source sous licence LGPL3, de nombreux exemples plus ou moins complexes incluant les headers pour les langages C, Python, Delphi, masm32, nasm, fasm ,GoAsm.

BeaEngine a été codé à partir des tables d'opcodes proposées dans la documentation intel et a été complété par les tables proposées par Christian Ludloff sur son site www.sandpile.org

Exemple 1 : décodage simple x86

Pour cet exemple, nous voulons décoder , sur une architecture 32 bits, la séquence de bytes suivante :

0x89, 0x94, 0x88, 0x00, 0x20, 0x40, 0x00

Si vous demandez une syntaxe de sortie MASM32 , BeaEngine vous renverra ceci :

mov dword ptr ds:[eax + ecx*4 + 402000h], edx

Si vous demandez une syntaxe de sortie AT&T , BeaEngine vous renverra ceci :

movd %edx, %ds:402000h(%eax,%ecx,4)

Si vous demandez une syntaxe de sortie NASM , BeaEngine vous renverra ceci :

mov dword [ds:eax + ecx*4 + 0x402000], edx

Exemple 1 : analyse complète

Pour ceux qui veulent analyser l'instruction précédente de façon précise, BeaEngine propose les champs suivants :

Exemple 2 : décodage simple x86-64

Cette fois ci, nous voulons décoder , sur une architecture 64 bits, la séquence de bytes suivante :

0x41, 0x80, 0x7E, 0x01, 0x22

Si vous demandez une syntaxe de sortie MASM64 , BeaEngine vous renverra ceci :

cmp byte ptr ds:[r14+01h], 22h

Si vous demandez une syntaxe de sortie AT&T , BeaEngine vous renverra ceci :

cmpb $22h, %ds:01h(%r14,)

Si vous demandez une syntaxe de sortie NASM , BeaEngine vous renverra ceci :

cmp byte [ds:r14+0x01], 0x22

Exemple 2 : analyse complète

Pour ceux qui veulent analyser l'instruction précédente de façon précise, BeaEngine propose les champs suivants :

Performances

Pour un poids d'environ 250 ko (sous forme de dll), la fonction Disasm de BeaEngine propose un rendement assez confortable. Sur un intel core 2 duo, elle permet de désassembler un fichier de 50 Mo (contenant l'équivalent de 22 millions d'instructions) en environ 13 secondes. A titre de comparaison, la fonction Disasm du moteur de OllyDebugger 1.10 qui renvoie également une structure très complète permet de désassembler le même fichier de 50 Mo en environ 40 secondes.

Contributeurs

Un grand merci à tous les contributeurs qui ont fait progressé BeaEngine par leurs conseils, leurs correctifs et leurs remarques: