简单的活着

angr.Windows

Posted on By Mista Cai

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函数的位置。