angr学习笔记(9)(添加约束)
发布日期:2021-05-07 12:09:02 浏览次数:6 分类:原创文章

本文共 1760 字,大约阅读时间需要 5 分钟。

angr系列

文章目录

伪代码分析

在这里插入图片描述
需要在下方添加一个约束,防止路径爆炸if ( check_equals_AUPDNNPROEZRJWKB((int)&buffer, 0x10u) ),因为这种compare是属于一个字符一个字符进行比较,所以路径太多,需要添加约束。
在这里插入图片描述
先找到起始地址

    start_addr=0x08048625    init_state=p.factory.blank_state(addr=start_addr)

符号化输入:

    buffer_addr=0x0804A050    password=init_state.solver.BVS("password",16*8)    init_state.memory.store(buffer_addr,password)        sm=p.factory.simgr(init_state)

目标地址是if ( check_equals_AUPDNNPROEZRJWKB((int)&buffer, 0x10u) ),当寻到这里时,需要停下,自行进行约束判断
在这里插入图片描述

   check_addr=0x08048565    sm.explore(find=check_addr)

首先给函数进行参数初始化

        check_param1=buffer_addr        check_param2=0x10        check_bvs=check_state.memory.load(check_param1,check_param2)

进行约束添加

        check_constraint=desired_string==check_bvs        check_state.add_constraints(check_constraint)

最后进行求解即可:

        password1=check_state.solver.eval(password,cast_to=bytes)

脚本

import sysimport angrdef main(argv):    bin_path=argv[1]    p=angr.Project(bin_path)    start_addr=0x08048625    init_state=p.factory.blank_state(addr=start_addr)    buffer_addr=0x0804A050    password=init_state.solver.BVS("password",16*8)    init_state.memory.store(buffer_addr,password)        sm=p.factory.simgr(init_state)        check_addr=0x08048565    sm.explore(find=check_addr)    if sm.found:        check_state=sm.found[0]        desired_string='AUPDNNPROEZRJWKB'        check_param1=buffer_addr        check_param2=0x10        check_bvs=check_state.memory.load(check_param1,check_param2)        check_constraint=desired_string==check_bvs        check_state.add_constraints(check_constraint)        password1=check_state.solver.eval(password,cast_to=bytes)        print("Solution:{}".format(password1.decode('utf-8'))) if __name__=='__main__':    main(sys.argv)

在这里插入图片描述

LGCRCDGJHYUNGUJB

验证

在这里插入图片描述

上一篇:angr学习笔记(10)(hook)
下一篇:angr学习笔记(8)(文件内容符号化)

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年03月31日 11时03分37秒