BUUCTF逆向wp [MRCTF2020]Transform

第一步  查壳。该题为64位。

第二步  进入主函数,跟进dword_40F040,它应该与关键字符串有关

分析一下:

初始化和输入

  1. sub_402230(argc, argv, envp);
    • 这行可能是一个初始化函数,用于设置程序环境或处理命令行参数。具体功能不明,因为这取决于函数的实现。
  2. sub_40E640("Give me your code:\n");
    • 输出提示信息给用户,要求输入代码。
  3. sub_40E5F0("%s", Str);
    • 通过格式化字符串读取用户输入,并存储在变量 Str 中。

验证输入长度

  1. if (strlen(Str) != 33)
    • 检查输入字符串的长度是否为33个字符。如果不是,执行以下操作:
      • sub_40E640("Wrong!\n"); 输出错误信息。
      • system("pause"); 暂停程序执行,等待用户按键。
      • exit(0); 退出程序。
      • 所以告诉我们字符串长度必须是33,才能进行下面的操作。

数据处理

  1. 循环处理字符串
    • 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] 的低字节部分。

验证处理结果

  1. for (j = 0; j <= 32; ++j)
    • 再次遍历处理后的数据,检查是否与某个预设的数组 byte_40F0E0 匹配。
    • if (byte_40F0E0[j] != byte_414040[j])
      • 如果不匹配,输出错误信息,暂停程序,并退出。

输出成功信息

  1. 成功验证后的输出
    • sub_40E640("Right!Good Job!\n"); 输出成功信息。
    • sub_40E640("Here is your flag: %s\n", Str); 输出用户原始输入作为“flag”。
    • system("pause"); 暂停程序,等待用户操作。

程序结束

  1. return 0. 程序正常结束。

第三步  跟进后,发现这两组数据,按shiift+E提取

选中其中任意一个数据按H键转换成以下数据

这后面那个dup(0)可以不用管。

第四步   编写脚本

分析一下脚本:

初始化数组

  1. dword_40F040  byte_40F0E0 数组
    • 这两个数组包含了一些十进制和十六进制的数值,看起来像是加密或混淆数据的关键部分。
  2. str 数组和 flag 字符串
    • str 初始化为长度为33的全零数组,用于存储中间结果。
    • flag 初始化为空字符串,用于存储最终的解密字符串。

数据处理

  1. 第一个循环:异或操作和重构 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 数组中。
        • 这一步可能是将数据重新排列到正确的顺序,以便解码或显示。

输出结果

  1. 第二个循环:构建 flag 字符串
    • for i in range(33):
      • 遍历 str 数组。
      • flag += chr(str[i])
        • 将 str 数组中的每个整数转换为对应的ASCII字符并追加到 flag 字符串。
        • 这一步将整数数组转换为可读的字符串。

flag{Tr4nsp0sltiON_Clph3r_1s_3z}

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

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

相关文章

高性能、安全、低碳绿色的趋势下,锐捷网络发布三擎云办公解决方案 3.0

桌面虚拟化作为云时代的主流和热门技术&#xff0c;已经取得了广泛应用。随着生成式 AI 爆炸式发展&#xff0c;CSDN 看到&#xff0c;人工智能正在引发计算、开发、交互三大范式的全面升级&#xff0c;技术开发或将迎来一次全新的科技变革周期&#xff0c;因此 VDI 云桌面随之…

C#语法基础详解(万字总结)

文章目录 **参考书籍&#xff1a;C#7.0 核心技术指南**类型类字段解构器对象初始化器属性表达式属性(只读属性才可以)自动属性属性初始化器 索引器静态构造器nameof运算符 继承类型转换和引用转换as运算符is运算符is与模式变量 虚函数成员抽象类和抽象成员new和重写base关键字构…

Android C++系列:Linux线程(四)线程同步

多个线程同时访问共享数据时可能会冲突,这跟我们前面信号文章所说的可重入性是同样的问题。比如两个线程都要把某个全局变量增加1,这个操作在某平台需要三条指令完成: 从内存读变量值到寄存器;寄存器的值加1;将寄存器的值写回内存假设两个线程在多处理器平台上同时执行这三…

JavaSE学习复习题总结

一.什么是继承与多态&#xff1f; 1.继承 2.多态多态是面向对象编程的另一个核心特性&#xff0c;它允许我们以统一的接口处理不同的对象。在Java中&#xff0c;多态通常通过方法的重写&#xff08;Override&#xff09;和重载&#xff08;Overload&#xff09;以及接口&#…

【linux】Shell脚本中While循环的详细用法教程

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

排序系列 之 选择排序

&#xff01;&#xff01;&#xff01;排序仅针对于数组哦本次排序是按照升序来的哦 介绍 快速排序英文名为SelectSort从数组中找到最小的放到前边 基本思路 1、默认待排序数组中第一个作为最小值2、找待排序数组&#xff08;注意不是整个数组哦&#xff09;中真正的最小值3…

AMEYA360:思瑞浦推出汽车级理想二极管ORing控制器TPS65R01Q

