IDA已注释附件
第一步、查壳
如下可见,没有加壳
第二步 、运行
发现这是一个猜测密码的游戏,别着急,往后看下一步
第三步、IDA
F5反汇编
流程如图注释所示
sub_40100A是一个加密函数,我们进入函数查看一下
查阅资料,看注释
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
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的资源,但是暂时还不知道这是什么
通过如图注释的分析,继续看下面的sub_401005函数
最后如上图,资源的每一字节和第二段6字节的密码的每字节循环异或,异或结束之后,生成一个rtf文件,所以我们要用010Editor或者Hex查看rtf文件的标志位,前6字节是{\rtf1
再看ResourceHacker工具打开.exe文件查看资源,发现确实有AAA的资源的前6字节
由于异或是可逆的,所以直接再写个异或脚本即可(狗头保命,借鉴大佬的脚本):
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博客
再写是因为自己再复现了一遍,希望加深印象,增强理解
如有错误,欢迎感谢支出,并参与讨论。
借鉴引用注明出处,谢谢理解!