BUUCTF-[网鼎杯 2020 青龙组]singal——angr学习记录
学习结合b站的视频
环境配置:Ubuntu20.04+python3
angr安装教程
切换到angr环境:workon angr
退出angr环境:deactivate
什么是符号执行:
符号执行 (Symbolic Execution)是一种程序分析技术。其可以通过分析程序来得到让特定代码区域执行的输入。使用符号执行分析一个程序时,该程序会使用符号值作为输入,而非一般执行程序时使用的具体值。在达到目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器来得到可以触发目标代码的具体值。[1] 符号模拟技术(symbolic simulation)则把类似的思想用于硬件分析。符号计算(Symbolic computation)则用于数学表达式分析。我理解为更厉害的爆破。
基础语句:
import angrproj = angr.Project('文件名') #新建一个工程
init_state=proj.factory.entry_sate() #设置程序的入口
sm=proj.factory.simulation_manager(init_state) #执行程序
sm.explore(find=0x.....,avoid=0x.....) #执行到某个条件,避免某个条件sm.found[0] #找到符合条件的值
found_state=sm.found[0]
found_state.posix.doumps(0) #获得我们最开始的输入
found_state.posix.doumps(1) #获得我们最后的输出
脚本例子:
import angr
import sysdef main(argv):p = angr.Project('')initial_state = p.factory.entry_state()sm = p.factory.simgr(initial_state)sm.explore(find=good_addr, avoid=bad_addr) if sm.found:flag = sm.found[0]print(flag.posix.dumps(sys.stdin.fileno()))else:raise Exception('Cannot find')
if __name__ == '__main__':main(sys.argv)
python 02.py 02.exe
来看题目:
32位无壳,IDApro打开
主函数很简单,我们主要分析 vm_operad(v4, 114)函数
find地址:
void地址:
脚本解密·
import angr
p = angr.Project('signal.exe')
st = p.factory.entry_state()
sm = p.factory.simulation_manager(st)
sm.explore(find=0x40175E, avoid=0x4016E6)
print(sm.found[0].posix.dumps(0))
最后的flag{757515121f3d478}
我对angr第一概念就是,更厉害的爆破!!太厉害了!!
angr使用补充:
输入多个参数:
import angr
import claripy
p = angr.Project('')init_addr = 0x08048980 #scanf的下一条指令地址
state = p.factory.blank_state(addr=init_addr) #创建一个状态,并将该地址赋给它,也就是跳过输入,直接执行下一条指令,此处使用.blank_state()而不再是.entry_state()#定义三个位向量,即三个输入
p1 = claripy.BVS('p1',32) #32位寄存器(符号向量)
p2 = claripy.BVS('p2',32)
p3 = claripy.BVS('p3',32)state.regs.eax = p1 #.regs.eax 访问eax这个寄存器
state.regs.ebx = p2
state.regs.edx = p3
sm = p.factory.simulation_manager(state)
def good(state):return b'Good Job.' in state.posix.dumps(1)
def bad(state):return b'Try again.' in state.posix.dumps(1)
sm.explore(find = good, avoid = bad)
if sm.found:find_state = sm.found[0]flag1 = find_state.solver.eval(p1)#将探索成功时的第一个输入赋给flag1,下面两个类似flag2 = find_state.solver.eval(p2)flag3 = find_state.solver.eval(p3)print('{:x} {:x} {:x}'.format(flag1,flag2,flag3))
引用了大佬的博客 代码
BUUCTF-[网鼎杯 2020 青龙组]singal——angr学习记录相关推荐
- [BUUCTF][网鼎杯 2020 青龙组]jocker 分析与记录
无壳,IDA打开可以直接进入main函数: 第12行调用VirtualProtect函数更改了offset encrypt处的访问保护权限 BOOL VirtualProtect(LPVOID lpA ...
- Buuctf[网鼎杯 2020 青龙组]AreUSerialz
[网鼎杯 2020 青龙组]AreUSerialz 打开题目仔细阅读源码 <?phpinclude("flag.php"); highlight_file(__FILE__) ...
- Buuctf [网鼎杯 2020 青龙组]jocker 题解
目录 一.主函数逻辑 二.wrong函数和omg函数--假flag 1.wrong函数 2.omg函数 3.假flag 三.encrypt和finally函数--真flag 1.打开sp指针偏移显示 ...
- re -25 buuctf [网鼎杯 2020 青龙组]jocker
[网鼎杯 2020 青龙组]jocker 前话:ida7.6设置栏内没有general,可以通过ctrl+shift+p打开命令面板,搜索option打开设置选项,于Disassembly设置堆栈显示 ...
- BUUCTF·[网鼎杯 2020 青龙组]boom·WP
BUUCTF在线评测 (buuoj.cn) 附件 是一个可运行的文件 回车出现: 分析 猜测是C编写的,拉到编译器,发现提示是二进制文件 那就用010Editor打开 查找了一下flag,这不就是跟附 ...
- BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker
BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker 先看下文件信息,没有加壳,32位程序 运行一下,又是一道字符串比较的题目 用IDA32位打开,分析一下 // positive ...
- undefsafe原型链[网鼎杯 2020 青龙组]notes
感觉是考原型链但还是有点不知道如何下手,呜呜呜呜呜呜. 从浅入深 Javascript 原型链与原型链污染 [网鼎杯 2020 青龙组]notes var express = require('exp ...
- [网鼎杯 2020 青龙组]AreUSerialz WP
[网鼎杯 2020 青龙组]AreUSerialz WP 看到题目,首先进入代码审计 <?phpinclude("flag.php");//在文件中插入flag.php文件的 ...
- [网鼎杯 2020 青龙组]jocker
[网鼎杯 2020 青龙组]jocker SMC(self-Modifying Code): 自修改代码,程序在执行某段代码的过程中会对程序的代码进行修改,只有在修改后的代码才是可汇编,可执行的.在程 ...
最新文章
- HQL语句中数据类型转换,及hibernate中createQuery执行hql报错
- display: inline-block 布局
- 【Java】说明变量作用域的示例程序
- Python文件练习
- jzxx1000~1010题分析
- 如何去除360浏览器“网页走丢了”页面广告
- 开课吧:哪些人适合转行做Web前端?
- 安装openguass数据库配套工具Data Studio
- CommandName属性和CommandArgument属性
- dell笔记本指示灯闪烁_了解戴尔笔记本电脑上的报警音
- the7 Quick Start Guide
- 【毕业设计】单片机森林火灾监控防护预警系统 - 物联网 嵌入式
- 双efi分区同时引导失败修复经验
- Python自动化爬取天眼查数据
- WeGame聊天室采集
- java合并流与文件的分割合并示例
- python外国网站爬虫_Python3网络爬虫(一):利用urllib进行简单的网页抓取
- 《代码整洁之道》阅读笔记 4注释
- 从立项到在steam平台上发布游戏,所要经历的流程。【esyi杂谈】
- 服务器计费系统,《仙境传说》两服务器计费系统升级
热门文章
- php数组中插入数值,php中如何在数组指定位置插入数据单元
- qt android oci数据库,QT mysql SQLite 数据库支持
- java泛型集合_Java泛型集合(Set)
- access 战地1不加入ea_战地1正式加入origin access
- list修改元素的值_第115天:Python 到底是值传递还是引用传递
- python3.8安装pygame_Python3.8安装Pygame教程步骤详解
- php类型优先级_PHP: 运算符优先级 - Manual
- 开启ntp服务_Linux入门:Linux自有服务及软件包
- 服务器机房有哪些重要系统
- Python:pmml格式文件的简介、安装、使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略