Модифікація вихідного коду android-програми з використанням apk-файлу

Для початку було завантажено сам apk-файл програми. Потім недовгий пошук в інтернеті привів мене на сайт http://www.decompileandroid.com/. З його допомогою можна було завантажити apk-файл із додатком та на виході отримати набір вихідних записів. На жаль, декомпіляція в java-класи відбувається не зовсім ідеально і тому повністю відновити сам проект програми в IDE(Idea) у мене не вийшло, але це дозволило проаналізувати саму структуру проекту і розібратися як він приблизно працює. Після проведення аналізу, було знайдено два перспективні методи в класіBaseReaderFragment.javaplaceAdViewIfNeededтаremoveAdViewIfNeeded.

Код методу placeAdViewIfNeeded:

Найпростіше, що спало на думку після читання коду, це прибрати все зайве, і залишити лише виклик return;

Але, як уже було сказано, навіть якби я змінив у java-класі щось, я б не зміг у результаті скомпілювати додаток у IDE. Тож довелося шукати альтернативу. Виявилося, що smali-файли, які створюються в процесі декомпіляції, дозволяють також після внесення потрібних змін знову зібрати модифікований додаток. На жаль, сайт, що був наведений вище, дозволяв лише отримувати вихідні коди, але не збирати нові. Тому довелося шукати способів зробити це самостійно. Була знайдена утиліта ApkTools, яка дозволяла декомпілювати та компілювати apk-файли. Крім того, була потрібна утиліта aapt.exe, яка була взята мною зі стандартного SDK під андроїд в папці android-sdk\build-tools\20.0.0.

Для зручності виклику утиліти з-під windows був створений скрипт apktool.bat:

Для декомпіляції програми були виконані команди:

Після чого, в отриманихвихідниках було знайдено файлBaseReaderFragment.smaliі потрібні нам методи були змінені таким чином:

Далі прийшла черга складання apk-файлу з вихідних джерел.

Зробити це можна наступною командою:

Але це ще не все. Щоб додаток можна було встановити, його потрібно було підписати цифровим підписом. Найпростіший спосіб зробити це – це завантажити архів у якому знаходиться утиліта для підпису додатків та цифрові сертифікати до неї.

Розпаковуємо архів, виконуємо команду:

У ньому було видно, що рядок:

Даний приклад показує, що в разі потреби можна досить просто і швидко модифікувати вже існуючі android-додатки, щоб додати в них функціонал, що бракує, або навпаки видалити деякі небажані можливості в тих ситуаціях, коли доступу до вихідців немає. Сподіваюся, він допоможе людям, які потрапили в схожу ситуацію і не хочуть миритися з нею, знайти вирішення проблеми.