0

나는 안드로이드 게임을 리버스 엔지니어링하여 계산 과정의 논리를 찾으려고합니다.Android .apk assets 폴더에서 LUA 스크립트의 압축을 푸는 방법은 무엇입니까?

.apk 파일을 추출한 후/assets/lua 폴더에 lua 스크립트가 있으며 그 모두에 .lua 확장자가 있습니다. 그러나 Text/HEX 편집기로 열면 사람이 읽을 수 없습니다. 예를 들어

는 : this file 모든 파일의 내용은 "droi.lua"서명으로 끝

날이가 LUA 스크립트하지만 안드로이드에 대한 압축 LUA 스크립트의 일종 아니라고 생각했다. 그리고 안드로이드는 출판 목적으로 파일을 압축하는 메커니즘을 가지고 있습니다.

누구나 전에 경험 했습니까? 이러한 파일을 읽을 수있는 방법이 있습니까?

.apk 자산 (예 : png, lua 등)에서 추가 파일을 압축 해제하는 방법/프로그램이 있습니까?

답변

0

해당 파일의 데이터 엔트로피가 매우 높습니다 (대략 7.98의 섀넌 엔트로피, 8은 이론상의 최대 값입니다). 이것을 zip 또는 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) 
: 당신이 관심이 있다면

, 여기에 내가 엔트로피를 계산하는 데 사용되는 파이썬 스크립트입니다