如何从Android .apk assets文件夹解压缩LUA脚本?

时间:2016-06-21 01:44:11

标签: android lua reverse-engineering decompiling compression

我正在尝试对Android游戏进行逆向工程,以找出其计算背后的逻辑。

提取.apk文件后,/ assets / lua文件夹中有lua脚本,所有文件都有.lua扩展名。但是,如果使用Text / HEX编辑器打开,则它们不是人类可读的。

例如:this file

所有文件的内容以" droi.lua"结尾。签名,让我觉得这不是一个LUA脚本,而是Android的某种压缩LUA脚本。 Android有一种压缩文件的机制,用于发布目的。

以前有没有人经历过这个?有没有办法让这种文件可读?

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

2 个答案:

答案 0 :(得分:5)

该文件中数据的熵非常高(Shannon熵约为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)

答案 1 :(得分:4)

我会尝试调试它并在加载脚本时暂停应用程序。我假设应用程序在某些时候解密/解压缩/ ...文件并将它们存储在内存中,以便它可以正确地访问/执行它们。如果您设法在正确的位置设置断点,然后搜索应用程序的内存,您应该能够找到它。
这种方法的优点是无论使用何种加密或压缩都无关紧要,您无需了解算法。

我之前没有尝试在Android上做过类似的事情,但我已经在Windows上使用Cheat Engine等工具成功完成了这项工作。
由于版本为Cheat Engine for Android,因此应该相对简单。

另一个想法是使用像Preferences Manager这样的应用程序,并检查是否可以找到任何有趣的内容,如加密密钥或隐藏的开发人员选项,以某种方式使您能够看到未加密的文件内容。