我正在寻找从二进制文件提供重建控制流图同时支持多个平台(例如 x86、x64、arm)的项目。例如,考虑这个简短的汇编程序:
.global main
.intel_syntax noprefix
.extern getchar
.extern printf
.section .data
jmpTable:
.long _stub0
.long _stub1
.long _stub2
fmt: .asciz "%x\n"
.section .text
main:
call getchar
mov dl, 4
imul dl
add eax, offset jmpTable
jmp [eax]
.long 3851
_stub0:
mov eax, 0
jmp end
.long 3851
_stub1:
mov eax, 1
jmp end
.long 3851
_stub2:
mov eax, 2
jmp end
.long 3851
end:
push eax
push offset fmt
call printf
add esp, 8
ret
我考虑过的项目:
- IDA(迄今为止最好的,提取痛苦)
- BARF(天真、有限的方法)
- Angr(容易中断或永远计算)
- Radare2(是否有任何api可以导出cfg数据?)
- JakStab(仅限于 x86)
相当明显的选择,不过,导出一个过程间 CFG 仍然很痛苦。此外,虽然它能够找到此示例的所有基本块,但它会遗漏所有间接边。
这些项目应该提供一些 API 来提供 cfg。我知道仅用静态分析解决这个问题可能是不可行的。我正在寻找一种尽力而为的方法。