angr学习笔记(9)(添加约束)
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)(添加约束)相关推荐
- OpenWRT 学习笔记 -- 用户自定义添加app的开机自启动
参考自:OpenWRT编译 – 用户自定义添加app的开机自启动 OpenWRT 学习笔记-19 OpenWRT开机自启动服务 文章目录 一.概述 二.自启动实现方式一 三.自启动实现方式二 四.自启 ...
- Apm飞控学习笔记之添加我的设备或单片机串口通信-Cxm
目录 PX4/APM/飞控的学习笔记前言-Cxm_chen_taifu的博客-CSDN博客开始了 开始了终于有时间可以学习飞控了此文章是用来当目录,我会持续更新我的学习之旅,希望能对各位有所帮助如果有 ...
- Apm飞控学习笔记之添加我的飞行模式-Cxm
目录 PX4/APM/飞控的学习笔记前言-Cxm_chen_taifu的博客-CSDN博客开始了 开始了终于有时间可以学习飞控了此文章是用来当目录,我会持续更新我的学习之旅,希望能对各位有所帮助如果有 ...
- (学习笔记)Oracle约束
约束指表中的字段要满足某些要求或条件,又或者带有某些意义 1.主键约束:作用是保证一条数据的唯一性.例如,有一张班级姓名表,某一天来了两位同学,恰好两位同学是同名同姓,则需要一个非空且唯一的字段来区别 ...
- ORACLE学习笔记 索引和约束
/*** 约束 ***/ * 如果某个约束只作用于单独的字段,即可以在字段级定义约束,也可以在表级定义约 束,但如果某个约束作用于多个字段, 必须在表级定义约束 * 在定义约束时可以通过CONST ...
- angr学习笔记(2)
angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...
- optaplanner学习笔记(十)约束配置:动态调整约束权重
概要 为每个约束确定正确的权重和级别并不容易.因为各个约束之间存在优先级平衡的情况.此外,量化软约束的影响对我们来说通常是一种全新的体验,因此他们需要多次调整才能找到一个适合的权重和级别. 提供一个 ...
- SystemVerilog学习笔记5——随机约束和分布
目录 随机约束和分布 为何需要随机? 为何需要约束? 需要随机什么? 声明随机变量的类 什么是约束? 权重分布 约束块控制 打开或关闭约束 内嵌约束 随机函数 数组约束 数组的属性约束 随机化句柄数组 ...
- angr学习笔记(13)(static_binary)
angr系列 00_angr_find 01_angr_avoid 02_angr_find_condition 03_angr_symbolic_registers 04_angr_symbolic ...
最新文章
- ORBSLAM-Altas:多地图SLAM
- python优先级排序_Python实现优先级队列结构的方法详解
- Dubbo框架设计原理
- 独家 | 手把手教你用Python 3创建用于机器学习开发的Linux虚拟机(附安装教程代码)...
- 五、开始Github和码云之旅,新手如何上路
- python中cgi到底是什么_什么是CGI?详细介绍Python CGI编程
- 多继承、经典类与新式类、新式类的C3算法详解
- PHP可不可以调用opengl库,opengl,_苹果能不能用 OpenGL 3 或以上写代码?,opengl - phpStudy...
- 2021年最想学习的五大编程语言
- 随想录(cpu缓存、cache同步和乱序执行)
- python源码不需要编译成二进制代码_编译 Python 源代码
- Python Web编程入门
- 数据挖掘05-偏相关分析【原理、案例、python实现】
- iPhone 13 投屏到 Windows 10 的办法
- K-均值聚类算法和二分K-均值算法
- JS for循环练习题
- 不知道如何写好作文?写好作文的十大技巧赶紧收好
- c#之List深度复制
- 根据网络画板(画线)分析一下思路
- 键盘 Key Code对照表
热门文章
- flask-mail异步发送邮件_spring Boot手把手教学(6):发送邮件
- java通过代码显示特定窗体,如何把这两段代码在一个窗体显示,类似于windows自带的扫雷一样...
- 成功解决sklearn\grid_search.py:42: DeprecationWarning: This module was deprecated in version 0.18 in fav
- hyperopt中文文档:Installation-Notes安装说明
- Hyperopt中文文档:Home
- PAT A1063——set的常见用法详解
- WebStorm 使用经验
- 配置Docker代理已实现外网访问
- 物联网网络编程和web编程
- Android性能优化之一:ViewStub