Android application reverse engineering (https://offensivepentest.com/2017/08/26/android-application-reverse-engineering/) - хорошее введение в реверс инжиниринг приложений для Android на примере достаточно простого CrackMe, которое выводит окно с предложением ввести пароль. Пароль сравнивается с зашифрованным паролем внутри предложения и, если они совпадают, на экране появляется сообщение об успешном взломе.
Автор предлагает четыре способа взломать CrackMe:
1. Dex2jar, JD-GUI и Frida. Метод заключается в том, чтобы найти в декомпилированном коде приложения id нужной зашифрованной строки, затем с помощью Frida внедрить в приложение гаджет, написанный на JS. Гаджет вытащит строку, дешифрует ее с помощью функции дешифровки самого приложения, и передаст серверу Frida, работающему на ПК;
2. Xposed, Inspeckage и APKStudio. С помощью Inspeckage можно отлавливать обращения к SQLite, функциям шифрования и доступа к памяти устройства. Иногда этой информации достаточно чтобы перехватить расшифрованную строку, но в данном случае пришлось также модифицировать само приложение с помощью APKStudio (код дешифровки в нем был, но приложение не вызывало его);
3. Патчинг с помощью APKStudio. Самый примитивный метод. Достаточно дизассемблировать приложение и поменять в нем одну строку чтобы CrackMe принимал любую строку как правильную.
4. Статический анализ с помощью ByteCodeViewer. Вместо того, чтобы запускать или модифицировать приложение, его можно изучить, извлечь из него зашифрованную строку, а также декомпилировать код расшифровки. Затем достаточно создать новое приложение, вставить в него код дешифровки и скормить ему зашифрованную строку. Вуаля, приложение выводит на экран оригинальную строку.
Автор предлагает четыре способа взломать CrackMe:
1. Dex2jar, JD-GUI и Frida. Метод заключается в том, чтобы найти в декомпилированном коде приложения id нужной зашифрованной строки, затем с помощью Frida внедрить в приложение гаджет, написанный на JS. Гаджет вытащит строку, дешифрует ее с помощью функции дешифровки самого приложения, и передаст серверу Frida, работающему на ПК;
2. Xposed, Inspeckage и APKStudio. С помощью Inspeckage можно отлавливать обращения к SQLite, функциям шифрования и доступа к памяти устройства. Иногда этой информации достаточно чтобы перехватить расшифрованную строку, но в данном случае пришлось также модифицировать само приложение с помощью APKStudio (код дешифровки в нем был, но приложение не вызывало его);
3. Патчинг с помощью APKStudio. Самый примитивный метод. Достаточно дизассемблировать приложение и поменять в нем одну строку чтобы CrackMe принимал любую строку как правильную.
4. Статический анализ с помощью ByteCodeViewer. Вместо того, чтобы запускать или модифицировать приложение, его можно изучить, извлечь из него зашифрованную строку, а также декомпилировать код расшифровки. Затем достаточно создать новое приложение, вставить в него код дешифровки и скормить ему зашифрованную строку. Вуаля, приложение выводит на экран оригинальную строку.