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
  • 伪代码分析
  • 脚本
  • 验证

伪代码分析


需要在下方添加一个约束,防止路径爆炸if ( check_equals_AUPDNNPROEZRJWKB((int)&buffer, 0x10u) ),因为这种compare是属于一个字符一个字符进行比较,所以路径太多,需要添加约束。

先找到起始地址

    start_addr=0x08048625init_state=p.factory.blank_state(addr=start_addr)

符号化输入:

    buffer_addr=0x0804A050password=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=0x08048565sm.explore(find=check_addr)

首先给函数进行参数初始化

        check_param1=buffer_addrcheck_param2=0x10check_bvs=check_state.memory.load(check_param1,check_param2)

进行约束添加

        check_constraint=desired_string==check_bvscheck_state.add_constraints(check_constraint)

最后进行求解即可:

        password1=check_state.solver.eval(password,cast_to=bytes)

脚本

import sys
import angr
def main(argv):bin_path=argv[1]p=angr.Project(bin_path)start_addr=0x08048625init_state=p.factory.blank_state(addr=start_addr)buffer_addr=0x0804A050password=init_state.solver.BVS("password",16*8)init_state.memory.store(buffer_addr,password)sm=p.factory.simgr(init_state)check_addr=0x08048565sm.explore(find=check_addr)if sm.found:check_state=sm.found[0]desired_string='AUPDNNPROEZRJWKB'check_param1=buffer_addrcheck_param2=0x10check_bvs=check_state.memory.load(check_param1,check_param2)check_constraint=desired_string==check_bvscheck_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

验证

angr学习笔记(9)(添加约束)相关推荐

  1. OpenWRT 学习笔记 -- 用户自定义添加app的开机自启动

    参考自:OpenWRT编译 – 用户自定义添加app的开机自启动 OpenWRT 学习笔记-19 OpenWRT开机自启动服务 文章目录 一.概述 二.自启动实现方式一 三.自启动实现方式二 四.自启 ...

  2. Apm飞控学习笔记之添加我的设备或单片机串口通信-Cxm

    目录 PX4/APM/飞控的学习笔记前言-Cxm_chen_taifu的博客-CSDN博客开始了 开始了终于有时间可以学习飞控了此文章是用来当目录,我会持续更新我的学习之旅,希望能对各位有所帮助如果有 ...

  3. Apm飞控学习笔记之添加我的飞行模式-Cxm

    目录 PX4/APM/飞控的学习笔记前言-Cxm_chen_taifu的博客-CSDN博客开始了 开始了终于有时间可以学习飞控了此文章是用来当目录,我会持续更新我的学习之旅,希望能对各位有所帮助如果有 ...

  4. (学习笔记)Oracle约束

    约束指表中的字段要满足某些要求或条件,又或者带有某些意义 1.主键约束:作用是保证一条数据的唯一性.例如,有一张班级姓名表,某一天来了两位同学,恰好两位同学是同名同姓,则需要一个非空且唯一的字段来区别 ...

  5. ORACLE学习笔记 索引和约束

    /*** 约束 ***/ * 如果某个约束只作用于单独的字段,即可以在字段级定义约束,也可以在表级定义约 束,但如果某个约束作用于多个字段,   必须在表级定义约束 * 在定义约束时可以通过CONST ...

  6. angr学习笔记(2)

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

  7. optaplanner学习笔记(十)约束配置:动态调整约束权重

    概要 为每个约束确定正确的权重和级别并不容易.因为各个约束之间存在优先级平衡的情况.此外,量化软约束的影响对我们来说通常是一种全新的体验,因此他们需要多次调整才能找到一个适合的权重和级别. 提供一个 ...

  8. SystemVerilog学习笔记5——随机约束和分布

    目录 随机约束和分布 为何需要随机? 为何需要约束? 需要随机什么? 声明随机变量的类 什么是约束? 权重分布 约束块控制 打开或关闭约束 内嵌约束 随机函数 数组约束 数组的属性约束 随机化句柄数组 ...

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

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

最新文章

  1. ORBSLAM-Altas:多地图SLAM
  2. python优先级排序_Python实现优先级队列结构的方法详解
  3. Dubbo框架设计原理
  4. 独家 | 手把手教你用Python 3创建用于机器学习开发的Linux虚拟机(附安装教程代码)...
  5. 五、开始Github和码云之旅,新手如何上路
  6. python中cgi到底是什么_什么是CGI?详细介绍Python CGI编程
  7. 多继承、经典类与新式类、新式类的C3算法详解
  8. PHP可不可以调用opengl库,opengl,_苹果能不能用 OpenGL 3 或以上写代码?,opengl - phpStudy...
  9. 2021年最想学习的五大编程语言
  10. 随想录(cpu缓存、cache同步和乱序执行)
  11. python源码不需要编译成二进制代码_编译 Python 源代码
  12. Python Web编程入门
  13. 数据挖掘05-偏相关分析【原理、案例、python实现】
  14. iPhone 13 投屏到 Windows 10 的办法
  15. K-均值聚类算法和二分K-均值算法
  16. JS for循环练习题
  17. 不知道如何写好作文?写好作文的十大技巧赶紧收好
  18. c#之List深度复制
  19. 根据网络画板(画线)分析一下思路
  20. 键盘 Key Code对照表

热门文章

  1. flask-mail异步发送邮件_spring Boot手把手教学(6):发送邮件
  2. java通过代码显示特定窗体,如何把这两段代码在一个窗体显示,类似于windows自带的扫雷一样...
  3. 成功解决sklearn\grid_search.py:42: DeprecationWarning: This module was deprecated in version 0.18 in fav
  4. hyperopt中文文档:Installation-Notes安装说明
  5. Hyperopt中文文档:Home
  6. PAT A1063——set的常见用法详解
  7. WebStorm 使用经验
  8. 配置Docker代理已实现外网访问
  9. 物联网网络编程和web编程
  10. Android性能优化之一:ViewStub