我正在尝试对Android游戏进行逆向工程,以找出其计算背后的逻辑。
提取.apk文件后,/ assets / lua文件夹中有lua脚本,所有文件都有.lua扩展名。但是,如果使用Text / HEX编辑器打开,则它们不是人类可读的。
例如: 这个文件
所有文件的内容以“droi.lua”签名结尾,让我觉得这不是一个LUA脚本,而是一些Android的压缩LUA脚本。 Android有一种压缩文件的机制用于发布目的。
有谁之前经历过这个吗?有没有办法让这种文件可读?
是否有任何方法/程序来解压缩.apk资产(例如png,lua等)中的文件?
该文件中的数据的熵非常高(香农熵约为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)
我会尝试调试它并在加载脚本时暂停应用程序。我假设应用程序在某些时候解密/解压缩/ ...文件并将它们存储在内存中,以便它可以正确访问/执行它们。如果您设法在正确的位置设置断点,然后搜索应用程序的内存,您应该能够找到它。
这种方法的优点是无论使用何种加密或压缩都无关紧要,您无需了解算法。
我之前没有尝试在Android上做过类似的事情,但我已经在Windows上用Cheat Engine等工具成功完成了。
由于有一个版本 Android的作弊引擎 这应该相对简单。
另一个想法是使用类似的应用程序 偏好管理员 并检查您是否可以找到任何有趣的加密密钥或隐藏的开发人员选项,以某种方式使您能够看到未加密的文件内容。