
Beaengine은 16 비트, 32 비트 및 64 비트 인텔 아키텍처에서 지침을 해독하도록 설계된 C 라이브러리입니다. 여기에는 FPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, VMX, CLMUL, AES, MPX, AVX, AVX2, AVX512 (VEX & EVEX PREFIXES), CET, CET, BMI1, BMI2, SGX, KL, KL, KL, KL, kl, kl, kl, kl, a ami2, sse4.2, sse4.2, sse4.2, sse4.2, sse4.2에서 설정된 표준 지침 세트 및 지침이 포함됩니다. 확장. 악의적 인 코드와보다 일반적으로 난독 화 된 코드를 분석하려면 Beaengine은 분석 된 지침을 정확하게 설명하는 복잡한 구조를 다시 보냅니다.
C/C ++ (Visual Studio, GCC, Mingw, DigitalMars, Borlandc, Watcomc, Sunforte, Pelles C, LCC), C#3에서 MASM32 및 MASM64, NASM, GOASM, Python3, Delphi, Windbasic 및 Windbasic에서 C/C ++에서 사용할 수 있습니다. 사용자 모드 및 커널 모드에서 사용할 수 있습니다.
먼저, NASM, MASM32 및 MASM64, 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)에 대한 헤더 아래에 있습니다.
Beaengine은 Intel Documentation의 Opcode 테이블, Christian Ludloff 웹 사이트 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 레지스터 수정 지침 및 추출 지침에 대한 루프 : 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
각 Beaengine 릴리스는 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을 개선하거나 개인 기능을 추가하려면 다음은 다음과 같습니다.