如何从Android .apk资产文件夹中解压LUA脚本?

12

我试图逆向工程一款安卓游戏,以找出其计算逻辑。

在提取了.apk文件后,在/assets/lua文件夹中有lua脚本,所有脚本都有.lua扩展名。但是如果使用文本/十六进制编辑器打开,它们就无法被人类读懂。

例如:这个文件

所有文件的内容都以"droi.lua"签名结尾,这让我认为这不是一个LUA脚本,而是某种用于安卓的压缩LUA脚本。而且安卓有一种机制可以压缩发布用的文件。

有人经历过这种情况吗?有办法使这样的文件可读吗?

是否有任何方法/程序可以解压从.apk资产中提取的文件(如png,lua等)?


可能会有帮助。 - Egor Skriptunoff
2个回答

5
该文件中的数据熵非常高(大约为7.98的香农熵,其中8是理论最大值)。我将其与压缩或7zipped文本文件的熵进行比较,得到的熵大约为6到7。
高熵以及它似乎没有任何可识别的头字节,让我认为它很可能是加密的。
如果我是您,我会寻找嵌入应用程序中的对称加密密钥。
如果您感兴趣,这是我用来计算熵的Python脚本:
import sys
import math

print('Calculating entropy of: {}'.format(sys.argv[1]))
with open(sys.argv[1], 'rb') as fp:
    data = fp.read()

# Trim off droi.lua
data = data[:-8]

# Calculate the frequency of each byte value in the file
frequencies = []
for b in range(256):
    ctr = 0
    for byte in data:
        if byte == b:
            ctr += 1
    frequencies.append(float(ctr) / len(data))

# Shannon entropy
ent = 0.0
for freq in frequencies:
    if freq > 0:
        ent = ent + freq * math.log(freq, 2)
ent = -ent

print('Shannon entropy:')
print(ent)

4
我会尝试调试并在应用程序加载脚本后暂停应用程序。我会假设应用程序在某个时候解密/解压缩/...文件并将它们存储在内存中,以便可以正确地访问/执行它们。如果您能够在正确的位置设置断点,然后搜索应用程序的内存,您应该能够找到它。
这种方法的优点是不需要了解算法,也不需要考虑使用了什么类型的加密或压缩。
我以前没有尝试过在Android上做这样的事情,但我已经成功地在Windows上使用像Cheat Engine这样的工具实现了它。
由于Cheat Engine for Android有一个版本,所以这应该相对简单。
另一个想法是使用像Preferences Manager这样的应用程序,并检查是否可以找到任何有趣的东西,例如加密密钥或可能启用您查看未加密文件内容的隐藏开发人员选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接