angr ON WINDOWS
研究目标涉及恶意代码为 exe 格式的,需要有 dll 库的支持才能完整运行,因而只有在 Windwos 系统上才能加载成功。
NOTE:python中”\“代表转义,windows的cmd下要在路径前加r
。
p = angr.Project(r"/path/to/exe")
python27请认准python2.7.15
,不然安装pip比较麻烦。2715自带pip和环境变量设置。
相关问题
Symbolic execution on windows binary
angr按照ELF文件的方式处理PE文件,会弹出一大堆警告
......
WARNING | 2017-04-05 11:09:31,885 | simuvex.engine.successors | Exit state has over 257 possible solutions. Likely unconstrained; skipping. <BV32 unconstrained_ret_puts_21_32>
......
使用angr处理ELF文件和PE文件有很大的不同,
However, from your output it looks like you are simply not hooking msvcrt.puts
with libc.puts
, which kicks in the default ReturnUnconstrained
SimProcedure. You can either hook the call instruction, or the msvcrt.puts
symbol itself. See the Hooks section here.
MSVCRT
:MS Visual C++ RunTime library,执行C++的一些DLLs.
Add parsing of OVERLAY section for PE files
angr不能完全识别exe中的所有符号,比如下面的命令对linux文件正常执行,exe文件却不行
main = proj.loader.main_bin.get_symbol('main')
ELF和PE文件从main()
开始的反汇编指令一样,但是利用angr做出的CFG大不相同,
- ELF文件和期望的一样,
- angr不能识别PE文件中main函数位置,因此用入口点开始。CFG中每个节点的函数名称为“None”,而不是Linux图中显示的实际名称(无法识别符号)。最后,在ELF方面,angr自动挂钩scanf和printf等功能,但在PE文件中,必须首先手动设置挂钩。
NOTE:当用VS编译时,PE文件不包含函数名信息。
IDA Pro可以解析出这些函数名,以及识别main函数的位置。