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

mar*_*bse 12 compression lua android decompiling reverse-engineering

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

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

例如:这个文件

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

有谁之前经历过这个吗?有没有办法让这种文件可读?

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

小智 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)
Run Code Online (Sandbox Code Playgroud)