如何从 Android .apk 资产文件夹中解压缩 LUA 脚本?
Posted
技术标签:
【中文标题】如何从 Android .apk 资产文件夹中解压缩 LUA 脚本?【英文标题】:How to decompress LUA script from Android .apk assets folder? 【发布时间】:2016-10-22 09:42:59 【问题描述】:我正在尝试对一款 android 游戏进行逆向工程,以找出其计算背后的逻辑。
.apk 文件解压后,/assets/lua 文件夹中有 lua 脚本,它们都有 .lua 扩展名。但是,如果使用 Text/HEX 编辑器打开,它们是不可读的。
例如:this file
所有文件的内容都以“droi.lua”签名结尾,让我觉得这不是一个 LUA 脚本,而是某种用于 Android 的压缩 LUA 脚本。 Android 有一种机制来压缩文件以用于发布目的。
以前有人经历过吗?有没有办法让这样的文件可读?
有没有什么方法/程序可以解压从.apk资产中提取的文件(如png、lua等)?
【问题讨论】:
May be helpful 【参考方案1】:该文件中数据的熵非常高(香农熵约为 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)
【讨论】:
【参考方案2】:我会尝试调试它并在加载脚本后暂停应用程序。我会假设该应用程序会在某个时候解密/解压缩/...文件并将它们存储在内存中,以便它可以正确访问/执行它们。如果你设法在正确的位置设置断点,然后搜索应用程序的内存,你应该能够找到它。 这种方法的优点是,无论使用哪种加密或压缩方式,都无需了解算法。
我之前没有尝试在 Android 上做类似的事情,但我已经使用 Cheat Engine 等工具在 Windows 上成功完成了。 既然有Cheat Engine for Android这个版本,应该比较简单。
另一个想法是使用Preferences Manager 之类的应用程序并检查您是否可以找到任何有趣的东西,例如加密密钥或隐藏的开发人员选项,以某种方式让您能够看到未加密的文件内容。
【讨论】:
以上是关于如何从 Android .apk 资产文件夹中解压缩 LUA 脚本?的主要内容,如果未能解决你的问题,请参考以下文章