点开要求输入密码,拖入IDA查看,查看strings看样子没有加壳,进入passwd字符查看

buuctf CrackRTF_加壳

 

 输入一个长度为6的字符串,atoi函数是一个把字符串转换成整数型的函数,strcat在6位字符串后加上@DBApp

buuctf CrackRTF_加壳_02

猜测sub_40100A是一个加密函数

进入查看

buuctf CrackRTF_microsoft_03

 

 查看https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptcreatehash

buuctf CrackRTF_.net_04

 

 buuctf CrackRTF_字符串_05

 

 查阅https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id

发现使用的哈希算法是

buuctf CrackRTF_哈希算法_06

 

 https://www.jb51.net/article/186188.htm

python的SHA_1加密实现

 1 import hashlib
 2 partflag = '@DBApp'
 3 flag = ''
 4 for i in range(100000,999999):
 5     flag = str(i)+partflag
 6     hexflag = hashlib.sha1(flag.encode())
 7     hexflag = hexflag.hexdigest()
 8     if "6e32d0943418c2c33385bc35a1470250dd8923a9" == hexflag:   //将原文大写英文字母转换成小写
 9         print(flag)
10         break

123321@DBApp

buuctf CrackRTF_字符串_07

 

 第二次输入

buuctf CrackRTF_.net_08

 

 将123321@DBApp加在了输入的6位字符串的后面

buuctf CrackRTF_加壳_09

 

 再经过sub_401019加密,进入查看

buuctf CrackRTF_microsoft_10

 

 加密方式是MD5

buuctf CrackRTF_哈希算法_11

 

 在线解密

buuctf CrackRTF_加壳_12

 

 得到一个.rtf的文件,打开得到FLAG