
Beaengineは、16ビット、32ビット、64ビットのインテルアーキテクチャからの命令をデコードするために設計されたCライブラリです。 It includes standard instructions set and instructions set from 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, TDX and AMX拡張機能。悪意のあるコードとより一般的に難読化されたコードを分析する場合、Beaengineは、分析された命令を正確に説明する複雑な構造を送り返します。
C/C ++(使用可能で、Visual Studio、GCC、MINGW、DigitalMars、BorlandC、Watcomc、Sunforte、Pelles C、LCCを使用することができます。ユーザーモードとカーネルモードで使用できます。
まず、指定された構文、NASM、MASM32およびMASM64のIntel構文、GOASM32およびGOASM64、FASM(実際にはAT&T構文なし)に従って、ニーモニックとオペランドを取得できます。次に、データフローとコントロールフローの正確な分析を実現して、スライスまたは難読化パターンを生成できます。
そのソースコードは、「MakeFile Builder」と次の言語のヘッダーを備えたLGPL3ライセンスの下にあります:C/C ++、C#、Python3、Delphi、PureBasic、MASM32、MASM64、NASM(X86およびX64)、FASM(X86およびX64)、GoAsm(X86およびX64)。
BeaNGINEは、IntelドキュメントのOpCodeテーブル、 Christian Ludloff Webサイトwww.sandpile.orgのテーブル、およびFelix Cloutier https://www.felixcloutier.comのプロジェクトx86docを使用して実装されています。
このソフトウェアは、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
ここでの現在のドキュメントでは、ビーゲンェの作業構造がどのようになっているかを説明しています。
古いドキュメントは、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がどのように機能しているかを示すためのいくつかの基本的な例
Beaengineを改善したり、プライベート機能を追加したりする場合は、次のリンクを次に示します。