
angr学习笔记(7)(malloc地址单元符号化)
发布日期:2021-05-07 12:09:01
浏览次数:6
分类:原创文章
本文共 2166 字,大约阅读时间需要 7 分钟。
angr系列
文章目录
伪代码分析
首先记得找出起始地址的esp:
start_addr=0x08048699 init_state=p.factory.blank_state(addr=start_addr) print("ESP:",init_state.regs.esp)
输出如下:
malloc
的地址具有随机性,所以我们直接指定即可。
angr
默认写入int
数据,是大端写入,所以我们在这里不能缺少:
buffer0=0x7fff0000-0x100 buffer1=0x7fff0000-0x200 buffer0_addr=0x0ABCC8A4 buffer1_addr=0x0ABCC8AC init_state.memory.store(buffer0_addr,buffer0,endness=p.arch.memory_endness) init_state.memory.store(buffer1_addr,buffer1,endness=p.arch.memory_endness)
这一参数endness=p.arch.memory_endness
来指定参数。
接着符号化所需输入的变量:
p1=init_state.solver.BVS("p1",8*8) p2=init_state.solver.BVS("p2",8*8) init_state.memory.store(buffer0,p1) init_state.memory.store(buffer1,p2)
把栈的内存单元地址放在这个buffer0的内存单元
里面,然后再去把栈的内存单元去符号化
buffer0=0x7fff0000-0x100
也就是需要符号化的内存单元(也是把原来malloc
开辟的空间,返回开辟空间的地址,把这个给丢弃,紧接着把栈中空间地址赋给buffer0
)
脚本:
import angrimport sysdef main(argv): bin_path=argv[1] p=angr.Project(bin_path) start_addr=0x08048699 init_state=p.factory.blank_state(addr=start_addr) print("ESP:",init_state.regs.esp) buffer0=0x7fff0000-0x100 buffer1=0x7fff0000-0x200 buffer0_addr=0x0ABCC8A4 buffer1_addr=0x0ABCC8AC init_state.memory.store(buffer0_addr,buffer0,endness=p.arch.memory_endness) init_state.memory.store(buffer1_addr,buffer1,endness=p.arch.memory_endness) p1=init_state.solver.BVS("p1",8*8) p2=init_state.solver.BVS("p2",8*8) init_state.memory.store(buffer0,p1) init_state.memory.store(buffer1,p2) sm=p.factory.simgr(init_state) def is_good(state): return b'Good Job.'in state.posix.dumps(1) def is_bad(state): return b'Try again.' in state.posix.dumps(1) sm.explore(find=is_good,avoid=is_bad) if sm.found: found_state=sm.found[0] pass1=found_state.solver.eval(p1) pass2=found_state.solver.eval(p2) print("Solution: {} {}".format(pass1,pass2)) else: raise Exception("Solution nou found")if __name__=='__main__': main(sys.argv)
6143547931880145494 6146937700559509843
改变编码后
pass1=found_state.solver.eval(p1,cast_to=bytes).decode("utf-8") pass2=found_state.solver.eval(p2,cast_to=bytes).decode("utf-8")
记得加cast_to=bytes
验证
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月07日 13时51分14秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux的网络参数设置
2019-03-04
权限修饰符protected和default的区别
2019-03-04
紫书——蛇形填数
2019-03-04
吐泡泡(栈)
2019-03-04
刷题计划1——poj1753
2019-03-04
Specialized Four-Digit Numbers——进制转换
2019-03-04
第一场
2019-03-04
蓝桥杯备战——刷题(2019)
2019-03-04
kuangbin题单 进阶搜素 深度优先搜索 哈密顿绕行世界问题 HDU2181
2019-03-04
谷歌最新提出无需卷积、注意力 ,纯MLP构成的视觉架构
2019-03-04
ArcMap|栅格计算器报错
2019-03-04
批量把多个csv/txt合成一个csv/txt
2019-03-04
《小石潭记》古文鉴赏
2019-03-04
Matlab中有关字符串数组的常见问题解答
2019-03-04
未定义的变量“py”或函数“py.command”
2019-03-04
我们,都一样......(句句入心)
2019-03-04
两个数求最大公约数和最小公倍数的方法和理解
2019-03-04
总结了一下c/c++函数和变量的命名规则
2019-03-04
关于构造函数内调用虚函数的问题
2019-03-04
最短路径问题—Dijkstra算法
2019-03-04