Что нужно?
Как не странно - нам понадобится apk нашего приложения
Так же для автоматизации процесса понадобится немного собственного софта. Я предпочитаю использовать питон
Среда для разработки, у меня это vs-code
Любой 16-ричный редактор, у меня это расширение для vs code
Let`s start!
Для начала посмотрим что мы вообще имеем
APK файлы представляют из себя самый обычный zip архив, который можно открыть любым архиватором. Распакуем файлы в какую нибудь папку

Бегло пробежав по файлам можно обнаружить файлы с кодом на lua

Открыть эти файлы просто так не получится - они зашифрованы. Но все эти файлы объеденяет одно - слово signatr в самом начале. Пока что отложим эту информацию и пойдем дальше

Зайдем в папку lib и перейдем к нужной архитектуре - я обнаружил один единственный .so файл

Попробуем просмотреть его через hex-редактор

Много непонятного текста, но если полистать ниже - можно найти читаемые строки!
Введем в поиск слово которое получили ранее - signatr

Слева от этого результата есть непримечательное слово. Чтож, это слово - это наш ключ шифрования. Давайте попробуем им воспользоваться
Напишу простой скрипт на питоне для дешифровки методом xxtea
import xxtea # pip install xxtea file = 'client.luac' sign = 'signatr' key = 'anyxteakey' with open(file, 'rb') as f: filedata = f.read() filedata = filedata[len(sign):] # обрежем начало файла чтоб убрать 'signatr' data = xxtea.decrypt(filedata, key) # Дешифруем ключом with open('test.lua', 'wb') as f: f.write(data)
Запустим скрипт и получим файл test.lua

Все сработало! Мы получили расшифрованный файл
Осталось только сделать обертку для скрипта декодирования и реализовать рекурсивное декодирование в папках
import os import xxtea sign = 'signatr' key = 'anyxteakey' def recursive_decrypt(directory): files = os.listdir(directory) for f in files: if os.path.isdir(directory + "/" + f): recursive_decrypt(directory + "/" + f) else: if f.endswith(".luac"): print("Decrypting", f) data = b"" with open(directory + "/" + f, "rb") as file: data = file.read()[len(sign):] decrypted = xxtea.decrypt(data, key) if decrypted: with open(directory + "/" + f[:-1], "wb") as file: file.write(decrypted) os.remove(directory + "/" + f) else: print("Failed to decrypt", f)
От себя я так же добавил функцию очистки, что бы убрать пустые папки и не lua файлы
import shutil def post_clean(directory): # delete all not lua files ls = os.listdir(directory) if not ls: shutil.rmtree(directory) print("Removed", directory) return for file in os.listdir(directory): if os.path.isdir(directory + "/" + file): post_clean(directory + "/" + file) elif not file.endswith(".lua"): os.remove(os.path.join(directory, file)) print("Removed", file) if not os.listdir(directory): shutil.rmtree(directory) print("Removed", directory)
Вот и все.
Спасибо за внимание :)
