CTF-All-In-One 项目解析:DefcampCTF2015 entry_language 逆向挑战

CTF-All-In-One 项目解析:DefcampCTF2015 entry_language 逆向挑战

CTF-All-In-One CTF竞赛权威指南 CTF-All-In-One 项目地址: https://gitcode.com/gh_mirrors/ct/CTF-All-In-One

题目概述

entry_language 是 Defcamp CTF 2015 的一道逆向工程题目,属于典型的密码验证类挑战。题目提供了一个 ELF 64 位可执行文件,要求参赛者通过逆向分析找到正确的密码。

文件分析

首先我们检查文件基本信息:

$ file entry_language
entry_language: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=0f464824cc8ee321ef9a80a799c70b1b6aec8168, stripped

这是一个去除了符号表的 64 位 ELF 可执行文件,运行时会提示用户输入密码:

$ ./entry_language
Enter the password: test
Incorrect password!

传统逆向分析方法

主函数分析

使用逆向工具分析主函数,可以看到程序的主要逻辑:

  1. 打印提示信息"Enter the password: "
  2. 使用fgets获取用户输入
  3. 调用验证函数检查密码
  4. 根据验证结果输出"Nice!"或"Incorrect password!"

关键验证函数

验证函数位于0x004006fd,其核心逻辑可以简化为以下伪代码:

int verify(char *input) {
    char *str_1 = "Dufhbmf";
    char *str_2 = "pG`imos";
    char *str_3 = "ewUglpt";
    
    for (int i = 0; i <= 11; i++) {
        int index = i % 3;
        int offset = 2 * (i / 3);
        if (str[index][offset] - input[i] != 1) {
            return 1; // 验证失败
        }
    }
    return 0; // 验证成功
}

密码生成算法

通过分析验证逻辑,我们可以逆向推导出密码生成算法:

  1. 密码长度为12个字符
  2. 使用三个固定字符串作为基础:"Dufhbmf"、"pG`imos"、"ewUglpt"
  3. 每个字符的生成规则:从对应字符串的特定位置取字符,然后将其ASCII值减1

实现代码如下:

str_list = ["Dufhbmf", "pG`imos", "ewUglpt"]
password = []
for i in range(12):
    # 计算使用哪个字符串
    str_index = i % 3
    # 计算字符串中的偏移量
    char_offset = 2 * (i // 3)
    # 获取字符并减1
    password.append(chr(ord(str_list[str_index][char_offset]) - 1))
print(''.join(password))

运行后将得到正确密码:"Code_Talkers"

使用Angr自动化分析

传统逆向方法需要理解算法逻辑,而使用符号执行工具Angr可以更高效地解决问题,无需深入分析验证逻辑。

Angr解决方案

import angr

# 加载二进制文件
project = angr.Project("entry_language", auto_load_libs=False)

# 定义hook函数,在验证成功的位置打印输入
@project.hook(0x400844)
def print_flag(state):
    print("FLAG SHOULD BE:", state.posix.dump_fd(0))
    project.terminate_execution()

# 开始执行
project.execute()

Angr工作原理

  1. 创建项目对象,加载二进制文件
  2. 在验证成功的位置(0x400844)设置hook
  3. 当执行流到达该位置时,打印此时的输入内容
  4. 终止执行

Angr会自动探索可能的执行路径,找到能够到达目标地址的输入,大大简化了逆向过程。

技术要点总结

  1. 逆向分析基础:理解程序的控制流和数据流是逆向工程的核心
  2. 算法逆向:通过分析验证逻辑,推导出密码生成算法
  3. 符号执行:使用Angr等工具可以自动化路径探索,特别适合解决这类验证问题
  4. 效率对比:传统方法需要深入理解算法,而符号执行工具可以"暴力"解决问题

扩展思考

  1. 如何加强这类密码验证程序的防护,使其难以被逆向?
  2. 符号执行工具的局限性是什么?在什么情况下传统逆向方法更有效?
  3. 在实际CTF比赛中,如何根据题目特点选择最合适的解题方法?

这道题目展示了逆向工程中两种不同的解题思路,对于初学者理解逆向分析和自动化工具的使用都有很好的示范作用。

CTF-All-In-One CTF竞赛权威指南 CTF-All-In-One 项目地址: https://gitcode.com/gh_mirrors/ct/CTF-All-In-One

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农鸽望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值