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
  • 分析伪代码
  • 脚本
  • 测试:

分析伪代码

.text:080485C0 push    offset user_input ; s
.text:080485C5 call    _memset
.text:080485CA add     esp, 10h
.text:080485CD sub     esp, 0Ch
.text:080485D0 push    offset aEnterThePasswo ; "Enter the password: "
.text:080485D5 call    _printf
.text:080485DA add     esp, 10h
.text:080485DD sub     esp, 0Ch
.text:080485E0 push    offset unk_A1BA1D8
.text:080485E5 push    offset unk_A1BA1D0
.text:080485EA push    offset unk_A1BA1C8
.text:080485EF push    offset user_input
.text:080485F4 push    offset a8s8s8s8s ; "%8s %8s %8s %8s"
.text:080485F9 call    ___isoc99_scanf
.text:080485FE add     esp, 20h
.text:08048601 mov     [ebp+var_C], 0
.text:08048608 jmp     short loc_8048637

一个字符是一字节,8个字符也就是8字节,也就是64位。需要符号化的内存单元地址为:

.text:080485E0 push    offset unk_A1BA1D8
.text:080485E5 push    offset unk_A1BA1D0
.text:080485EA push    offset unk_A1BA1C8
.text:080485EF push    offset user_input

所以这里需要去符号化这四个内存地址单元

  1. 先申请四个变量
     p1=init_state.solver.BVS('p1',64)  p2=init_state.solver.BVS('p2',64)p3=init_state.solver.BVS('p3',64)p4=init_state.solver.BVS('p4',64)
  1. 把内存单元的地址值和变量之间进行一定关系的绑定
    p4_addr=0x0A1BA1D8p3_addr=0x0A1BA1D0p2_addr=0x0A1BA1C8p1_addr=0x0A1BA1C0init_state.memory.store(p1_addr,p1)init_state.memory.store(p2_addr,p2)init_state.memory.store(p3_addr,p3)init_state.memory.store(p4_addr,p4)

对比一下符号化寄存器

    pass1=claripy.BVS('pass1',32)pass2=claripy.BVS('pass2',32)pass3=claripy.BVS('pass3',32)init_state.regs.eax=pass1init_state.regs.ebx=pass2init_state.regs.edx=pass3

最后再来对变量进行求解:

     pass1=found_state.solver.eval(p1,cast_to=bytes)pass2=found_state.solver.eval(p2,cast_to=bytes)pass3=found_state.solver.eval(p3,cast_to=bytes)pass4=found_state.solver.eval(p4,cast_to=bytes)

脚本

import angr
import sysdef main(argv):bin_path=argv[1]p=angr.Project(bin_path)start_addr=0x08048601init_state=p.factory.blank_state(addr=start_addr)p1=init_state.solver.BVS('p1',64)  p2=init_state.solver.BVS('p2',64)p3=init_state.solver.BVS('p3',64)p4=init_state.solver.BVS('p4',64)p4_addr=0x0A1BA1D8p3_addr=0x0A1BA1D0p2_addr=0x0A1BA1C8p1_addr=0x0A1BA1C0init_state.memory.store(p1_addr,p1)init_state.memory.store(p2_addr,p2)init_state.memory.store(p3_addr,p3)init_state.memory.store(p4_addr,p4)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,cast_to=bytes)pass2=found_state.solver.eval(p2,cast_to=bytes)pass3=found_state.solver.eval(p3,cast_to=bytes)pass4=found_state.solver.eval(p4,cast_to=bytes)print("Solution:{} {} {} {}".format(pass1.decode('utf-8'),pass2.decode('utf-8'),pass3.decode('utf-8'),pass4.decode('utf-8')))else:raise Exception("Solution not found")
if __name__=="__main__":main(sys.argv)

NAXTHGNR JVSFTPWE LMGAUHWC XMDCPALU

测试:

angr学习笔记(6)(内存地址单元符号化)相关推荐

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

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

  2. 【JVM学习笔记】内存回收与内存回收算法 就哪些地方需要回收、什么时候回收、如何回收三个问题进行分析和说明

    目录 一.相关名词解释 垃圾收集常用名词 二.哪些地方需要回收 本地方法栈.虚拟机栈.程序计数器 方法区 Java堆 三.什么时候回收 1. 内存能否被回收 内存中的引用类型 引用计数算法 可达性分析 ...

  3. 深入理解Java虚拟机(第3版)学习笔记——JAVA内存区域(超详细)

    深入理解Java虚拟机(第3版)学习笔记--JAVA内存区域(超详细) 运行时数据区域 程序计数器 java虚拟机栈 本地方法栈 java堆 方法区 运行时常量池 直接内存 对象的创建 对象的内存布局 ...

  4. Redis运维和开发学习笔记(7) 内存管理和过期策略

    Redis运维和开发学习笔记(7) 内存管理和过期策略 文章目录 Redis运维和开发学习笔记(7) 内存管理和过期策略 内存回收策略 惰性删除 定时任务删除 maxmemory 过期策略allkey ...

  5. 冰冰学习笔记:内存地址空间

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  6. angr学习笔记(7)(malloc地址单元符号化)

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

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

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

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

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

  9. angr学习笔记(2)

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

最新文章

  1. 自然语言处理NLP之BERT、BERT是什么、智能问答、阅读理解、分词、词性标注、数据增强、文本分类、BERT的知识表示本质
  2. mysql innodb 数据复制_快速将InnoDB表复制到另一个实例
  3. 用python画万花筒写轮眼_万花筒写轮眼画法教程
  4. 运用反射时报错java.lang.NoSuchMethodException,以解决,记录一下
  5. LINUX下载编译redis
  6. 第二章 信息化规划与组织
  7. 社群运营:让群不死,付费粉丝多次转化的模式探讨
  8. python查看指定文件的绝对路径和当前工作路径
  9. 为什么MASKRCNN中使用ROIAlign替代ROIPool
  10. ATN项目(智能矩阵Atmatrix)是否能做到人工智能界的桥梁,从而改变世界?
  11. 生理学_神经系统的功能
  12. 软件开发培训学校四大培训标准,引领行业标杆
  13. rp_rv1126开发板UVC XU扩展协议功能验证
  14. 1228 序列求和 (伯努利数)
  15. 廖雪峰git教程阅读之一
  16. 微信开发者工具 页面颜色调整(多与黑白)
  17. java错误代码1061_异常求解 小白
  18. 步进电机的使用教程以及步距角和细分讲解
  19. 【2021 CSDN年度报告】看看你今年有收获没?
  20. 测试、测试开发面试准备和复习

热门文章

  1. 成功解决This module was deprecated in version 0.18 in favor of the model_selection module into which all
  2. twisted:基于python的twisted框架编写一个客户端和服务端的对话聊天空间
  3. BeautifulSoup([your markup]) to this: BeautifulSoup([your markup], lxml) 解决未设置默认解析器的错误
  4. Python300篇电子书免费送
  5. jQuery选择器整理
  6. windows系统中hosts文件位置
  7. PHP-客户端的IP地址伪造、CDN、反向代理、获取的那些事儿
  8. Canvas 属性,方法
  9. 在Delphi程序中应用IE浏览器控件
  10. linux下remove函数