解密资产(json/png/lua)

逆向工程 解密
2021-07-07 04:23:49

语境

我正在尝试为学习目的解密游戏的资产。我已经从游戏包中提取了所述资产,它们的格式为.json,.png.lua. 但是,它们是加密的。检查十六进制视图中的文件,我注意到一些特别有趣的事情:它们的所有字节都以 开头4448 4741 4d45 53,在 ascii 中对应于游戏的发行商。

我做了什么

  1. 跑了strings出来,其中一个对游戏的二进制提取所有字符串命令应该是解密密钥

  2. 使用 AES、XXTEA 和 XOR 编写了一个 python 脚本来尝试这些加密资产上的每个可能的密钥。如果解密结果是有效的 json/lua 文本文件,则密钥被验证。

通常仅这两个步骤就可以找到许多其他游戏的关键,但这一次无济于事。

我还可以采取哪些其他步骤来尝试静态解密这些资产,而不必将 gdb 导入运行时?

** 可以在此处找到资产链接https://www.dropbox.com/sh/7pqhvpsa0ems0q9/AAA8lHrudeix3hJ0Rz2tXPSxa?dl=0

1个回答

您仍然可以尝试一些事情,例如在二进制文件上运行signrch以查看它是否具有任何加密算法签名。

此外,对这些文件进行 gzip 压缩会增加它们的大小:

gbl@roran:~/Temp/14102$ ls -l
-rw-r--r-- 1 gbl users 1319 Dez  3 20:40 effect.json
-rw-r--r-- 1 gbl users  119 Dez  3 20:40 version.lua
gbl@roran:~/Temp/14102$ gzip *
gbl@roran:~/Temp/14102$ ls -l
-rw-r--r-- 1 gbl users 1354 Dez  3 20:40 effect.json.gz
-rw-r--r-- 1 gbl users  154 Dez  3 20:40 version.lua.gz

可能暗示它们也被压缩了——但也许不是,因为加密它们应该同样增加它们的熵,这会导致相同的效果。

无论如何,检查您的解密步骤的结果是否有压缩器签名,如果有则解压。

但老实说,反汇编代码、检查4448 4741 4d45 53字符串、引用它的位置,然后从那里开始逆向,可能是唯一的方法。请记住,加密密钥也可能是任何二进制字节序列,甚至是在运行时生成的,因此您不能真正假设使用strings.