CrackRTF

image-20231227230247505

函数atoi将输入的字符串化为整型,同时限定了v7为长度为6的字符串,因此我门可以尝试爆破,sub_401230有标识符0x8004u,判断为sha1

1
2
3
4
5
6
7
8
9
10
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

passwd(2)只限定了输入的长度,有 95^6种可能 (可见字符),显然无法直接爆破。

image-20231230222606143

sub_4014D0我们发现了

hResInfo = FindResourceA(0, (LPCSTR)0x65, "AAA");

  1. 0,资源在与当前进程关联的可执行文件
  2. 0x65,资源的名称。int(0x65)=101
  3. “AAA”,资源类型
  4. 返回资源的句柄

用ResourceHacker打开exe文件

image-20231230222026583

将字符串与str进行循环异或

image-20231230224121440

紧接着创建了一个rtf文件,将异或后的字符串写入
刚开始不是很理解,在看了师傅的wp后。如果要让此rtf文件可用,那么文件头必须是特定格式

image-20231230225417284

rtf文件头为`{\rtf1,我们只需求出str前六个字符即可

1
2
3
4
5
6
head='{\\rtf1'
key=[0x05,0x7D,0x41,0x15,0x26,0x01 ]
flag=''
for i in range(0,6):
flag+=chr(key[i]^ord(head[i]))
print(flag)

输出~!3a@0

image-20231230230333816