BUUCTF-[2019红帽杯]easyRE(Reverse逆向)

news2024/11/25 20:27:54

第一步 查壳

如图,无壳,ELF文件

image.png

第二步 IDA

64位IDA,无法直定位到主函数F5,所以使用,查找关键字符串定位主函数大法Shift+F12

image.png

发现这些关键字符串,双击上图蓝色字符串,

image.png

然后交叉引用Ctrl+X跟踪

image.png

来到流程图,直接F5大法

进来又是一代对数据,我直接全部手动转化为了字符

image.png

然后下面的一堆函数,进入菜狗模式,借鉴大佬的猜测

进入第一个函数sub_4406E0,发现很难理解此函数是干嘛的,但通过主程序,我们可以猜测,该函数的作用应该是读取我们的输入。同理,根据if语句中的v15[i] ^ i) != v14[i],我们也可以猜测函数sub_424BA0是读取长度的。这样,continue前的逻辑就分析出来。

果然,做ctf就得是要大胆猜测呀,继续分析,如图注释所示

image.png

涉及数组寻址方式数据结构之——数组 - 知乎 (zhihu.com)

所以,为了防止程序跳转,所以得知,正确数据应该是,v14数组内存里的数据(也即是上面第一次出现的一堆我手动转化的字符)去异或它的下标。

代码部分

v17[1] = 111
v17[2] = 100
v17[3] = 108
v17[4] = 62
v17[5] = 81
v17[6] = 110
v17[7] = 98
v17[8] = 40
v17[9] = 111
v17[10] = 99
v17[11] = 121
v17[12] = 127
v17[13] = 121
v17[14] = 46
v17[15] = 105
v17[16] = 127
v17[17] = 100
v17[18] = 96
v17[19] = 51
v17[20] = 119
v17[21] = 125
v17[22] = 119
v17[23] = 101
v17[24] = 107
v17[25] = 57
v17[26] = 123
v17[27] = 105
v17[28] = 121
v17[29] = 61
v17[30] = 126
v17[31] = 121
v17[32] = 76
v17[33] = 64
v17[34] = 69
v17[35] = 67
flag=""
for i in range(36):
    flag+=chr(v17[i]^i)
print(flag)

得到运行结果是

Info:The first four chars are `flag`

那么问题还没有结束,所以继续往下看,前面还是类似上面的前面,输入然后判断,重点是点进入令人头大的sub_400E44函数,但是有经验的就会知道,还记得上面第二张截图那一大片绿色的字符串吗,底下有一串abcdefghijklmn数组字符串,这在`

sub_400E44函数中同样也出现了,可以直接点击跟踪,所以可以猜测sub_400E44`函数就是base64加密。而且还加密了十次。

image.png

sub_400E44函数

image.png

(手动狗头,这是大佬的代码:)也可以直接手动用工具解密:

import base64
lis ="Vm0wd2VHUXhTWGhpUm1SWVYwZDRWVll3Wkc5WFJsbDNXa1pPVlUxV2NIcFhhMk0xVmpKS1NHVkdXbFpOYmtKVVZtcEtTMUl5VGtsaVJtUk9ZV3hhZVZadGVHdFRNVTVYVW01T2FGSnRVbGhhVjNoaFZWWmtWMXBFVWxSTmJFcElWbTAxVDJGV1NuTlhia0pXWWxob1dGUnJXbXRXTVZaeVdrWm9hVlpyV1hwV1IzaGhXVmRHVjFOdVVsWmlhMHBZV1ZSR1lWZEdVbFZTYlhSWFRWWndNRlZ0TVc5VWJGcFZWbXR3VjJKSFVYZFdha1pXWlZaT2NtRkhhRk5pVjJoWVYxZDBhMVV3TlhOalJscFlZbGhTY1ZsclduZGxiR1J5VmxSR1ZXSlZjRWhaTUZKaFZqSktWVkZZYUZkV1JWcFlWV3BHYTFkWFRrZFRiV3hvVFVoQ1dsWXhaRFJpTWtsM1RVaG9hbEpYYUhOVmJUVkRZekZhY1ZKcmRGTk5Wa3A2VjJ0U1ExWlhTbFpqUldoYVRVWndkbFpxUmtwbGJVWklZVVprYUdFeGNHOVhXSEJIWkRGS2RGSnJhR2hTYXpWdlZGVm9RMlJzV25STldHUlZUVlpXTlZadE5VOVdiVXBJVld4c1dtSllUWGhXTUZwell6RmFkRkpzVWxOaVNFSktWa1phVTFFeFduUlRhMlJxVWxad1YxWnRlRXRXTVZaSFVsUnNVVlZVTURrPQ=="
for i in range(10):
    lis = base64.b64decode(lis)
