美文网首页
BUUCTF re:CrackRTF

BUUCTF re:CrackRTF

作者: hefengzeng | 来源:发表于2020-01-11 12:06 被阅读0次

    ida打开,看main函数:


    main

    可以看到逻辑是输入两次密码,第一次密码验证后,再输入一次
    第一次输入6位字符,存到pbData,然后pbData拼接上@DBApp再sub_40100A加密
    加密结果和6E32D0943418C2C33385BC35A1470250DD8923A9比对
    比对成功后,第二次同样输入6位,存到String,String拼接上pbData再sub_401019加密
    加密结果和27019e688a4e62a649fd99cadaafdb4e比对,
    比对成功后,再进一个if判断:String传入sub_40100F,才算结束

    先看第一个加密函数sub_40100A:

    sub_40100A
    啊,好多hash,第二个参数是0x8004u(一般第二个参数是加密的方式)
    6E32D0943418C2C33385BC35A1470250DD8923A9又是40位,我就去常用的somd5试了一下,还真得到了结果:123321
    好,第一部分输入时123321,再看第二个加密函数sub_401019:
    sub_401019
    也是hash,第二个参数是0x8003u,但这次加密的String有18位,网站没爆出来,我觉得我们自己也不用想了。
    然后,然后我就去找大佬们的wp了
    然后我就看到这个函数出不来密码也不要紧,去看那个if!
    hao,我们看if里的那个sub_40100F:
    sub_40100F
    大概逻辑就是,从AAA里提数据,和lpString(main传入的String)一起,传入函数sub_401005:
    sub_401005
    熟悉的异或操作
    所以我们现在需要去知道AAA的前6位,和dbapp.rtf的前6位
    dbapp.rtf的前6位好办,虽然没有给dbapp.rtf,但前6位肯定是在文件头部分,任意找一个.rtf文件即可获得,我就直接搜索.rtf文件头:{\rtf,都是前5位的,最后是在一位大佬wp里找到了6位(大佬自己建了一个rtf文件来看头)
    http://leehung.cn/2019/11/02/crackrtf/
    rtf文件头
    rtf前6位:{\rtf1
    AAA的前6位,则需要用一个ResourceHacker的工具查看
    AAA
    写脚本写脚本:
    rtft = '{\\rtf1'
    aaa = [0x05,0x7D,0x41,0x15,0x26,0x01]
    pass2 = ''
    for i in range(6):
        pass2 = pass2 + chr(ord(rtft[i])^aaa[i])
    print(pass2)
    

    得到第二部分密码:~!3a@0

    运行exe,得到dbapp.rtf,打开得到flag flag

    flag{N0_M0re_Free_Bugs}

    相关文章

      网友评论

          本文标题:BUUCTF re:CrackRTF

          本文链接:https://www.haomeiwen.com/subject/sdomactx.html