美文网首页
Angr模板系列——1. hook and solve

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

作者: 413x | 来源:发表于2018-04-19 22:50 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Angr模板系列——1. hook and solve

          本文链接:https://www.haomeiwen.com/subject/vzggkftx.html