(62)[BJDCTF 2020]encode (目前写过最长的博客,还有一部分省略)

(62)[BJDCTF 2020]encode

我们查壳

image-20250314131654869

他是ELF文件格式

我们要调试他的话是得用liunx系统。

我们提前打开虚拟机吧

而且还有壳,我们脱壳吧

image-20250314132918866

enc:E8D8BD91871A1E56F53F4889682F96142AF2AB8FED7ACFD5E

image-20250315095441897

我们逆向从后往前看,我把函数名字改了,我们熟悉的名字。

然后我们进入rc4逐步分析

image-20250315095537417

很显然,上面sub_8048cc2这个函数用用来初始化Sbox

所以我们下面就是rc4加密了。

关于rc4我们知道他是对称密码,我们加密解密可以倒着来。所以懂我意思,我们在动调的时候改一下我传入的参数,改成密文,我们就可以倒转,的到解密数据,不用去写解密脚本了。

还有,根据观察,前面的flag....是我们的key只不过放在同一地址里面了,放的位置不同,类似于我们知道的那种malloc这中自己分配的内存

开始实践,直接动调。

1.我们知道,前面让我们输入的input长度是21

注意:这个题不论输入多长都进不去,需要我们下断点去修改寄存器的值,来步过

看我操作

image-20250315095914991

在这里下断点,然后我们动调

现在我们来输入21个‘a

image-20250315100015220

我们可以看到这个条件是15h,而我们不论输入多少都是1C,这是没办法避免的。所以我们需要改一下eax的值然后我们f5去下一个断点

image-20250315100227428

然后我们进入v5

image-20250315100343214

从FF91653C这个地方开始,就是我们要传入的数据,所以我们将密文,改进去,写个脚本

image-20250315100426684

image-20250315100450576

我们改成功之后,我们直接进入rc4内部去下断点

image-20250315100523192

sbox让他去初始化,然后后面我们直接在步过就可以得到我们的加密数据

要运行到result这一步嗷,我没上传截图

我们再打开v5去查看我们刚才那会改写的数据

image-20250315100711559

以下就是我们的加密数据,让我们提取出来,一定要提取对,多少个数据

unsigned char ida_chars[] =

{

0x23, 0x15, 0x25, 0x53, 0x08, 0x1A, 0x59, 0x38, 0x12, 0x6A,

0x39, 0x31, 0x27, 0x5B, 0x0B, 0x13, 0x13, 0x08, 0x5C, 0x33,

0x0B, 0x35, 0x61, 0x01, 0x51, 0x1F, 0x10 0X5C

};

image-20250315101422043

前面,我们根据函数,我们也知道前面是关于base64的换表加密,

所以我们只需要换表解密一下就好了

image-20250315101549798

BJD{0v0_Y0u_g07_1T!}

### BJDCTF2020 JustRE 挑战赛解题报告 #### 背景介绍 BJDCTF 是由北京邮电大学举办的网络安全竞赛活动之一。JustRE 是其中的一个逆向工程挑战项目,旨在测试参赛者对于二进制文件分析的能力。 #### 题目概述 该题目提供了一个可执行程序,参与者需要通过对这个程序进行反汇编和静态分析来找出隐藏在其内部的秘密字符串或关键算法[^1]。 #### 工具准备 为了完成此任务,通常会使用到以下几种工具: - IDA Pro 或 Ghidra:用于反汇编目标程序并查看其伪代码表示形式。 - Radare2:开源命令行下的逆向工程框架,适合脚本化操作。 - Python 和其他编程语言编辅助解析脚本。 #### 反汇编与初步观察 加载给定的二进制文件至IDA Pro中后可以注意到某些特定函数调用模式以及数据结构定义。这些特征有助于缩小搜索范围并识别潜在的兴趣点。 #### 动态调试配合静态分析 结合动态调试技术可以在运行时捕获输入输出行为,并对照之前获得的信息验证假设。比如设置断点监控重要API参数传递情况等方法能够有效帮助理解程序逻辑流程[^2]。 #### 寻找加密/混淆手法 很多情况下开发者会对敏感部分采取保护措施如加壳、编码转换或是自定义指令集等方式增加破解难度。此时就需要仔细研究相关片段寻找规律进而还原原始意图。 #### 提交flag获取方式 最终目的是找到如何构造合法请求使得应用程序返回预期结果即Flag值。这可能涉及到解决数学难题、模拟网络协议交互或者是绕过某种安全机制等问题域内的知识应用。 ```python # 示例Python代码用来展示如何自动化处理一些重复性的任务 import subprocess def run_binary_with_input(binary_path, input_data): result = subprocess.run([binary_path], input=input_data.encode(), capture_output=True) return result.stdout.decode() if __name__ == "__main__": binary_file = "path/to/binary" test_string = "example input" output = run_binary_with_input(binary_file, test_string) print(f"Output was:\n{output}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值