
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
验证
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月31日 11时03分37秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
网页实时显示已经运行了多少天 html+js
2019-03-04
判断移动端(手机)还是客户端(电脑)打开网页并跳转不同页面(首页)
2019-03-04
10分钟实现个人博客布置说说留言功能,Artitalk.js插件使用
2019-03-04
眼睛跟随鼠标转动的小黄人 html+css+js
2019-03-04
canvas贪吃蛇效果 html+css+js
2019-03-04
跟随鼠标移动的星星✩直接在页面引用✧✧✧
2019-03-04
poj 3660 (floyd)
2019-03-04
8086汇编语言21键电子琴
2019-03-04
找密码
2019-03-04
Python初级知识总结
2019-03-04
python|画图1(蛇)
2019-03-04
婚姻稳定匹配问题
2019-03-04
C++数据类型,运算符,注释
2019-03-04
C++语句,函数,标准输入输出
2019-03-04
平均年龄,,数字求和
2019-03-04
简单的字符串操作(注意要点)
2019-03-04
统计字符数
2019-03-04
C与C++区别
2019-03-04
原生 JS 封装的一些方法 【更新中...】
2019-03-04