聚焦高性能模拟芯片和嵌入式处理器的半导体供应商思瑞浦3PEAK(股票代码&#xff1a;688536)发布汽车级理想二极管ORing控制器TPS65R01Q。 TPS65R01Q拥有20mV正向调节功能&#xff0c;降低系统损耗。快速反向关断(Typ&#xff1a;0.39μs)&#xff0c;在电池反向和各种汽车电气瞬…

汇编教程2

本教程主要教大家如何安装32位Linux虚拟机&#xff0c;为后续实验拆炸弹做准备 下载系统映像文件 以Ubuntu14.04.6系统为例 官方网站&#xff1a;下载地址 点击下载图中32位系统 如果官网进不去可以使用镜像网站 清华镜像网站&#xff1a;下载地址 进入之后找到下图中链接…

redis server response timeout(3000ms) occurred after 3 retry attempts异常分析

读取redis数据报超时错误&#xff1a; Redis server response timeout (3000 ms) occured after 3 retry attempts2024-07-18 17:07:57.124 ERROR [e8f07b0a671c08311dff589827897232] [http-nio-9528-exec-6] c.z.i.u.m.c.e.BaspUserExceptionHandler.exceptionHandler:83 - R…

PyTorch 深度学习实践-基于SoftMax的多分类

视频指路 参考博客笔记 参考笔记二 文章目录 上课内容代码实现作业实现 上课内容 softmax能输出一个分布&#xff1a;每一个输出值>0&#xff0c;且和1 说明&#xff1a; 1、softmax的输入不需要再做非线性变换&#xff0c;也就是说softmax之前不再需要激活函数(relu)。so…

基于X86+FPGA+AI的远程医疗系统,支持12/13代 Intel Core处理器

工控主板&#xff1a;支持12/13代 Intel Core处理器&#xff0c;适用于远程医疗系统 顺应数字化、网络化、智能化发展趋势&#xff0c;国内医疗产业改革正在积极推进&#xff0c;远程医疗、智慧医疗等新模式新业态创新发展和应用&#xff0c;市场空间不断扩大&#xff0c;而基…

Web前端Promise

Promise介绍与使用 Promise是什么&#xff1f; 1.抽象表达&#xff1a; Promise是一门新的技术&#xff08;ES6规范&#xff09;Promise是JS中进行异步编程的新解决方案备注&#xff1a;旧方案是单纯使用回调函数 2.具体表达&#xff1a; 从语法上来说&#xff1a;Promise…

Android SurfaceView 组件介绍,挖洞原理详解

文章目录 组件介绍基本概念关键特性使用场景 SurfaceHolder介绍主要功能使用示例 SurfaceView 挖洞原理工作机制 使用SurfaceView展示图片示例创建一个自定义的 SurfaceView类在 Activity 中使用 ImageSurfaceView注意事项效果展示 组件介绍 在 Android 开发中&#xff0c;Sur…

HiFi-GAN——基于 GAN 的声码器,能在单 GPU 上生成 22 KHz 音频

拟议的 HiFiGAN 可从中间表征生成原始波形 源码地址&#xff1a;https://github.com/NVIDIA/DeepLearningExamples 论文地址&#xff1a;https://arxiv.org/pdf/2010.05646.pdf 研究要点包括 **挑战&#xff1a;**基于 GAN 的语音波形生成方法在质量上不及自回归模型和基于流…

纯前端小游戏,4096小游戏,有音效,Html5,可学习使用

// 游戏开始运行create: function(){this.fieldArray [];this.fieldGroup this.add.group();this.score 0;//4096 增加得分this.bestScore localStorage.getItem(gameOptions.localStorageName) null ? 0 : localStorage.getItem(gameOptions.localStorageName);for(var …

vscode及pycharm配置Python文件模板

一、vscode配置方法 第一步&#xff0c;依次点击“File”->“preference”->“Configure User Snippets”&#xff0c;在弹出的框中输入Python&#xff0c;打开python.json 文件 第二步&#xff0c;python.json 文件中输入以下内容&#xff1a; {"Python Template…

QtC++ 设计模式(五)——状态模式

状态模式 序言理解源码 序言 设计模式只是一个抽象的设计模式方法&#xff0c;并不是一个固定使用的搭配&#xff0c;就算是普通switch语句&#xff0c;Map&#xff0c;乃至状态机都是状态模式的其中一种实现方法 状态模式看起来好像和策略模式差不多&#xff0c;主要是其的侧…

Java记事本工具Notepad++

常见的高级记事本 Editplus、Notepad、Sublime Notepad软件的安装和使用 安装&#xff1a;傻瓜式安装 1、选择中文-->【OK】 2、点击【下一步】 3、协议点击【我接受】 4、选择安装路径-->【下一步】 5、点击【下一步】 6、最后点击【安装】 7、将运行取消-->点击…

戴尔电脑开机出现no boot device found错误提示原因分析及解决方法

戴尔电脑是一款不的品牌,戴尔电脑一直以来都是以IT直销享誉全球的。而旗下的戴尔笔记本&#xff0c;更是深受用户们的追捧和喜爱。最近有网友反馈戴尔电脑开机出现no boot device found错误提示是怎么回事&#xff1f;后来发现有很多网友将引导模式改成legacymbr后发现启动时出…

2024-07-18 Unity插件 Odin Inspector8 —— Type Specific Attributes

文章目录 1 说明2 特定类型特性2.1 AssetList2.2 AssetSelector2.3 ChildGameObjectsOnly2.4 ColorPalette2.5 DisplayAsString2.6 EnumPaging2.7 EnumToggleButtons2.8 FilePath2.9 FolderPath2.10 HideInInlineEditors2.11 HideInTables2.12 HideMonoScript2.13 HideReferenc…