[RoarCTF2019]polyre

参考博客

buu-[RoarCTF2019]polyre(控制流平坦化,虚假控制流程)-CSDN博客

[RoarCTF2019]Polyre | bypass ollvm - 暖暖草果 - 博客园 (cnblogs.com)

buu-[RoarCTF2019]polyre(控制流平坦化,虚假控制流程)-CSDN博客

进来第一时间看见这个

我还以为是angr

跑了大半年,什么都没跑出来

后面发现这是控制流平坦化(没接触过)

https://github.com/cq674350529/deflat

这里去下载整个文件

放在unbuntu里面

 python3 deflat.py -f ./polyre --addr 0x400620

命令行执行

中间等个一两分钟

就得到了这个文件

IDA打开

比之前好多了

这个有很多都是假

就是说根本不会运行

我们用IDA python简化(我不会,网上抄的脚本)

st = 0x0000000000400620 #main开始
end = 0x0000000000402144 #main结束def patch_nop(start,end):for i in range(start,end):ida_bytes.patch_byte(i, 0x90)		#修改指定地址处的指令  0x90是最简单的1字节nopdef next_instr(addr):return addr+idc.get_item_size(addr)		#获取指令或数据长度,这个函数的作用就是去往下一条指令addr = st
while(addr<end):next = next_instr(addr)if "ds:dword_603054" in GetDisasm(addr):	#GetDisasm(addr)得到addr的反汇编语句while(True):addr = nextnext = next_instr(addr)if "jnz" in GetDisasm(addr):dest = idc.get_operand_value(addr, 0)		#得到操作数,就是指令后的数ida_bytes.patch_byte(addr, 0xe9)     #0xe9 jmp后面的四个字节是偏移ida_bytes.patch_byte(addr+5, 0x90)   #nop第五个字节offset = dest - (addr + 5)  #调整为正确的偏移地址 也就是相对偏移地址 - 当前指令后的地址ida_bytes.patch_dword(addr + 1, offset) #把地址赋值给jmp后print("patch bcf: 0x%x"%addr)addr = nextbreakelse:addr = next

 怎么理解这个脚本,我感觉还是要等到再次遇见这种题,对比一下

运行后就可以得到一个正常的代码

我还是不会

()

wp说这是CRC32

ok,有借口了

保存一下脚本就算了吧

secret = [0xBC8FF26D43536296, 0x520100780530EE16, 0x4DC0B5EA935F08EC,0x342B90AFD853F450, 0x8B250EBCAA2C3681, 0x55759F81A2C68AE4]
key = 0xB0004B7679FA26B3
flag = ""
# 产生CRC32查表法所用的表
for s in secret:for i in range(64):sign = s & 1  # 数乘以二,必为偶数,再异或上奇数,得奇数 所以最后一位为1的数还原前为负。if sign == 1:s ^= keys //= 2# 防止负值除2,溢出为正值if sign == 1:s |= 0x8000000000000000  # 让数回到负数j = 0while j < 8:flag += chr(s & 0xFF)  # &0xff可以将高的24位置为0,低8位保持原样。s >>= 8j += 1
print(flag)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/377210.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 设计模式系列:外观模式

简介 外观模式&#xff08;Facade Pattern&#xff09;是一种设计模式&#xff0c;又名门面模式&#xff0c;是一种通过为多个复杂的子系统提供一个一致的接口&#xff0c;而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口&#xff0c;外部应用程序不用关心内部…

VUE_TypeError: Cannot convert a BigInt value to a number at Math.pow 解决方法

错误信息 TypeError: Cannot convert a BigInt value to a number at Math.pow vue 或 react package.json添加 "browserslist": {"production": ["chrome > 67","edge > 79","firefox > 68","opera >…

树的结构(b,b+树)

无论线性表&#xff0c;栈还是队列&#xff0c;都是一对一&#xff0c;查询的时候&#xff0c;效率较低&#xff0c;数据量比较的大的情况 1.树的定义 一种数据结构&#xff0c;有层次关系的集合&#xff0c;根朝上&#xff0c;叶朝下 除了根节点外&#xff0c;每个子节点都…

【自动驾驶汽车通讯协议】UART通信详解:理解串行数据传输的基石

文章目录 0. 前言1. 同步通讯与异步通讯1.1 同步通信1.2 异步通信 2. UART的数据格式3. 工作原理3.1 波特率和比特率3.2 UART的关键特性 4. UART在自动驾驶汽车中的典型应用4.1 UART特性4.2应用示例 5. 结语 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自…

【周末闲谈】Stable Diffusion会魔法的绘画师

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言Stable Diffusion介绍 使用ComfyUI 和 WebUIComfyUIWebUI 配置需求 Stable Diffusion资源分享吐司AiAUTOMATIC1111Civitai绘世整合包Nenly同学stability.ai 前言 在很早之前&…

香橙派AIpro部署YOLOv5:探索强悍开发板的高效目标检测能力

香橙派AIpro部署YOLOv5&#xff1a;探索强悍开发板的高效目标检测能力 一、香橙派AIpro开箱使用体验 1.1香橙派AIpro开箱 拿到板子后第一件事情就是开箱&#xff1a; 开箱后可以看见一个橘子的标识&#xff0c;也就是香橙派了&#xff0c;并且还有四个大字&#xff1a;为AI…

取消文字默认选中效果

点击的时候会选中文字 .user-select-none {user-select: none;}<div class"model user-select-none" onclick"createRipple(event)">Click me for ripple effect outside </div>点击再快也不会选中了

【C++】——类和对象(上)

文章目录 什么是类和对象类的定义类的访问限定符及其封装类的作用域类的实例化类的对象的大小计算this指针 什么是类和对象 类是一个用户定义的类型&#xff0c;它封装了数据&#xff08;称为属性或成员变量&#xff09;和操作这些数据的方法&#xff08;称为成员函数或方法&a…

Seven layers of the metaverse

看到一篇关于元宇宙的文章&#xff0c;分享给大家&#xff0c;供大家参考。 随着物理世界和数字世界的融合&#xff0c;元宇宙正在推动我们数字能力的新边界。从人类身份、个性和声誉到资产、情感和历史&#xff0c;元宇宙的虚拟现实中可以以全新的方式进行交互、控制和体验。因…

OpenGL笔记十之Shader类的封装

OpenGL笔记十之Shader类的封装 —— 2024-07-10 晚上 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记十之Shader类的封装1.运行2.目录结构3.main.cpp4.application4.1.CMakeLists.txt4.2.Application.h4.3.Application.cpp 5.assets5.1.shaders&#xf…

【吊打面试官系列-ZooKeeper面试题】简述 Zookeeper 文件系统?

大家好&#xff0c;我是锋哥。今天分享关于 【简述 Zookeeper 文件系统?】面试题&#xff0c;希望对大家有帮助&#xff1b; 简述 Zookeeper 文件系统? Zookeeper 提供一个多层级的节点命名空间&#xff08;节点称为 znode&#xff09;。与文件系统不同的是&#xff0c;这些节…

prometheus+grafana应用监控配置

配置Prometheus 官方地址&#xff1a;Download | Prometheus &#xff08;wegt下载压缩包&#xff0c;解压并重命名prometheus&#xff0c;文件放于/data/prometheus即可&#xff09; 配置 service方法(文件放于 /etc/systemd/system/prometheus.service)&#xff1a; [Unit…

博物馆地图导航系统:高精度地图引擎与AR/VR融合,实现博物馆数字化转型

在人民日益追求精神文化的时代下&#xff0c;博物馆作为传承与展示人类文明的璀璨殿堂&#xff0c;其重要性不言而喻。然而&#xff0c;随着博物馆规模的不断扩大和藏品种类的日益丰富&#xff0c;游客在享受知识盛宴的同时&#xff0c;也面临着“迷路”与“错过”的困扰。博物…

【CUDA】CUDA中缓存机制对计时的影响

笔者在阅读知乎上一个关于CUDA编程的专栏时&#xff0c;发现作者写的很多文章中都会附带计时的模块用于评估程序的运行效率&#xff0c;然而笔者发现&#xff0c;在运行这篇文章中的代码时时&#xff0c;得到的结果和作者的结果有较大差异&#xff0c;主要体现在&#xff1a;使…

前端调试技巧(npm Link,vscode调试,浏览器调试等)

Npm Link 功能&#xff1a; 在本地开发npm模块的时候&#xff0c;我们可以使用npm link命令&#xff0c;将npm 模块链接到对应的运行项目中去&#xff0c;方便地对模块进行调试和测试 断点调试 vscode调试 Debug Vue2 Project 目标&#xff1a;在VSCode中调试项目代码…

巧用 VScode 网页版 IDE 搭建个人笔记知识库!

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 巧用 VScode 网页版 IDE 搭建个人笔记知识库! 描述&#xff1a;最近自己在腾讯云轻量云服务器中部署了一个使用在线 VScode 搭建部署的个人Markdown在线笔记&#xff0c;考虑到在线 VScode 支持终…

[K8S]一、Flink on K8S

Kubernetes | Apache Flink 先编辑好这5个配置文件&#xff0c;然后再直接执行 kubectl create -f ./ kubectl get all kubectl get nodes kubectl get pods kubectl get pod -o wide kubectl get cm -- 获取所有的configmap 配置文件 kubectl logs pod_name -- 查看…

智能汽车域控制器FOTA升级方案探讨

1.概述 本文探讨的OTA升级仅针对运行linux系统的域控制器&#xff0c;升级方式为FOTA&#xff0c;探究升级文件从OTA服务器下载到域控中以后&#xff0c;如何将升级文件安装到存储系统。 为安全起见&#xff0c;支持FOTA升级的存储区域必须支持AB分区设计&#xff0c;每个分区…

浅学三次握手

数据要完成传输&#xff0c;必须要建立连接。由于建立TCP连接的过程需要来回3次&#xff0c;所以&#xff0c;将这个过程形象的叫做三次握手。 结合上面的图来看更清楚。 先说三次握手吧&#xff0c;连接是后续数据传输的基础。就像我们打电话一样&#xff0c;必须保证我和对方…

c++习题10-骑士得到的金币数

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 二&#xff0c;思路 阅读题目之后可以列出如下的数字&#x1f447; 观察上图有如下思路&#xff08;主要是找到规律&#xff09; 给个for循环包裹住需要处理的语句&#xff0c;循环…