
Beengine - это библиотека C, предназначенная для декодирования инструкций из 16 бит, 32 бит и 64 бит Intel Architectures. Он включает в себя стандартные инструкции и инструкции, установленные из FPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, VMX, CLMUL, AES, MPX, AVX, AVX2, AVX512 (VEX & EVEX PREFIXES), CET, BMI1, BMI2, SGX, UINTR, KL. Если вы хотите проанализировать вредоносные коды и, в более широком смысле, запутанные коды, Beengine отправляет сложную структуру, которая точно описывает анализируемые инструкции.
Вы можете использовать его в C/C ++ (используемый и компилируемый с Visual Studio, GCC, Mingw, Digitalmars, Borlandc, Watcomc, Sunforte, Pelles C, LCC), в ассемблере (используемый с MASM32 и MASM64, NASM, FASM, GOASM) в C#, в Python3, в Delphi, в PureBasic. Вы можете использовать его в пользовательском режиме и режиме ядра.
Во -первых, вы можете получить мнемонику и операнды в соответствии с указанным синтаксисом: Intel Syntax для NASM, MASM32 и MASM64, GOASM32 и GOASM64, FASM (NO AT & T SYNTAX на самом деле). Затем вы можете реализовать точный анализ потока данных и потока управления для создания срезов или паттернов запутывания.
Его исходный код находится под лицензией LGPL3 с «Makefile Builder» и заголовками для следующих языков: C/C ++, C#, Python3, Delphi, PureBasic, MASM32, MASM64, NASM (X86 и X64), FASM (X86 и X64), GoASM (X86 и X64).
Beengine реализуется с использованием таблиц OpCode из документации Intel, таблиц с веб -сайта Christian Ludloff www.sandpile.org и Project x86doc от Felix Cloutier https://www.felixcloutier.com
Это программное обеспечение распространяется по лицензии LGPL. Смотрите файлы копирования и копирования.
#!/usr/bin/python3
from BeaEnginePython import *
instr = Disasm(bytes.fromhex('6202054000443322'))
instr.read()
print(instr.repr())
Вывод:
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())
Вывод:
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()
Давайте извлеките полную структуру инструкции:
#!/usr/bin/python3
from BeaEnginePython import *
instr = Disasm(bytes.fromhex('62017d8115443322'))
instr.read()
print(instr.json())
Вывод:
{
"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
Текущая документация здесь объясняет, как работают рабочие структуры от Beaengine.
Старая документация можно прочитать здесь: http://beatrix2004.free.fr/beaengine/index1.php
Каждое выпуск маяки предоставлен с документацией в формате 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
Некоторые основные примеры, чтобы показать, как здесь работает Beaengine
Если вы хотите улучшить маяк или просто добавить несколько личных функций, вот несколько ссылок: