求大佬帮忙指导一下解密

加密文件先用16进制看了,同后缀文件有前几个字节是相同的,


所有加密文件尾部有固定的4个魔数AF BF CF DF
lib文件夹里有libcocos2djs.so文件,用ida分析了一下,看起来是xxtea加密,在函数AppDelegate::applicationDidFinishLaunching 有密钥的信息,

喂给ai,说密钥就是zz-11-27072230,但是xxtea密钥是16字节,

把找到一些和xxtea相关的函数jsb_set_xxtea_key(std::string const&)cocos2d::FileUtils::isxxtea(uchar const*,long)(以魔数判断是否xxtea加密,但是我没找到哪个函数加的魔数)、xxtea_encryptxxtea_decrypt把这些连同其中参数都喂给ai,

分析的结果是密钥直接用0填充是zz-11-2707223000,加密前的数据是原始数据+用0填充到4字节整数倍+4字节原始数据长度(这里我理解的可能有问题)
用ai以此写了几个版本解密的py代码,结果都没解出来
小白不会hook,ida也是刚学,反复折腾几天也没搞出来,求各位大佬帮忙指点一下

样本和so.zip (9.7 MB)

直接frida查png的open更快一些。

if __name__ == '__main__':
    import sys
    with open(sys.argv[1], 'rb') as f:
        con = f.read()

    enc = con[:-4] # AF BF CF DF
    rev = enc[::-1]
    dec = bytearray(len(rev))
    for i in range(len(rev)):
        dec[i] = rev[i] ^ 0x62
        
    with open('dec', 'wb') as f:
        f.write(dec)
1 个赞

另外,记得带上游戏名会更好。

多谢大佬,原来不是xxtea加密,是异或加密,不过没想到还可以字节反转 :melting_face: ,被cocos2d::FileUtils::isxxtea(uchar const*,long)这个函数迷惑了

游戏名是铁杆三国,其实游戏资源与之前论坛里的赤B三国是差不多的,不过我第一次用ida解密,就想看下密钥到底是什么,结果搞半天一开始研究方向就错了 :smiling_face_with_tear: