вторник, 7 января 2020 г.

Учимся разбирать и собирать Android приложения

Вот и добрался я до Android приложений. Это первая статья, в которой будем знакомится с инструментарием для вскрытия и упаковки apk файлов.
Для начала нам нужно распаковать файл apk (он же архив) инструментом apktool:
apktool d d:\crack\revtest.apk
Получаем примерно такое содержимое директории:


В данной директории получили файлы с кодом smali – это байт-код виртуальной машины Dalvik.

Его мы будем редактировать. Но для привычного удобства чтения кода, сделаем конвертацию smali кода в java код. Для начала нужно конвертировать наш apk файл в jar файл при помощи утилиты dex2jar:
d2j-dex2jar.bat -f d:\crack\revtest.apk -o d:\crack\revtest.jar
где:
  • -f принудительная перезапись
  • -o выходной файл .jar

Далее нужно декомпилировать полученный jar файл. Для этого можно воспользоваться одной из нескольких инструментов. Графические: jd-gui, jadx-gui, с ними все интуитивно понятно. Важное приемущество jadx-gui, это то что он умеет сразу декомпелировать apk файл в удобочитаемый java код.


Так что все предыдущие шаги можно было пропустить, но тогда статья была бы не совсем полной, так как мое мнение, что консольные утилиты нужно знать. Или же можно использовать консольную утилиту FernFlower:
java -jar fernflower.jar d:\crack\revtest.jar d:\crack\revtest_decompiled\
В данном случае на выходе так же получим файл jar, но уже с читабельным java кодом. Этот jar файл нужно просто разархивировать. Далее открываем файлы с помощью любимого текстового редактора, например Notepad++ или Vim. После проделанных всех нужных нам правок в коде, нам нужно будем пересобрать все файлы в apk обратно. Но для того что бы наш Android адекватно воспринял наше перепакованное приложение, ему нужна подпись. Упаковываем отредактированные файлы командой:
apktool.bat b -f d:\crack\revtest -o d:\crack\revtest_new.apk
где:
  • b - сборка
  • -f - пропустить обнаружение изменений и собрать все файлы
  • -o - выходной файл apk

Для начала нужно создать ключ с паролем:
keytool -genkey -v -keystore d:\crack\revtest.keystore -alias test -keyalg rsa -keysize 2048 -validity 20000 -storepass S3CrEtP@SsW0rD
где:
  • -genkey (genkeypair) - создает пару ключей
  • -v - подробный вывод
  • -keystore - имя хранилища ключей
  • -alias - псевдоним имени ключа  
  • -keyalg - название алгоритма
  • -keysize - размер ключа
  • -validity - срок действия ключей в днях
  • -keypass - пароль хранилища ключей

Затем создадим саму подпись, ипользуя созданный нами ключ.
jarsigner -verbose -sigalg sha1withrsa -digestalg sha1 -keystore d:\crack\revtest.keystore d:\crack\revtest_new.apk revtest_new -storepass S3CrEtP@SsW0rD
где:
  • -verbose - подробный вывод
  • -sigalg - название алгоритма подписи
  • -digestalg - алгоритм криптографического хеширования
  • -keystore - расположение хранилища ключей
  • -storepass - пароль для целостности хранилища ключей

Ну и наконец добавим подпись к нашему новому apk файлу:
zipalign -v 4 d:\crack\revtest_new.apk d:\crack\revtest_align.apk
где:
  • -v - подробный вывод
  • 4 - обеспечивает 32-битное выравнивание

На этом все, можно запускать наше исправленное приложение на Android. В следующей статье рассмотрим пример изменения кода в приложении. На закуску - даю мой батник для персборки приложения с подписью.
@echo off
if "%~1"=="" goto help
call apktool.bat b -f %~1 -o %~1.apk
if not exist %~dp1debug.keystore keytool -genkey -v -keystore %~dp1debug.keystore -alias test -keyalg rsa -keysize 2048 -validity 20000 -storepass h3xf0x
jarsigner -verbose -sigalg sha1withrsa -digestalg sha1 -keystore %~dp1debug.keystore %~1.apk test -storepass h3xf0x
del %~1align.apk
zipalign -v 4 %~1.apk %~1align.apk
echo Complete!
goto end
:help
echo Example: rebuild.bat [path to dir]
:end

Комментариев нет:

Отправить комментарий