• 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

     

  • 相关阅读:
    android部分控件应用解析
    CodeForces Round #179 (295A)
    面试题27:连续子数组的最大和
    java写文件时,输出不完整的原因以及解决方法
    序列化和反序列化--转
    Java多线程编程那些事:volatile解惑--转
    转变--一个平凡人的2017年总结及2018年展望
    系列文章--批处理学习
    set命令
    bat计算两个时间差
  • 原文地址:https://www.cnblogs.com/harmonica11/p/12809430.html
Copyright © 2020-2023  润新知