Angr模板系列——1. hook and solve

Angr模板系列——1. hook and solve

处于以下两个原因,我决定写本系列文章

  • 利用符号执行可以提升逆向算法的效率,对于简单算法,可以快速求解。
    用算力来弥补逆向经验的不足。
  • reverse已经进入用angr自动化解题的时代,新手上路没模板就凉凉。

如果你是新手,建议看看angr-doc文档。

约束求解的一般步骤

  1. 创建project,比如:proj=angr.Project('./g',load_options={'auto_load_libs':False})
  2. 设置初始state,比如: state=proj.factory.blank_state(addr = addr_main)
  3. 设置位向量变量,比如:bv_key=state.solver.BVS('key',8 * len_key)
  4. 载入位向量到内存,比如:state.memory.store(addr_key,bv_key)
  5. 设置Simulation Managers,比如:simgr = proj.factory.simulation_manager(state)
  6. 运行,比如:simgr.explore(find=win,avoid=suck)
  7. 获取执行结果,比如: find=simgr.found[0]
  8. 约束求解,比如:key = find.solver.eval(bv_key,cast_to=str).strip('\0')

通过scanf/read/fread输入flag

如果求解对象是通过scanf获得,则必须要进行hook。

自己写的一个例子:
https://github.com/Vector1iu/how2angr/tree/master/one_input

proj.hook(addr_scanf,scanf_hook,length=5)

这里的length是指令长度,比如指令call ___isoc99_scanf的长度就为5。

示例代码

通过main函数参数读入flag

angr-doc给出的例子
https://github.com/angr/angr-doc/blob/master/examples/ais3_crackme/solve.py

参考文献

http://ysc21.github.io/blog/2016-01-27-angr-script.html
https://github.com/angr/angr-doc/blob/master/examples/asisctffinals2015_fake/solve.py

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,681评论 2 45
  • 2018-03-22 诵读«活法»第二章 怎样拥有一份喜欢的工作? 你一定要先了解自己喜欢什么,不喜欢什么,特长是...
    ouyangqingqiao阅读 702评论 0 0
  • 投射我儿早睡早起,注意面部卫生,脸上的毛囊炎好了,面部也光滑如初。 投射我儿积极开始复习、预习,迎接开学摸底测试,...
    花开生两面阅读 1,462评论 0 0
  • 最近我经历了人生中的第一场相亲,因为是家人的安排,不好推脱,于是怀着认识一个新朋友的期待,不多想便赴约了。 一路上...
    钟绯尔阅读 4,071评论 0 0