博客
关于我
angr学习笔记(9)(添加约束)
阅读量:332 次
发布时间:2019-03-04

本文共 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

验证

在这里插入图片描述

转载地址:http://atve.baihongyu.com/

你可能感兴趣的文章
FANUC机器人的镜像备份操作及U盘格式化具体步骤
查看>>
vue-依赖-点击复制
查看>>
js井子棋
查看>>
css取消双击选中文字
查看>>
LeetCode 116填充每个节点的下一个右侧结点指针
查看>>
2021-4-28【PTA】【L2-1 包装机 (25 分)】
查看>>
2021-5-2【指针】【作业】【指针代替下标进行数组编程】
查看>>
Arduino mega2560+MPU6050利用加速度值控制舵机
查看>>
pycharm+python+MS SQLSERVER 实战2、实现爬虫程序。
查看>>
深入理解数组指针与指针数组的区别
查看>>
iOS客户端与PHP服务端的简单交互
查看>>
Python的异常处理
查看>>
紫书——蛇形填数
查看>>
刷题计划1——poj1753
查看>>
第一场
查看>>
蓝桥杯备战——刷题(2019)
查看>>
ArcMap|栅格计算器报错
查看>>
《小石潭记》古文鉴赏
查看>>
Matlab中有关字符串数组的常见问题解答
查看>>
未定义的变量“py”或函数“py.command”
查看>>