Я пытаюсь изменить код старой мобильной игры под названием Fun Run 2 как уникальный исследовательский проект для моего курса по разработке программного обеспечения в колледже.
Приложение создано с использованием Corona SDK и, следовательно, запрограммировано на Lua.Итак, когда я взял APK и распаковал его, мне нужно было распаковать файл resource.car (Corona ARchive), чтобы получить доступ к файлам Lua.Я так и сделал, и все файлы в этом архиве - это предварительно скомпилированные файлы .lu.
Первое, что я попытался изменить код Lua, это использовать unluac / luadec для декомпиляции файлов .lu вчитаемый, изменяемый исходный код, который можно скомпилировать.Я смог успешно декомпилировать, модифицировать и перекомпилировать их, однако, когда он фактически выполнял измененный файл .lu в игре, он зависал из-за попытки индексировать нулевое значение.Я обнаружил, что причиной этого был тот факт, что существует нечто, называемое повышением, которое при извлечении отладочной информации из скомпилированного файла Lua невозможно получить, и поэтому попытка декомпилировать и перекомпилировать файлы .lu не собираласьна работу.
Поэтому мой следующий подход состоял в том, чтобы использовать подход luac -l
, который создает список скомпилированного байт-кода для виртуальной машины Lua.
Результаты luac -l lua.gameLogic.powerUpChance.lu
были такими же, как
...
main <?:0,0> (11 instructions, 44 bytes at 025D7D80)
0+ params, 3 slots, 0 upvalues, 0 locals, 4 constants, 2 functions
1 [-] NEWTABLE 0 0 0
2 [-] GETGLOBAL 1 -1 ; require
3 [-] LOADK 2 -2 ; "composer"
4 [-] CALL 1 2 2
5 [-] CLOSURE 2 0 ; 025D8280
6 [-] MOVE 0 1
7 [-] SETTABLE 0 -3 2 ; "selectRandomPowerUp" -
...
Учитывая этот список инструкций, я знал, что мне нужно было изменить и где его изменить, и я сделал это.Что приводит меня к моему вопросу - как мне взять измененный список байт-кода и скомпилировать его обратно в скомпилированный файл .lu?Это вообще возможно?Является ли такой подход к изменению скомпилированных файлов Lua пустой тратой моего времени?