首页 > 其他分享 >学习Angr记录--angr_ctf 00~05

学习Angr记录--angr_ctf 00~05

时间:2024-06-21 23:09:33浏览次数:21  
标签:00 Angr 符号 -- solution 入口 angr 寄存器 find

首先,下载angr_ctf,打开dist文件夹,这里才是练习题,然后solution是答案
00.find
01.avoid
前面两个是基础操作
复习一下流程:
1.项目路径

2.进入状态

3.模拟器模拟进入状态时的环境

4.模拟器explore,find一个地址,avoid一些地址

5.simulation.found[]数组存储成功的输入

6.print(solution_state.posix.dumps(sys.stdin.fileno()))
这个语句中,posix指的是访问模拟状态下的文件描述符,

dumps指的是获取该文件描述符下的数据并返回为byte对象,

sys.stdin.fileno()指的是获取键盘输出的文件描述符,值为0;

02.find_condition
这个操作是指不以地址为成功指示,而是以输出,如果输出‘Good Job.’则是成功的

具体如下:

定义is_successful,should_abort两个函数,分别作为find和avoid的参数,
本质上就是另一种寻找方式

03.fill registers
这里是从不同的地方进入程序,使用了寄存器存放输入的参数

1.设置入口,angr.options指示使用符号填充寄存器

这里找入口要找准,刚开始使用寄存器的值的时候最好,这时刚好用上符号

符号对象要使用位向量:

填充:

然后按照一般步骤求解。

这里有个知识点,可以使用eval来返回多解的其中一个解

1.{:x}: 格式说明符,用于将整数以小写的十六进制格式打印。
2.format(flag1, flag2, flag3): 将 flag1、flag2 和 flag3 这三个整数传递给 format 方法,对应地填充到三个 {} 占位符中。

04.change symbolic in stack
这里其实就是把符号存进栈里面,而不是寄存器

1.定入口,这里是scanf过后,想要把栈里面通过scanf得到的变量替换掉,所以在恢复scanf调用前的栈的地址插入入口就好了,然后再自己在栈添加多出的两个变量

2.初始化

initial_state.regs.ebp = initial_state.regs.esp#初始化esp,ebp

3.初始符号

4.开辟空间

5.入栈

后面的操作不变

solution = ' '.join(map(str, [ solution0, solution1 ]))
这个拼接很丝滑

05.symbolic in memory

1.找入口

2.在ida里面找到对应push的参数到具体内存地址

3.后面操作相同,处理字符串的方式:

标签:00,Angr,符号,--,solution,入口,angr,寄存器,find
From: https://www.cnblogs.com/ljyink/p/18261651

相关文章

  • 【Mac 从 0 到 1 保姆级配置教程 03】 - 安装配置美化 iterm2 一气呵成,Mac 下经久不衰
    1.前言如果你让我给别人推荐一款Mac下的终端,那我会毫不犹豫的推荐iterm2,因为它足够经典,足够好用。当然优秀的终端有很多,比如:alacritty、kitty等,大家感兴趣的可以尝试一下。我们今天主要讲解iterm2的安装、配置和美化。2.安装iterm2brewinstall--caskiterm......
  • 计算机网络:408考研|重要拓展内容|冷门考点|英文缩写词(完结撒花~)
    系列目录408计算机网络总纲领更新日志6.15物理层的接口特性,修改了部分排版问题6.17数据链路层的拥塞控制,补充部分额外英文缩写词6.21考纲中明确提到的物理层的信源与信宿;数据链路层的ALOHA协议和令牌传递协议;以及运输层的UDP校验目录系列目录更新日志拓展......
  • 01、Shell 编程规范与变量
    目录1.1Shell脚本概述1.1.1Shell的作用        1.1.2编写第一个Shell脚本        1.1.3重定向与管道操作1.重定向操作2.管道操作1.2Shell变量的作用、类型1.2.1自定义变量1.定义新的变量2.查看和引用变量的值3.变量赋值的特殊操作4.设置变......
  • FreeBSD通过CBSD管理低资源容器jail 网络NAT配置
    jail容器里的系统有时候并不需要公开的地址,所以给它们配置内网地址即可。但是这些系统一般都有上网的需求,这时候可以使用nat进行解决。CBSD可以配置NAT规则,只需要命令cbsdnatcfg,配置好后cbsdnaton启动即可:%cbsdnatcfgConfigureNATforRFC1918Network?[yes(1)orn......
  • 面试题(TCP/IP协议)详解三次握手
    TCP/IP协议中的三次握手我们首先来了解一下TCPTCP(TransmissionControlProtocol,传输控制协议)是一个面向连接的、可靠的、基于字节流的传输层通信协议。以下是TCP的一些主要特点:面向连接:在数据传输之前,TCP必须先建立连接(三次握手),在数据传输结束后,还要终止这个连接(......
  • Linux基础命令————浅显易懂的带你了解Linux
    首先,Xshell连接云服务器Linux的语法更接近PowerShellPowerShell和Window命令行都可以对Window操作系统进行操作,但是PowerShell语法更全一些。默认打开这个目录用哪个用户登录的计算机,最后就会到哪个目录下用ls指令可以查看目录下,有哪些文件Windows命令行由于没有这个......
  • 阐述常见的一些SQL优化方式
    SQL优化1.避免不必要的列这个是老生常谈,但还是经常会出的情况,SQL查询的时候,应该只查询需要的列,而不要包含额外的列,像select*这种写法应该尽量避免。2.分页优化在数据量比较大、分页深度较深的情况下,可以考虑以下分页优化方案:延迟关联(DeferredJoin):先通过WHERE条件......
  • 阐述Spring Security概念及其运用于实战
    SpringSecurity(安全校验)1.概述SpringSecurity是Spring项目组提供的安全服务框架,核心功能包括认证和授权.为系统提供了声明式安全访问控制功能,减少了为系统安全而编写大量重复代码的工作.在如今开发模式中,SpringSecurity已经成为Java程序员必备的一项技术,简化认......
  • ServBay 下一代Web开发环境
    ServBay是一个集成式、图形化的本地化Web开发环境。开发者通过ServBay几分钟就能部署一个本地化的开发环境。解决了Web开发者(比如PHP、Nodejs)、测试工程师、小型团队安装和维护开发测试环境的问题,同时可以快速的进行环境的升级以及维护。ServBay还将Web服务器,数据库,邮件服务器......
  • c语言 字符串操作函数
    字符串操作函数1.strlen()函数strlen()函数用于计算字符串的长度,返回字符串的字符数。语法:size_tstrlen(constchar*str)参数:str–要计算长度的字符串。返回值:字符串的字符数。示例:#include<stdio.h>#include<string.h>intmain(){charstr[50]="......