我正在尝试解密一个使用密钥加密的 lua 文件。LUA 文件的一些背景。它来自一个android游戏,我反编译了APK,发现所有的lua文件都被加密了。
游戏是在一个名为 Coco2D 的引擎中制作的,它允许开发人员使用密钥加密他们的文件。在做了一些研究之后,我发现您可以使用 IDA 查看 SO 文件的二进制文件并在名为 ApplicationDidFinishLaunching 的函数中查找加密密钥。我试过了,但我不太确定我在那个函数中寻找什么。
来自 ApplicationDidFinish 函数的 IDA 文本:https : //pastebin.com/9h69PADF
在函数顶部附近,您可以看到这些变量集
.text:00404100 var_90 = -0x90
.text:00404100 var_84 = -0x84
.text:00404100 var_80 = -0x80
.text:00404100 var_7C = -0x7C
.text:00404100 var_74 = -0x74
.text:00404100 var_70 = -0x70
.text:00404100 var_6C = -0x6C
.text:00404100 var_68 = -0x68
.text:00404100 var_64 = -0x64
.text:00404100 var_60 = -0x60
.text:00404100 var_5C = -0x5C
.text:00404100 var_3C = -0x3C
我不确定上述变量代表什么,但我不认为它们代表密钥,因为密钥是编码为十六进制的 128 位字符串。
加密密钥示例:https : //static.packt-cdn.com/products/9781783284757/graphics/B0561_11_01.jpg
经过更多挖掘,我在函数https://pastebin.com/N44prr2N 中找到了这一部分
此部分包括 32 个十六进制数字,其中包含 DCB 5 和 DCB 4 的中断。我认为这很可能是关键,但我不确定如何将粘贴箱中的内容组装到 128 位密钥。我也不知道 DCB 是什么(一秒钟后将对其进行研究),我不知道为什么该部分中有 5 和 4 的中断。
我上网找到了一个 Hex to Ascii Converter,发现十六进制数字确实可以转换为 Ascii。7C 转换为 | 和 78 就像评论所暗示的那样转换为 X 但我现在遇到的问题是 0xC 等十六进制值不会转换为 Ascii 值。
APK 链接:https : //apkpure.com/taptap-heroes/com.westbund.heros.en 加密 Lua 文件链接 + SO:https : //www.mediafire.com/file/5ypqt5tk0scjwb5/LuaEncrypted.rar/文件
编辑:在查看函数的伪代码后,我没有发现使用 XTEA 密钥的迹象(我可能错了)。虽然我确实发现 RSA 结束编码用于 Lua 文件。如果它使用 RSA,我仍然不知道什么或如何解码它。
RSA 链接:https : //pastebin.com/quNJNzYd