print(lis)

解密结果是:b’https://bbs.pediy.com/thread-254172.htm’

这是一个i春秋的论坛页面,被迫学习了,主动防御,这是什么天坑题目,直接没思路,看大佬wp

我们需要其他的线索,联想到第一个提示信息,翻译说前四个字符是"flag",发现下面标黄的地方还有一段字符串byte_6CC0A0

image.png

根据后面的交叉引用跟踪进去看,sub_400D35函数–看我的注释很令人头大,但重点看if

image.png

发现此函数的逻辑就是将byte_6CC0A0字符串进行异或,还可以发现if语句中,有判断是否等于‘f’和‘g’的条件,根据已有信息猜测这个字符数组就是‘flag’。v12和v15是一样的一个数组,HIBYTE()函数的作用是获取高字节也就是数组的最后一位,同时还有BYTE()、BYTE1()、BYTE2()第一个是获取数组的第一位,第二个就是获取第二位,依次类推。所以可以知道v15这个数组就只有四个字符而且和byte_6CC0A0前4个字符异或后就==字符“flag”。

然后我们来说说交叉引用Ctrl+X

对sub_400D35函数进行交叉引用;发现来自.fini段的调用;

而.fini段的解释是

此节区包含了可执行的指令,是进程终止代码的一部分。程序正常退出时,系统将安排执行这里的代码。

“oh my god 又是什么新知识增加了”

image.png

image.png

编写算法

enc = [0x40,0x35,0x20,0x56,0x5D,0x18,0x22,0x45,0x17,0x2F,0x24,0x6E,0x62,0x3C,0x27,0x54,0x48,0x6C,0x24,0x6E,0x72,0x3C,0x32,0x45,0x5B]
key = ""
flag = ""
en = "flag"
for i in range(4):
    key+=chr(enc[i]^ord(en[i]))
print(key)
for j in range(len(enc)):
    flag+=chr(enc[j]^ord(key[j%4]))
print(flag)

结果如图,这题真费劲

image.png

得出

key为&YA1

flag为flag{Act1ve_Defen5e_Test}

总结

最后,声明下我借鉴得大佬的文章:

(29条消息) 2019 红帽杯 easyRE_[2019红帽杯]easyre_mishixiaodai的博客-CSDN博客

(29条消息) BUUCTF-re-[2019红帽杯]easyRE_T1M@的博客-CSDN博客

2019 红帽杯 Re WP - Hk_Mayfly - 博客园 (cnblogs.com)

(29条消息) re学习笔记(25)BUUCTF-re-[2019红帽杯]easyRE_buuctf re题_Forgo7ten的博客-CSDN博客

再写是因为自己再复现了一遍,希望加深印象,增强理解

如有错误,欢迎感谢支出,并参与讨论。

借鉴引用注明出处,谢谢理解!

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

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

相关文章

硬件-示波器-巧用触发功能捕捉不连续的信号波形

文章目录 一:使用示波器的信号触发功能二:介绍示波器触发模式界面2.1 触发模式的AUTO档2.2 触发模式的Normal档(普通档)2.3 触发模式的single档(单次触发档) 三:在多通道的情况下,选…

电鳗带来灵感,防潮电源诞生,全打印技术的魅力

大家好!今天来了解一项受电鳗启发的防潮完全可打印电源的研究——《A moisture-enabled fully printable power source inspired by electric eels》发表于《PNAS》。随着可穿戴电子设备的发展,对安全、一次性且具成本效益的电源需求大增。传统电池存在不…

react native 与 react.js 的区别

React.js ReactJS是一个 JavaScript 库,支持前端 Web 和在服务器上运行,用于构建用户界面和 Web 应用程序。 它主要重点是Web 开发,遵循可重用组件的概念。 React 的虚拟 DOM 比传统的完全刷新模型更快,因为虚拟 DOM 只刷新页面的…

透过《当音乐停止之后》,理解2008年次贷危机:债务、流动性与资本的无声博弈

金融市场就像是整个经济体的循环系统,现代经济体依赖各种授信机制输送营养到整个系统,维持经济的正常运转。书中揭示了2008年次贷危机的背景,以及量化宽松(QE)政策的作用。通过作者的讲述,我们真正了解2008…

前端继承:原理、实现方式与应用场景

目录 一、定义 二、语法和实现方式 1.原型链继承 2.构造函数继承 3.组合继承 4.ES6类继承 三、使用方式 四、优点 五、缺点 六、适用场景 一、定义 前端继承是指在面向对象编程中,一个对象可以继承另一个对象的属性和方法。在前端领域,通常是指…

HC32F460KETA PETB JATA 工业 自动化 电机

