Alyosha found this mobile phone on the floor of a small red hall. He was still working. Lua interpreter? Seriously?
Перед нами обычный интерпретатор Lua (если такое вообще можно назвать обычным — кажется, результат команд он не выводит).
Иметь под рукой эмулятор для таких тасков бывает очень кстати
На ввод он практически не реагирует — иногда лишь выводит фейковый флаг, поэтому посмотрим саму apk’шку.
Декомпилируем apk с помощью jadx.
MainActivity. В принципе, ничего интересного.
У нас имеется:
Ничего полезного не видно, погружаемся глубже.
Вытаскиваем из apk libnative-lib.so. Открываем в IDA Pro. Я какое-то время пытался проследить всю логику, начиная от функции stringFromJni, но потом решил посмотреть строки.
почти полный флаг, за исключением двух частей
Смотрим xref’ы…
да, я реверсил arm64, а потом вспомнил, что у меня эмулятор x86
Мы попали в какую-то функцию, которая генерирует недостающие куски флага и пушит флаг в стек Lua. Если пробежаться по xref’ам ещё выше, то станет ясно, что эта функция регистрируется как обработчик Lua-функции flag(). Сначала я хотел проэмулировать эту функцию через flare-emu, но выяснилось, что она зависит от какого-то стейта, который генерируется раньше. Поэтому я просто накидал небольшой скрипт под frida, который трейсит вызов функции lua_pushfstring.
Собственно скрипт: