BUUCTF-CrackRTF(Reverse逆向)

简介: 本文介绍了BUUCTF中的CrackRTF题目解题过程。首先确认程序未加壳,运行后发现是一个猜密码游戏。通过IDA反汇编分析,找到加密函数并构造爆破代码,成功破解第一段密码。接着利用ResourceHacker查看资源,结合异或运算破解第二段密码。最终输入两段密码后生成带有flag的rtf文件,得到flag为`flag{N0_M0re_Free_Bugs}`。文中详细记录了每一步的操作和分析过程。

IDA已注释附件

BUUCTF-CrackRTF.idb

第一步、查壳

如下可见,没有加壳

image.png

第二步 、运行

发现这是一个猜测密码的游戏,别着急,往后看下一步

image.png

第三步、IDA

F5反汇编

image.png

流程如图注释所示

sub_40100A是一个加密函数,我们进入函数查看一下

查阅资料,看注释

image.png

BOOL CryptCreateHash(
HCRYPTPROV hProv,
ALG_ID Algid,
HCRYPTKEY hKey,
DWORD dwFlags,
HCRYPTHASH *phHash
);

构造爆破代码(狗头保命,借鉴大佬的代码)

import hashlib
string='@DBApp'
for i in range(100000,999999):
    flag=str(i)+string
    x = hashlib.sha1(flag.encode("utf8"))
    y = x.hexdigest()
    if "6e32d0943418c2c33385bc35a1470250dd8923a9" == y:
            print(flag)
            break

运行出来的结果是123321@DBApp

然后,根据上面图片所写的注释可以知道,后面还要输入一次密码,进行一样的操作,sub_401019是与**

sub_40100A**一样的加密函数,但是由于这次并没有给其他的限定条件,所以无法直接爆破出来。

看函数sub_40100F

image.png

HRSRC FindResourceA(
HMODULE hModule,
LPCSTR lpName,
LPCSTR lpType
);
FindResourceA function
Determines the location of a resource with the specified type and name in the specified module.
确定具有指定类型和名称的资源在指定模块中的位置。
hModule:处理包含资源的可执行文件的模块。NULL值则指定模块句柄指向操作系统通常情况下创建最近过程的相关位图文件。
lpName:指定资源名称。
lpType:指定资源类型。
返回值:如果函数运行成功,那么返回值为指向被指定资源信息块的句柄。为了获得这些资源,将这个句柄传递给LoadResource函数。如果函数运行失败,则返回值为NULL。

我们用ResourceHacker工具打开.exe文件查看资源,发现确实有AAA的资源,但是暂时还不知道这是什么

image.png

通过如图注释的分析,继续看下面的sub_401005函数

image.png

最后如上图,资源的每一字节和第二段6字节的密码的每字节循环异或,异或结束之后,生成一个rtf文件,所以我们要用010Editor或者Hex查看rtf文件的标志位,前6字节是{\rtf1

image.png

再看ResourceHacker工具打开.exe文件查看资源,发现确实有AAA的资源的前6字节

image.png

由于异或是可逆的,所以直接再写个异或脚本即可(狗头保命,借鉴大佬的脚本):

rtf = '{\\rtf1' \\需要注意,\r需要转义,变成\\r
A = [0x05, 0x7D, 0x41, 0x15, 0x26, 0x01]
password=''
for i in range(len(rtf)):
    x = ord(rtf[i]) ^ A[i]
    password+=chr(x)
print(password)

直接输出结果就是第二段的密码:~!3a@0

两端密码输入完后,就会在程序所在文件夹中生成一个带有flag的rtf文件,打开就能得到flag
flag为flag{N0_M0re_Free_Bugs}

总结

最后,声明下我借鉴的文章:(29条消息) BUUCTF reverse:CrackRTF_Lk k k的博客-CSDN博客

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

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

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

相关文章
|
1天前
|
算法 安全 数据安全/隐私保护
BUUCTF-[2019红帽杯]easyRE(Reverse逆向)
本文详细介绍了对一个无壳的64位ELF文件进行逆向分析的过程。首先通过IDA查找关键字符串定位主函数,然后逐步分析函数逻辑,包括读取输入、异或操作等。接着通过多次Base64解码和异或操作,最终得到了关键的flag。整个过程涉及数组寻址、条件判断和函数调用等技术细节,展示了CTF竞赛中常见的逆向工程技巧。最后附上了完整的Python代码实现,帮助读者理解和复现。
9 1
BUUCTF-[2019红帽杯]easyRE(Reverse逆向)
|
1天前
|
安全 数据安全/隐私保护 Python
BUUCTF-[GUET-CTF2019]re(Reverse逆向)
本文介绍了如何对一个带有UPX壳的ELF文件进行逆向分析。首先通过010Editor确认文件类型和壳的存在,接着使用Free UPX工具进行脱壳。脱壳后在IDA中加载文件,通过字符串查找和交叉引用跟踪定位关键函数。最终利用Python的z3库解决约束问题,得到flag。过程中还遇到了Python版本兼容性问题,并通过重新安装z3-solver解决。最终flag为`flag{e165421110ba03099a1c039337}`,经MD5解密验证为`233`。
7 0
BUUCTF-[GUET-CTF2019]re(Reverse逆向)
|
7月前
|
信息无障碍
BUUCTF [WUSTCTF2020]find_me 1
BUUCTF [WUSTCTF2020]find_me 1
114 0
BUUCTF---内涵的软件(reverse)
BUUCTF---内涵的软件(reverse)
BUUCTF---新年快乐(reverse)
BUUCTF---新年快乐(reverse)
攻防世界---reverse_re3
攻防世界---reverse_re3
|
存储 JavaScript 数据安全/隐私保护
babycrypt 自己出的第一道逆向题目 WP
babycrypt 自己出的第一道逆向题目 WP
47 1
|
算法 测试技术
算法强化每日一题--倒置字符串
算法强化每日一题--倒置字符串
BUUCTF--Reverse--easyre(非常简单的逆向)WP
BUUCTF--Reverse--easyre(非常简单的逆向)WP
|
数据安全/隐私保护
BUGKU CTF (reverse篇)
bugku ctf练习平台
384 0
BUGKU CTF (reverse篇)