HC32F460 系列是基于 ARM Cortex-M4 32-bit RISC CPU,最高工作频率 200MHz 的高性能 MCU。Cortex-M4 内核集成了浮点运算单元(FPU)和 DSP,实现单精度浮点算术运算,支持 所有 ARM 单精度数据处理指令和数据类型&#xf…

【精选】基于javaweb的流浪动物领养系统(源码+定制+开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

centos系列图形化 VNC server配置,及VNC viewer连接,2024年亲测有效

centos系列图形化 VNC server配置,及VNC viewer连接 0.VNC服务介绍 VNC英文全称为Virtual Network Computing,可以位操作系统提供图形接口连接方式,简单的来说就是一款桌面共享应用,类似于qq的远程连接。该服务是基于C/S模型的。…

鸿蒙NEXT开发-知乎评论小案例(基于最新api12稳定版)

注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

vue实现列表自动滚动(纯与原生方式)

Vue实现列表自动滚动(纯与原生方式) 源码放在最后!1.效果展示: 2.功能说明: 该滚动可能存在的Bug: 1.如果你写的大屏不是使用的接口轮询的方式可能会存在也页面空白的情况(需要手动刷新才能触发列表滚动),因为我使用的是监听数据的变化然后…

软件供应链十年:探索开源的增长、风险和未来

回顾软件供应链状况报告的 10 年既是一个里程碑,也是一次行动号召。在过去十年中,开源消费改变了软件开发的世界。我们看到了前所未有的创新,但也出现了新的挑战,特别是在管理软件供应链的安全性和完整性方面。 在 Sonatype&…

基于SpringBoot民宿预订系统小程序【附源码】

效果如下: 管理员登录界面 管理员功能界面 用户管理界面 房东管理界面 小程序首页界面 民宿房间界面 功能界面 研究背景 随着旅游业的蓬勃发展和人们对旅行体验的不断追求,民宿作为一种独特的住宿方式,因其个性化、温馨及富含地方特色的服务…

disabled状态el-form下el-button的disabled的精细化控制

有一个很复杂的表单,支持编辑和查看两种模式。 查看时当然不希望编辑,最好是区分模式,在编辑模式下直接用div显示而不是用表单元素。这样工作量就有点大。那就考虑使用表单元素的disabled来让其不能编辑。如果每个表单元素都写这个玩意也是…

ssm职业高中学情成绩系统设计+jsp

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 摘 要 I Abstract II 第一章 绪论 1 1.1 研究背景 1 1.2 研究意义 1 1.3 研究内容 2 第二章 开发环…

codeforces round976 div2

A find minimum operations 思路&#xff1a;将所给的n变成k进制数&#xff0c;答案就是n的k进制形式下的位数之和 代码&#xff1a; #include <bits/stdc.h> using namespace std;typedef long long ll;ll n, k;void solve() {cin >> n >> k;ll cnt 0…

详解Spotbugs-maven-plugin(报告如何生成html测试报告)

Spotbugs介绍 SpotBugs是Findbugs的继任者&#xff08;Findbugs已经不再维护&#xff09;&#xff0c;用于对Java代码进行静态分析&#xff0c;查找相关的漏洞&#xff0c;SpotBugs比Findbugs拥有更多的校验规则。静态分析会检查Java字节码&#xff08;.class文件&#xff09;…

专题十一_递归_回溯_剪枝_综合练习_算法专题详细总结

目录 1. 找出所有⼦集的异或总和再求和&#xff08;easy&#xff09; 解析&#xff1a; 方法一&#xff1a; 解法二&#xff1a; 总结&#xff1a; 2. 全排列 Ⅱ&#xff08;medium&#xff09; 解析&#xff1a; 解法一&#xff1a;只关心“不合法”的分支 解法二&…

AI比诺奖得主更聪明。。。

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 AI圈又发生了哪些新鲜事&#xff1f; 特斯拉Optimus人形机器人亮相&#xff1a;日常任务好帮手 特斯拉在Cybercab活动上展示了其新款人形机器人Optimus&#xff0c;这款机器人能够执行拿包裹、浇水等…

CentOS快速配置网络Docker快速部署

CentOS快速配置网络&&Docker快速部署 CentOS裸机Docker部署1.联通外网2.配置CentOS镜像源3.安装Docker4.启动Docker5.CentOS7安装DockerCompose Bug合集ERROR [internal] load metadata for docker.io/library/java:8-alpineError: Could not find or load main class …

20241013组会

文章&#xff1a;A learnable end-edge-cloud cooperative network for driving emotion sensing 引言&#xff1a; 驾驶员的情绪状态直接影响安全驾驶。在“车-人-路-云”一体化控制框架下&#xff0c;我们提出了一种端-边-云协同情感感知网络模型&#xff08;EEC-Net&#x…