
BeaEngine est une bibliothèque C conçue pour décoder les instructions de 16 bits, 32 bits et 64 bits architectures Intel. Il comprend des instructions standard ensemble et des instructions définies à partir de FPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, VMX, CLMUL, AES, MPX, AVX, AVX2, AVX512 (VEX & EVEX PRÉFIXES), CET, BMI, BMI2, SGX, UINTR, KL, TDX et AMX extensions. Si vous souhaitez analyser les codes malveillants et plus généralement des codes obscurcis, BeaEngine renvoie une structure complexe qui décrit précisément les instructions analysées.
Vous pouvez l'utiliser en C / C ++ (utilisable et compilable avec Visual Studio, GCC, Mingw, DigitalMars, Borlandc, Watcomc, Sunforte, Pelles C, LCC), en assembleur (utilisable avec MASM32 et MASM64, NASM, FASM, GOASM) en C #, à Python3, à Delphi, à Purebasic et dans WindEv. Vous pouvez l'utiliser en mode utilisateur et en mode noyau.
Tout d'abord, vous pouvez récupérer les mnémoniques et les opérandes en fonction de la syntaxe spécifiée: syntaxe Intel pour NASM, MASM32 et MASM64, GOASM32 et GOASM64, FASM (NO AT&T Syntax en fait). Ensuite, vous pouvez réaliser une analyse précise sur le flux de données et le flux de contrôle pour générer des tranches ou des modèles d'obscurcissement.
Son code source est sous la licence LGPL3 avec un "MakeFile Builder" et des en-têtes pour les langues suivantes: C / C ++, C #, Python3, Delphi, PureBasic, MASM32, MASM64, NASM (x86 et x64), FASM (x86 et x64), Goasm (x86 et x64).
BeaEngine est implémentée à l'aide de tables Opcode à partir de la documentation Intel, des tables du site Web de Christian Ludloff www.sandpile.org et du projet x86doc de Felix Cloutier https://www.felixclutier.com
Ce logiciel est distribué sous la licence LGPL. Voir les fichiers de copie et de copie.
#!/usr/bin/python3
from BeaEnginePython import *
instr = Disasm(bytes.fromhex('6202054000443322'))
instr.read()
print(instr.repr())
La sortie est:
vpshufb zmm24, zmm31, zmmword ptr [r11+r14+0880h]
rax : #!/usr/bin/python3
from BeaEnginePython import *
buffer = bytes.fromhex('4831c04889fbffc04989c49031ed66586a005f80c40c')
instr = Disasm(buffer)
while instr.read() > 0:
if instr.modifies("rax"):
print(f"{instr.repr():20}rax register is modified")
else:
print(instr.repr())
La sortie est:
xor rax, rax rax register is modified
mov rbx, rdi
inc eax rax register is modified
mov r12, rax
nop
xor ebp, ebp
pop ax rax register is modified
push 00000000h
pop rdi
add ah, 0Ch rax register is modified
#!/usr/bin/python3
from BeaEnginePython import *
instr = Disasm(bytes.fromhex('e90000000090e901000000cc90'))
while instr.read() > 0:
print(instr.repr())
if instr.is_jump():
instr.follow()
Extraitons la structure d'instruction complète:
#!/usr/bin/python3
from BeaEnginePython import *
instr = Disasm(bytes.fromhex('62017d8115443322'))
instr.read()
print(instr.json())
La sortie est:
{
"repr": "vunpckhpd xmm24, xmm16, xmmword ptr [r11+r14+0220h]",
"category": "AVX512_INSTRUCTION",
"mnemonic": "vunpckhpd ",
"bytes": "62 01 7d 81 15 44 33 22",
"error": 0,
"arch": 64,
"operands": {
"1": {
"repr": "xmm24",
"type": "register",
"size": 128,
"mode": "write",
"register": {
"type": "xmm",
"value": "REG24"
}
},
"2": {
"repr": "xmm16",
"type": "register",
"size": 128,
"mode": "read",
"register": {
"type": "xmm",
"value": "REG16"
}
},
"3": {
"repr": "r11+r14+0220h",
"type": "memory",
"size": 128,
"mode": "read",
"memory": {
"base": "REG11",
"index": "REG14",
"scale": 1,
"displacement": "0x22"
}
}
},
"registers": {
"modified": {
"type": 4,
"gpr": "",
"mmx": "",
"xmm": "REG24",
"ymm": "",
"zmm": "",
"special": "",
"cr": "",
"dr": "",
"mem_management": "",
"mpx": "",
"opmask": "",
"segment": "",
"fpu": "",
"tmm": ""
},
"read": {
"type": 5,
"gpr": "REG11+REG14",
"mmx": "",
"xmm": "REG16",
"ymm": "",
"zmm": "",
"special": "",
"cr": "",
"dr": "",
"mem_management": "",
"mpx": "",
"opmask": "",
"segment": "",
"fpu": "",
"tmm": ""
}
},
"rflags": {
"of": null,
"sf": null,
"zf": null,
"af": null,
"pf": null,
"cf": null,
"tf": null,
"if": null,
"df": null,
"nt": null,
"rf": null
}
}
https://github.com/beaengine/beaengine/releases
apt install cmake
git clone https://github.com/BeaEngine/beaengine.git
cmake beaengine
make
cmake -DoptBUILD_DLL=ON beaengine
make
La documentation actuelle explique ici comment les structures de travail de Beaennegine.
L'ancienne documentation peut être lue ici: http://beatrix2004.free.fr/beaEngine/index1.php
Chaque version de BeaEngine est fournie avec une documentation PDF:
sudo apt install pandoc texlive-latex-extra
cd doc
pandoc --highlight-style tango -V mainfont="Arial" -V geometry:margin=1cm --output=beaengine.pdf beaengine.md
pandoc --highlight-style tango -V mainfont="Arial" -V geometry:margin=1cm --output=examples.pdf examples.md
Quelques exemples de base pour montrer comment BeaEngine travaille ici
Si vous souhaitez améliorer BeaEngine ou simplement ajouter des fonctionnalités privées, voici quelques liens: