BUUCTF逆向wp [MRCTF2020]Transform
第一步 查壳。该题为64位。
第二步 进入主函数,跟进dword_40F040,它应该与关键字符串有关
分析一下:
初始化和输入
- sub_402230(argc, argv, envp);
- 这行可能是一个初始化函数,用于设置程序环境或处理命令行参数。具体功能不明,因为这取决于函数的实现。
- sub_40E640("Give me your code:\n");
- 输出提示信息给用户,要求输入代码。
- sub_40E5F0("%s", Str);
- 通过格式化字符串读取用户输入,并存储在变量 Str 中。
验证输入长度
- if (strlen(Str) != 33)
- 检查输入字符串的长度是否为33个字符。如果不是,执行以下操作:
- sub_40E640("Wrong!\n"); 输出错误信息。
- system("pause"); 暂停程序执行,等待用户按键。
- exit(0); 退出程序。
- 所以告诉我们字符串长度必须是33,才能进行下面的操作。
- 检查输入字符串的长度是否为33个字符。如果不是,执行以下操作:
数据处理
- 循环处理字符串
- for (i = 0; i <= 32; ++i)
- 对输入字符串的每个字符进行处理,循环33次(从0到32)。
- byte_414040[i] = Str[dword_40F040[i]];
- dword_40F040[i] 可能是一个包含索引的数组,用于从 Str 中选择字符。
- 将选定的字符赋值给 byte_414040 数组的相应位置。
- byte_414040[i] ^= LOBYTE(dword_40F040[i]);
- 对字符进行异或操作,LOBYTE 取 dword_40F040[i] 的低字节部分。
- for (i = 0; i <= 32; ++i)
验证处理结果
- for (j = 0; j <= 32; ++j)
- 再次遍历处理后的数据,检查是否与某个预设的数组 byte_40F0E0 匹配。
- if (byte_40F0E0[j] != byte_414040[j])
- 如果不匹配,输出错误信息,暂停程序,并退出。
输出成功信息
- 成功验证后的输出
- sub_40E640("Right!Good Job!\n"); 输出成功信息。
- sub_40E640("Here is your flag: %s\n", Str); 输出用户原始输入作为“flag”。
- system("pause"); 暂停程序,等待用户操作。
程序结束
- return 0. 程序正常结束。
第三步 跟进后,发现这两组数据,按shiift+E提取
选中其中任意一个数据按H键转换成以下数据
这后面那个dup(0)可以不用管。
第四步 编写脚本
分析一下脚本:
初始化数组
- dword_40F040 和 byte_40F0E0 数组
- 这两个数组包含了一些十进制和十六进制的数值,看起来像是加密或混淆数据的关键部分。
- str 数组和 flag 字符串
- str 初始化为长度为33的全零数组,用于存储中间结果。
- flag 初始化为空字符串,用于存储最终的解密字符串。
数据处理
- 第一个循环:异或操作和重构 str 数组
- for i in range(33):
- 遍历 byte_40F0E0 数组。
- byte_40F0E0[i] ^= dword_40F040[i]
- 对 byte_40F0E0 和 dword_40F040 数组中相同位置的元素进行异或操作,结果仍存储在 byte_40F0E0 中。
- 异或操作是一种常见的加密和解密技术,因为它是可逆的。
- str[dword_40F040[i]] = byte_40F0E0[i]
- 使用 dword_40F040 数组的值作为索引,将异或后的 byte_40F0E0 数组的值重新排序或重构到 str 数组中。
- 这一步可能是将数据重新排列到正确的顺序,以便解码或显示。
- for i in range(33):
输出结果
- 第二个循环:构建 flag 字符串
- for i in range(33):
- 遍历 str 数组。
- flag += chr(str[i])
- 将 str 数组中的每个整数转换为对应的ASCII字符并追加到 flag 字符串。
- 这一步将整数数组转换为可读的字符串。
- for i in range(33):
flag{Tr4nsp0sltiON_Clph3r_1s_3z}
相关文章:
BUUCTF逆向wp [MRCTF2020]Transform
第一步 查壳。该题为64位。 第二步 进入主函数,跟进dword_40F040,它应该与关键字符串有关 分析一下: 初始化和输入 sub_402230(argc, argv, envp); 这行可能是一个初始化函数,用于设置程序环境或处理命令行参数。具体功能不明,…...
前端下载文件流 出现乱码 解决方案
1. 后端返回文件格式不是 utf-8 解决方案:后端加 2. 若添加 utf-8 后依旧乱码 请求配置中添加 responseType: arraybuffer, export function downMode() {return http.request({url: baseUrl downTemplate,method: get,responseType: arraybuffer,}); }下载 con…...
Linux/Windows 系统分区
1. Windows 系统 1.1 系统分区 系统分区也叫做磁盘分区,即分盘; 举个例子,好比家里有一个大柜子,把衣服,鞋子,袜子都放在里面,由于没有隔断,找的时候非常麻烦,找是能找…...
C/C++ xml库
文章目录 一、介绍1.1 xml 介绍1.2 xml 标准1.3 xml 教程1.4 xml 构成 二、C/C xml 库选型2.1 选型范围2.2 RapidXML2.3 tinyxml22.4 pugixml2.5 libxml 五、性能比较5.1 C xml 相关的操作有哪些5.2 rapidxml、Pugixml、TinyXML2 文件读取性能比较 六、其他问题6.1 version和 e…...
UniVue@v1.5.0版本发布:里程碑版本
前言 以后使用UniVue都推荐使用1.5.0以后的版本,这个版本之后,更新的速度将会放缓。 希望这个框架能够切实的帮助大家更好的开发游戏,做出一款好游戏!本开源项目采用的开源协议为MIT协议,完全开源化,以后也…...
在 Windows 上开发.NET MAUI 应用_2.生成你的第一个应用
先决条件 Visual Studio 2022 17.8 或更高版本,并安装了 .NET Multi-platform App UI 工作负载。 可参考上一篇文章:http://t.csdnimg.cn/n38Yy 创建应用 1.启动 Visual Studio 2022。 在开始窗口中,单击“创建新项目”以创建新项目&#…...
配置SMTP服务器的要点是什么?有哪些限制?
配置SMTP服务器安全性如何保障?如何高效配置服务器? SMTP作为电子邮件发送的核心协议,其配置对于确保邮件的成功传递和安全至关重要。AokSend将详细介绍配置SMTP服务器的关键要点,帮助读者建立一个高效、安全的邮件发送系统。 配…...
图形渲染基础-Unity渲染管线介绍
Unity中的渲染管线渲染场景主要分为三个阶段 剔除(Culling) 剔除摄像机不可见对象(视锥体剔除Frustum Culling)和被遮挡对象(遮挡剔除Occlusion Culling)。 渲染(Rendering) 将可见…...
junit mockito service
service类单元测试可以有两种方式 1、使用Autowired启用上下文的Bean走业务逻辑,适用于debug调试 2、使用InjectMocks不启用上下文依懒的Bean采用打桩的形式 打桩注意:service通常业务逻辑复杂,Bean的依懒层次可能很深,初用者常…...
k8s学习——升级后的k8s使用私有harbor仓库
升级后的k8s使用了第三方的容器管理器,安装了nerdctl工具来替代docker进行镜像管理。但是使用docker build打包并上传至harbor仓库的镜像,在部署过程中始终拉不下来,报错证书错误。通过journalctl -xe |grep kubelet 或 journalctl -xe |grep…...
Blender4.2版本正式上线,新版本的5个主要功能!
Blender刚刚推出了备受瞩目的 Blender 4.2 版本,这款软件专为那些在视觉特效、动画制作、游戏开发和可视化设计领域工作的艺术家们量身打造。作为最新的长期稳定更新,Blender 4.2 不仅稳定可靠,还引入了备受期待的“Eevee Next”实时渲染引…...
【python基础】基本数据类型
文章目录 一. Python基本数据类型1. 整数1.1. python的四种进制1.2. 数中的下划线 2. 浮点数3. 复数4. 布尔型5. 运算符5.1. 算术运算符5.2. 比较运算符5.3. 逻辑运算符5.4 运算符优先级 6. 常量 二. 注释三. Python之禅 一. Python基本数据类型 1. 整数 无长度限制࿱…...
应用层——HTTP
像我们电脑和手机使用的应用软件就是在应用层写的,当我们的数据需要传输的时候换将数据传递到传输层。 应用层专门给用户提供应用功能,比如HTTP,FTP… 我们程序员写的一个个解决我们实际的问题都在应用层,我们今天来聊一聊HTTP。 协议 协议…...
剧本杀小程序搭建,为商家带来新的收益方向
近几年,剧本杀游戏成为了游戏市场的一匹黑马,受到了不少年轻玩家的欢迎。随着信息技术的快速发展,传统的剧本杀门店已经无法满足游戏玩家日益增长的需求,因此,剧本杀市场开始向线上模式发展,实现行业数字化…...
十六、【机器学习】【监督学习】- 支持向量回归 (SVR)
系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…...
基于FPGA的多路选择器
目录 一、组合逻辑 二、多路选择器简介: 三、实战演练 摘要:本实验设计并实现了一个简单的多路选择器,文章后附工程代码 一、组合逻辑 组合逻辑是VerilogHDL设计中的一个重要组成部分。从电路本质上讲,组合逻辑电路的特点是输…...
面经学习(杭州实在智能实习)
个人评价 秃狼觉得本次的面试是有史以来难度最大的,问了很多陌生的八股文,项目问的比较少,估计是项目本来就没有什么亮点,也是第一次被面试官说菜的面试。不过在后续的学习上还是收获颇丰的。 1.说说你在实习中遇到的难点吧&…...
mysql、oracle、db2数据库连接参数
mysql、oracle、db2数据库连接参数 参数/数据库driverurlMysqlcom.mysql.jdbc.Driver 或 com.mysql.cj.jdbc.Driverjdbc:mysql://localhost:3306/数据库名Oracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:localhost:1521:orcl 注:orcl为数据库SIDDB2com.ib…...
redis缓存击穿和缓存穿透的封装、缓存更新的CacheAside方案、数据预热
redis缓存击穿和缓存穿透的封装 一、首先是互斥锁二、封装为工具类三、调用四、数据预热五、缓存更新的CacheAside方案 (来源黑马redis) 一、首先是互斥锁 //拿到锁private boolean tryLock(String key) {Boolean flag stringRedisTemplate.opsForValue…...
ArcGIS Pro SDK (九)几何 5 多边形
ArcGIS Pro SDK (九)几何 5 多边形 文章目录 ArcGIS Pro SDK (九)几何 5 多边形1 构造多边形 - 从映射点的枚举2 构造多边形 - 从包络3 获取多边形的点4 获取多边形的各个部分5 枚举多边形的各个部分6 获取多边形的线段7 构建圆环…...
Docker 镜像使用和安装
1、简介 Docker是一个开源的应用容器引擎;是一个轻量级容器技术; Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像; 运行中的这个镜像…...
JAVA:Filer过滤器+案例:请求IP访问限制和请求返回值修改
JAVA:Filer过滤器 介绍 Java中的Filter也被称为过滤器,它是Servlet技术的一部分,用于在web服务器上拦截请求和响应,以检查或转换其内容。 Filter的urlPatterns可以过滤特定地址http的请求,也可以利用Filter对访问请求…...
FastAPI -- 第三弹(自定义响应、中间件、代理、WebSockets)
路径操作的高级配置 OpenAPI 的 operationId from fastapi import FastAPIapp FastAPI()# 通过 operation_id 参数设置 app.get("/items/", operation_id"some_specific_id_you_define") async def read_items():return [{"item_id": "F…...
网安小贴士(16)网络安全体系
前言 网络安全体系是一个综合性的系统,旨在保护网络系统中的硬件、软件和数据免受未经授权的访问、泄露、破坏或篡改。这个体系涉及多个方面,包括网络安全策略、安全技术和安全管理等。 一、网络安全体系概述 网络安全体系通常包括以下几个关键组成部分…...
UCOSIII 中断管理接口剖析
引言 在实时操作系统中,中断处理是一个非常重要的环节。理解和掌握中断处理流程对提高系统实时性和稳定性至关重要。本文将详细解析uCOS-III内核中的中断管理接口,包括 OSIntEnter() 和 OSIntExit() 函数的流程,并结合流程图对各个步骤进行说…...
windows 11 PC查询连接过的wlan密码
1:管理员打开cmd 2:输入netsh wlan show profiles 3:netsh wlan show profiles Shw2024-5G keyclear 密码关键内容:12345678...
npm install 出现canvas错误
npm install canvas2.8.0 --ignore-scripts只要是:npm ERR! Failed at the XXXX.X.X install script 这种错误 都可以:npm install XXXX.X.X --ignore-scripts进行更改 https://blog.csdn.net/YXWik/article/details/119039561...
Python爬虫入门篇学习记录
免责声明 本文的爬虫知识仅用于合法和合理的数据收集,使用者需遵守相关法律法规及目标网站的爬取规则,尊重数据隐私,合理设置访问频率,不得用于非法目的或侵犯他人权益。因使用网络爬虫产生的任何法律纠纷或损失,由使用…...
怎样对 PostgreSQL 中的慢查询进行分析和优化?
🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 怎样对 PostgreSQL 中的慢查询进行分析和优化?一、理解慢查询的危害二、找出慢查询&#x…...
Springboot项目远程部署gitee仓库(docker+Jenkins+maven+git)
创建一个Springboot项目,勾选web将该项目创建git本地仓库,再创建远程仓库推送上去 创建TestController RestController RequestMapping("/test") public class TestController { GetMapping("/hello") public String sayHelloJe…...
史丹利网站开发团队/网络运营师
小知识点注:外面双引号,里面的双引号改为单引号; 在div里面行高设置和整个外面高度一样,才能用竖直居中,居中是行居中 文本框取出来的值是字符串,需要用parseint()转化为数字 Window.document对象 一、找到…...
网站api怎么做的/长沙网站提升排名
在软件编译过程中,经常会碰到类似这样的编译错误:/usr/bin/ld: cannot find -lhdf5这表示找不到库文件 libhdf5.so,若是其它库文件,则是 cannot find -lxxx 了,其中 xxx 是库文件的名字。解决方法有:1. 安装…...
个人制作网站多少钱/seo优化培训多少钱
介绍一下自己 一开始问项目(我的项目跟网络相关)中的拥塞控制、流量控制;简单介绍了一下协议做的事情。有什么拥塞控制协议:Reno和BBR介绍一下Reno协议的工作方式;UDP 和 TCP 的区别,都适合什么场景&#x…...
怎么将网站设置为首页/小说网站排名免费
文 | 我爱学Python简书 编辑 | EarlGrey推荐 | 编程派公众号(ID:codingpy)昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序。查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索…...
威海千淼网站建设/互联网营销师有什么用
题目:(最小操作次数使数组元素相等)给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。 示例 1: 输入:nums [1,2,3] 输出:3 解释&…...
网站设计论文前言怎么写/世界杯32强排名
public class Test { //外部类public static void main(String[] args) {EnclosedClazz enclosedClazz new EnclosedClazz();//这里返回的实际是一个InnerSon对象Father f enclosedClazz.test();//定义在test()里的内部类对象is,存活到现在//父类引用指向子类对…...