老虎机游戏 老虎机游戏 逆向某cocos2d棋牌游戏lua及资源文件解密
你的位置:老虎机游戏 > 博彩问答 >

老虎机游戏 逆向某cocos2d棋牌游戏lua及资源文件解密

发布日期:2022-03-22 13:42    点击次数:214

老虎机游戏 逆向某cocos2d棋牌游戏lua及资源文件解密

受人所托,逆向一个app。首先查看apk的结构,可以发现游戏的图片和控制逻辑的lua文件都被加密了。游戏引擎是cocos2d,而所有被加密的文件头都是固定的ge2d8!ga*sgf1z99这几个字符,由此推断是xxtea加密。

这种加密在网上流传的破解工具已经很多了老虎机游戏,无非是打开so文件找到附近的key值直接解密。所以我也先尝试下能不能直接解密出来,用ultraEdit打开so搜索到附近确实有key值。

接着百度上搜一个xxtea的解密工具把sign和key值填进去,但是出来的文件却还是乱码。

到这里肯定还存在二次加密,或者加密方式不是xxtea。使用ida工具,搜索刚刚的sign,然后跳转到交叉引用,可以发现有很多干扰的地方,经过排查之后跳转到readFile的函数处,这里能够发现调用了xxtea的解密函数,初步判断应该就是在这里进行解密的。然后仔细阅读一下伪代码观察一下代码的逻辑。

由于逻辑比较简单所以在这里可以直接抄表写个脚本进行解码,无非就是键值和索引的相互映射。假如在这里的逻辑非常复杂的话,还可以发现解密后的文件内容放在了malloc出来的内存区域中,这里也可以考虑hook下面的memcpy函数,能够直接拿到文件的内容,不过命名就很麻烦了。总之看实际的需要,这里简单就直接把表抄下来,然后写了一个python脚本解密。
import os def DecryptFile(path): global keyArray f = open(path,'rb') data = (bytearray)(f.read()) f.close() for i in range(len(data)): data[i] = keyArray[(int)(data[i])] data = bytes(data) with open(path,'wb') as f: f.write(data) def DecryptFolders(path): p = os.listdir(path) for each in p: name = path + '\\' + each if os.path.isdir(name): DecryptFolders(name) else: print(each) DecryptFile(name) keyArray = [0x3C, 0x95, 0xC8, 0x28, 0x10, 0x6D, 0x85, 0x60, 0x59,\ 3, 0xB3, 0x4C, 0x76, 0x49, 0x48, 0x96, 0xB8, 0x5F,\ 0xB7, 0x79, 0xC4, 0x64, 0x71, 0x2E, 0x38, 0x8C, 0xAC,\ 0xA7, 0x91, 0x72, 0x63, 0x80, 0xB0, 0x9E, 0x33, 0x4B,\ 0xAE, 0xF3, 0x8B, 0x7B, 0x4D, 0x5B, 0xB4, 0x52, 0xEC,\ 0x6F, 0xE0, 0xCF, 0xAD, 0xC3, 0x20, 0xAB, 0xEA, 0x67,\ 0xDC, 5, 0, 0x9F, 0x40, 0x56, 0xD6, 0xFB, 0xFC, 0x24,\ 0x92, 0xCA, 0xB, 0x3D, 0x46, 0xD, 0xF0, 0x4A, 0x5A,\ 0x55, 0x11, 0x1A, 0x3B, 0x8A, 0xBC, 0x7D, 0x6C, 0xE7,\ 0xA9, 0x13, 0x75, 0xCE, 0x61, 0x30, 0x14, 0xA6, 0x6A,\ 0x27, 7, 0xD0, 0x54, 0x9C, 0x5C, 0x8E, 0x89, 0xD8,\ 0x58, 1, 0xC2, 0x34, 0xE8, 0x69, 0x35, 0x2F, 0xC0,\ 0x2A, 0xA0, 0x50, 0x36, 0x88, 0xFF, 0x39, 0x1D, 0x68,\ 0xE, 0xC, 0x93, 0xE6, 0xB1, 0xFE, 0x18, 0x7F, 0x6E,\ 0xB6, 0x78, 0x53, 0x31, 0x2B, 0xE9, 0xD2, 0xF5, 0x29,\ 0xF, 0x2C, 0x17, 0x84, 0xDE, 0xDB, 0xD9, 0x41, 6, 0x19,\ 0xF7, 0xA1, 0x99, 0xA8, 0x45, 0x7A, 0x3E, 0x23, 0xA5,\ 0x1B, 0xAF, 0xA, 0xAA, 0xE5, 0xEF, 0xA4, 0xE1, 0xF8,\ 0xFA, 0x82, 0x3A, 0x9A, 0xDF, 0x8F, 0x1C, 0x65, 0xC7,\ 0x73, 0xD1, 0xC1, 0xC5, 0xD7, 0xA2, 0x5E, 0x87, 0xDD,\ 0x9D, 0x8D, 0xF9, 0xC9, 0x81, 0xCD, 0x90, 0x97, 0xEE,\ 0x66, 0xDA, 0x4F, 0x42, 0x3F, 0xC6, 0x74, 8, 0x37,\ 0x25, 0xCB, 0x77, 0x26, 0xE3, 0x83, 0x32, 0xB9, 0xBD,\ 0xD3, 0xF2, 0x44, 0xD5, 0x4E, 0x2D, 0xBA, 0x62, 0x98,\ 4, 0x1E, 0x12, 0x21, 0xE4, 0xBF, 0x47, 0xF6, 0x86,\ 0xF4, 0xFD, 0x94, 0x16, 0xA3, 0xEB, 0x1F, 0x70, 0x7C,\ 0xB2, 0x51, 2, 0x43, 0x22, 0x15, 0xCC, 0x7E, 9, 0x6B,\ 0xE2, 0x5D, 0xBB, 0x9B, 0xBE, 0xB5, 0xD4, 0xED, 0x57,\ 0xF1] path = 'C:\\Users\\asus\\Desktop\\out' DecryptFolders(path) 最终运行成功解密,lua脚本和图片都成功获取了。



友情链接:

TOP