​​​​​​学习结合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学习记录相关推荐

  1. [BUUCTF][网鼎杯 2020 青龙组]jocker 分析与记录

    无壳,IDA打开可以直接进入main函数: 第12行调用VirtualProtect函数更改了offset encrypt处的访问保护权限 BOOL VirtualProtect(LPVOID lpA ...

  2. Buuctf[网鼎杯 2020 青龙组]AreUSerialz

    [网鼎杯 2020 青龙组]AreUSerialz 打开题目仔细阅读源码 <?phpinclude("flag.php"); highlight_file(__FILE__) ...

  3. Buuctf [网鼎杯 2020 青龙组]jocker 题解

    目录 一.主函数逻辑 二.wrong函数和omg函数--假flag 1.wrong函数 2.omg函数 3.假flag 三.encrypt和finally函数--真flag 1.打开sp指针偏移显示 ...

  4. re -25 buuctf [网鼎杯 2020 青龙组]jocker

    [网鼎杯 2020 青龙组]jocker 前话:ida7.6设置栏内没有general,可以通过ctrl+shift+p打开命令面板,搜索option打开设置选项,于Disassembly设置堆栈显示 ...

  5. BUUCTF·[网鼎杯 2020 青龙组]boom·WP

    BUUCTF在线评测 (buuoj.cn) 附件 是一个可运行的文件 回车出现: 分析 猜测是C编写的,拉到编译器,发现提示是二进制文件 那就用010Editor打开 查找了一下flag,这不就是跟附 ...

  6. BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker

    BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker 先看下文件信息,没有加壳,32位程序 运行一下,又是一道字符串比较的题目 用IDA32位打开,分析一下 // positive ...

  7. undefsafe原型链[网鼎杯 2020 青龙组]notes

    感觉是考原型链但还是有点不知道如何下手,呜呜呜呜呜呜. 从浅入深 Javascript 原型链与原型链污染 [网鼎杯 2020 青龙组]notes var express = require('exp ...

  8. [网鼎杯 2020 青龙组]AreUSerialz WP

    [网鼎杯 2020 青龙组]AreUSerialz WP 看到题目,首先进入代码审计 <?phpinclude("flag.php");//在文件中插入flag.php文件的 ...

  9. [网鼎杯 2020 青龙组]jocker

    [网鼎杯 2020 青龙组]jocker SMC(self-Modifying Code): 自修改代码,程序在执行某段代码的过程中会对程序的代码进行修改,只有在修改后的代码才是可汇编,可执行的.在程 ...

最新文章

  1. HQL语句中数据类型转换,及hibernate中createQuery执行hql报错
  2. display: inline-block 布局
  3. 【Java】说明变量作用域的示例程序
  4. Python文件练习
  5. jzxx1000~1010题分析
  6. 如何去除360浏览器“网页走丢了”页面广告
  7. 开课吧:哪些人适合转行做Web前端?
  8. 安装openguass数据库配套工具Data Studio
  9. CommandName属性和CommandArgument属性
  10. dell笔记本指示灯闪烁_了解戴尔笔记本电脑上的报警音
  11. the7 Quick Start Guide
  12. 【毕业设计】单片机森林火灾监控防护预警系统 - 物联网 嵌入式
  13. 双efi分区同时引导失败修复经验
  14. Python自动化爬取天眼查数据
  15. WeGame聊天室采集
  16. java合并流与文件的分割合并示例
  17. python外国网站爬虫_Python3网络爬虫(一):利用urllib进行简单的网页抓取
  18. 《代码整洁之道》阅读笔记 4注释
  19. 从立项到在steam平台上发布游戏,所要经历的流程。【esyi杂谈】
  20. 服务器计费系统,《仙境传说》两服务器计费系统升级

热门文章

  1. php数组中插入数值,php中如何在数组指定位置插入数据单元
  2. qt android oci数据库,QT mysql SQLite 数据库支持
  3. java泛型集合_Java泛型集合(Set)
  4. access 战地1不加入ea_战地1正式加入origin access
  5. list修改元素的值_第115天:Python 到底是值传递还是引用传递
  6. python3.8安装pygame_Python3.8安装Pygame教程步骤详解
  7. php类型优先级_PHP: 运算符优先级 - Manual
  8. 开启ntp服务_Linux入门:Linux自有服务及软件包
  9. 服务器机房有哪些重要系统
  10. Python:pmml格式文件的简介、安装、使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略