0

Я пытаюсь перепроектировать игру Android, чтобы узнать логику их расчета.Как распаковать LUA-скрипт из папки Android .apk assets?

После извлечения файла .apk в каталоге/assets/lua есть сценарий lua, и все они имеют расширение .lua. Однако, если они открыты с помощью редактора Text/HEX, они не читаются человеком.

Например: this file

Содержание всех файлов заканчивается «droi.lua» подпись, заставил меня думать, что это не сценарий LUA, но какое-то сжатый LUA скрипта для Android. И у Android есть механизм сжатия файла для публикации.

Неужели кто-нибудь испытал это раньше? Есть ли способ сделать такой файл доступным для чтения?

Есть ли какой-либо метод/программа для распаковки файлов, выделенных из .apk-активов (например, png, lua и т. Д.)?

ответ

0

Энтропия данных в этом файле очень велика (энтропия Шеннона около 7.98, где 8 - теоретический максимум). Я сравнил это с энтропией текстового файла с застежкой-молнией или 7zip и получил энтропии больше, чем от 6 до 7.

Высокая энтропия, в сочетании с тем, что она, кажется, не имеет идентификационных байт заголовка для меня это, вероятно, зашифровано.

Если бы я был вами, я бы искал симметричный ключ шифрования, встроенный в приложение.

Если вы заинтересованы, вот питон скрипт я использовал для расчета энтропии:

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) 
Смежные вопросы