我正在尝试对Android游戏进行逆向工程,以找出其计算背后的逻辑。
提取.apk文件后,/ assets / lua文件夹中有lua脚本,所有文件都有.lua扩展名。但是,如果使用Text / HEX编辑器打开,则它们不是人类可读的。
例如:this file
所有文件的内容以" droi.lua"结尾。签名,让我觉得这不是一个LUA脚本,而是Android的某种压缩LUA脚本。 Android有一种压缩文件的机制,用于发布目的。
以前有没有人经历过这个?有没有办法让这种文件可读?
是否有任何方法/程序可以解压缩从.apk资产中提取的文件(例如png,lua等)?
答案 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这样的应用程序,并检查是否可以找到任何有趣的内容,如加密密钥或隐藏的开发人员选项,以某种方式使您能够看到未加密的文件内容。