CrackRTFwp 顺便讲讲如何在pe文件中看资源

32位exe,拖进ida

 

 要求输入两次密码,先看第一处

可以看到CryptCreateHash的ALG_ID为0x8004,可知道是sha1,且输入为6位数字大与100000

ALG_ID可在此处查:https://docs.microsoft.com/zh-cn/windows/win32/seccrypto/alg-id

import hashlib
a="@DBApp"
for i in range(100000,999999):
    m=str(i)+a
    c=hashlib.sha1(m.encode())
    if(c.hexdigest()=="6e32d0943418c2c33385bc35a1470250dd8923a9"):
        print(m)

得到第一部分123321

再看第二处

 0x8003,MD5,只知道是六位,难以爆破,不过有另一个函数sub_40100f

可以知道第二次输入密码与资源异或后为dbapp.rft,所以找到对应资源就行了。

a="{\rtf1"
b="x05x7dx41x15x26x01"
flag=""
for i in range(6):
    flag+=chr(ord(a[i])^ord(b[i]))

print(flag)

==================================================================================

下面是如何找资源

==================================================================================

先用010打开

pe文件开头是MS-DOS头,在0x3c处可找到PE文件头40,数据目录表的第三个成员指向资源结构,位于PE头的88h偏移处,在这个文件里位置就是40h+88h=c8h处,此处为2F000,不过因为010好像是以binary形式表现的,所以我用了DIE

 42f000就是资源的根目录处,共三个资源,此处看到的IMAGE_RESOURCE_DIRECTORY_ENTRY结构如下:

看第一个结构的名字为80000118h,可得名字在2f000+118h的位置,

第一个03表示长度,从这就可看出第一个结构就是要找的AAA

继续往下看,OffectToData为 80000028h,80h二进制为10000000b,最高位为1,表示有下一层目录,而低位数28h就是偏移,可得下一层目录为42f028

从此处可看到OffectToData为80000078h,和上面方法相同,找到42f078,

这次没有下层目录了,找到42f0d8,

2f260就是资源的实际位置

 

==================================================================================

对于不想知道原理的,下面是更好的方式(~_~)

==================================================================================

用DIE

 

原文地址:https://www.cnblogs.com/harmonica11/p/12809430.html