angr学习笔记(7)(malloc地址单元符号化)
angr系列
00_angr_find
01_angr_avoid
02_angr_find_condition
03_angr_symbolic_registers
04_angr_symbolic_stack
05_angr_symbolic_memory
06_angr_symbolic_dynamic_memory
07_angr_symbolic_file
08_angr_constraints
09_angr_hooks
10_angr_simprocedures
13_angr_static_binary
文章目录
- angr系列
- 00_angr_find
- 01_angr_avoid
- 02_angr_find_condition
- 03_angr_symbolic_registers
- 04_angr_symbolic_stack
- 05_angr_symbolic_memory
- 06_angr_symbolic_dynamic_memory
- 07_angr_symbolic_file
- 08_angr_constraints
- 09_angr_hooks
- 10_angr_simprocedures
- 13_angr_static_binary
- 伪代码分析
- 脚本:
- 验证
伪代码分析
首先记得找出起始地址的esp:
start_addr=0x08048699init_state=p.factory.blank_state(addr=start_addr)print("ESP:",init_state.regs.esp)
输出如下:
malloc
的地址具有随机性,所以我们直接指定即可。
angr
默认写入int
数据,是大端写入,所以我们在这里不能缺少:
buffer0=0x7fff0000-0x100buffer1=0x7fff0000-0x200buffer0_addr=0x0ABCC8A4buffer1_addr=0x0ABCC8ACinit_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 angr
import sys
def main(argv):bin_path=argv[1]p=angr.Project(bin_path)start_addr=0x08048699init_state=p.factory.blank_state(addr=start_addr)print("ESP:",init_state.regs.esp)buffer0=0x7fff0000-0x100buffer1=0x7fff0000-0x200buffer0_addr=0x0ABCC8A4buffer1_addr=0x0ABCC8ACinit_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
验证
angr学习笔记(7)(malloc地址单元符号化)相关推荐
- angr学习笔记(6)(内存地址单元符号化)
angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...
- angr学习笔记(5)(栈符号化)
angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...
- angr学习笔记(8)(文件内容符号化)
angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...
- angr学习笔记(4) (寄存器符号化)
angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...
- angr学习笔记(9)(添加约束)
angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...
- angr学习笔记(2)
angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...
- angr学习笔记(13)(static_binary)
angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...
- angr学习笔记(10)(hook)
angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...
- angr学习笔记(1)
angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...
最新文章
- mysql 存储过程无效_用VC通过DLL包连接MySQL,执行存储过程后,再执行其他查询无效?解决方法...
- python入门只需20分钟-史上最详细python学习路线-从入门到精通,只需5个月时间...
- 【Android 界面效果49】RecyclerView高度随Item自适应
- 线性代数 第二章 矩阵及其运算
- Numpy-查看数组的属性
- [小米OJ] 4. 最长连续数列
- 学习vue.js的自我梳理笔记
- zoj 2526(一道很好的最短路应用题)
- 【ES6】Set Map数据结构、Iterator遍历器
- 什么?华为方舟编译器竟然这么牛逼~
- eclipse合并svn分支方法
- 天线SMA处抗静电保护收发开关
- oracle pmon andsmon,SMON and PMON
- 开设计算机专业设置问卷调查,计算机信息管理专业调查问卷 (1)
- 中国共用计算机网,《中国公用计算机互联网国际联网管理办法》
- server manager无法打开
- 桥接路由器总是掉线_桥接后副路由器网速特别慢,而且经常掉线
- mysql查询1999年后出生的_饭后笑笑 1999年出生的和2000年出生的秘密
- win10 添加打印机完整图文教程演示
- R语言ggplot2可视化在轴标签中添加上标(Superscript)和下标(subscript)实战
热门文章
- AI:2020年6月21日北京智源大会演讲分享之14:50-15:15穗志方教授《从语言到知识——构建语言智能的基石》
- 成功解决return tf.nn.softmax(x, axis=axis) TypeError: softmax() got an unexpected keyword argument 'axis
- Paper之DL:深度学习高质量论文分类推荐(建议收藏,持续更新)
- javascript闭包学习
- 浅谈linux命令大全
- iOS 提交审核注意事项
- ZooKeeper官方文档资源
- iOS 设置Label中特定的文字大小和颜色
- 板邓:wordpress建站不得不知的安全防护(二)
- Python3.5 Day1作业:实现用户密码登录,输错三次锁定。