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地址单元符号化)相关推荐

  1. angr学习笔记(6)(内存地址单元符号化)

    angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...

  2. angr学习笔记(5)(栈符号化)

    angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...

  3. angr学习笔记(8)(文件内容符号化)

    angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...

  4. angr学习笔记(4) (寄存器符号化)

    angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...

  5. angr学习笔记(9)(添加约束)

    angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...

  6. angr学习笔记(2)

    angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...

  7. angr学习笔记(13)(static_binary)

    angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...

  8. angr学习笔记(10)(hook)

    angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...

  9. angr学习笔记(1)

    angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...

最新文章

  1. mysql 存储过程无效_用VC通过DLL包连接MySQL,执行存储过程后,再执行其他查询无效?解决方法...
  2. python入门只需20分钟-史上最详细python学习路线-从入门到精通,只需5个月时间...
  3. 【Android 界面效果49】RecyclerView高度随Item自适应
  4. 线性代数 第二章 矩阵及其运算
  5. Numpy-查看数组的属性
  6. [小米OJ] 4. 最长连续数列
  7. 学习vue.js的自我梳理笔记
  8. zoj 2526(一道很好的最短路应用题)
  9. 【ES6】Set Map数据结构、Iterator遍历器
  10. 什么?华为方舟编译器竟然这么牛逼~
  11. eclipse合并svn分支方法
  12. 天线SMA处抗静电保护收发开关
  13. oracle pmon andsmon,SMON and PMON
  14. 开设计算机专业设置问卷调查,计算机信息管理专业调查问卷 (1)
  15. 中国共用计算机网,《中国公用计算机互联网国际联网管理办法》
  16. server manager无法打开
  17. 桥接路由器总是掉线_桥接后副路由器网速特别慢,而且经常掉线
  18. mysql查询1999年后出生的_饭后笑笑 1999年出生的和2000年出生的秘密
  19. win10 添加打印机完整图文教程演示
  20. R语言ggplot2可视化在轴标签中添加上标(Superscript)和下标(subscript)实战

热门文章

  1. AI:2020年6月21日北京智源大会演讲分享之14:50-15:15穗志方教授《从语言到知识——构建语言智能的基石》
  2. 成功解决return tf.nn.softmax(x, axis=axis) TypeError: softmax() got an unexpected keyword argument 'axis
  3. Paper之DL:深度学习高质量论文分类推荐(建议收藏,持续更新)
  4. javascript闭包学习
  5. 浅谈linux命令大全
  6. iOS 提交审核注意事项
  7. ZooKeeper官方文档资源
  8. iOS 设置Label中特定的文字大小和颜色
  9. 板邓:wordpress建站不得不知的安全防护(二)
  10. Python3.5 Day1作业:实现用户密码登录,输错三次锁定。