Посібник налаштування середовища для реверс-інжинірингу Android застосунків в Ubuntu
Вступ
Цей посібник допоможе вам налаштувати повноцінне середовище для реверс-інжинірингу Android застосунків в Ubuntu Linux. Ми встановимо всі необхідні інструменти та створимо зручні alias’и для ефективної роботи.
Передумови
Перевірка Java
Спочатку переконайтеся, що у вас встановлено Java:
|
1 2 |
java -version |
Якщо Java не встановлено:
|
1 2 3 |
sudo apt update sudo apt install openjdk-17-jdk |
Перевірка Android SDK
Перевірте наявність Android SDK:
|
1 2 3 |
adb version ls ~/Android/Sdk/build-tools/ |
Якщо Android SDK відсутнє, встановіть Android Studio або завантажте Command Line Tools окремо.
Структура каталогів
Створимо організовану структуру для зберігання всіх інструментів:
|
1 2 3 4 5 6 7 |
# Створюємо каталоги mkdir -p ~/Android/reverse-tools mkdir -p ~/Android/reverse-projects # Переходимо до каталогу інструментів cd ~/Android/reverse-tools |
Встановлення інструментів
1. APKTool
|
1 2 3 4 5 |
cd ~/Android/reverse-tools wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.9.3.jar chmod +x apktool |
2. JADX (Java Decompiler)
|
1 2 3 4 5 6 |
cd ~/Android/reverse-tools/ mkdir jadx-1.4.7 cd jadx-1.4.7 wget https://github.com/skylot/jadx/releases/download/v1.4.7/jadx-1.4.7.zip unzip jadx-1.4.7.zip |
3. dex2jar
|
1 2 3 4 5 6 7 |
cd ~/Android/reverse-tools/ wget https://sourceforge.net/projects/dex2jar/files/dex2jar-2.0.zip/download -O dex2jar-2.0.zip unzip dex2jar-2.0.zip # Зробимо скрипти виконуваними: <span class="token">cd</span> ~/Android/reverse-tools/dex2jar-2.0 <span class="token">chmod</span> +x *.sh # Тестуємо dex2jar: ./d2j-dex2jar.sh --help |
4. Baksmali/Smali
|
1 2 3 4 |
cd ~/Android/reverse-tools/ wget https://github.com/baksmali/smali/releases/download/v3.0.9/baksmali-3.0.9-fat.jar -O baksmali.jar wget https://github.com/baksmali/smali/releases/download/v3.0.9/smali-3.0.9-fat.jar -O smali.jar |
Налаштування PATH
Додайте шляхи до інструментів у файл ~/.bashrc:
|
1 2 |
echo 'export PATH=$PATH:$HOME/Android/Sdk/platform-tools:$HOME/Android/Sdk/build-tools/35.0.1:$HOME/Android/reverse-tools:$HOME/Android/reverse-tools/jadx-1.4.7/bin:$HOME/Android/reverse-tools/dex2jar-2.4' >> ~/.bashrc |
Створення alias’ів
Відкрийте файл ~/.bashrc для редагування:
|
1 2 |
nano ~/.bashrc |
Додайте наступні alias’и в кінець файлу:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# Android Reverse Engineering Tools alias apktool='java -jar ~/Android/reverse-tools/apktool.jar' alias jadx='~/Android/reverse-tools/jadx-1.4.7/bin/jadx' alias jadx-gui='~/Android/reverse-tools/jadx-1.4.7/bin/jadx-gui' alias dex2jar='~/Android/reverse-tools/dex2jar-2.0/d2j-dex2jar.sh' alias d2j-baksmali='~/Android/reverse-tools/dex2jar-2.0/d2j-baksmali.sh' alias d2j-smali='~/Android/reverse-tools/dex2jar-2.0/d2j-smali.sh' # Android SDK Tools alias dx='~/Android/Sdk/build-tools/35.0.1/dx' alias aapt='~/Android/Sdk/build-tools/35.0.1/aapt' alias zipalign='~/Android/Sdk/build-tools/35.0.1/zipalign' # Custom shortcuts alias apk-decode='apktool d' alias apk-build='apktool b' alias apk-sign='jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/Android/android-key.keystore' alias apk-install='adb install -r' alias apk-uninstall='adb uninstall' # Navigation shortcuts alias cdrev='cd ~/Android/reverse-projects' alias cdtools='cd ~/Android/reverse-tools' |
Застосуйте зміни:
|
1 2 |
source ~/.bashrc |
Створення ключа для підпису APK
Створіть ключ для підпису модифікованих APK файлів:
|
1 2 |
keytool -genkey -v -keystore ~/Android/android-key.keystore -alias androidkey -keyalg RSA -keysize 2048 -validity 10000 |
Під час створення ключа вам потрібно буде ввести:
- Пароль для keystore
- Ваше ім’я та прізвище
- Назву організації
- Місто, область, країну
- Підтвердити інформацію
Створення робочих скриптів
Скрипт для повної декомпіляції APK
Створіть файл ~/Android/reverse-tools/full-decompile.sh:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#!/bin/bash if [ $# -eq 0 ]; then echo "Використання: ./full-decompile.sh app.apk" exit 1 fi APK_FILE="$1" BASE_NAME=$(basename "$APK_FILE" .apk) echo "🔧 Декомпіляція за допомогою APKTool..." apktool d "$APK_FILE" -o "${BASE_NAME}_apktool" echo "🔧 Декомпіляція за допомогою JADX..." jadx "$APK_FILE" -d "${BASE_NAME}_jadx" echo "🔧 Конвертація DEX файлів..." dex2jar "$APK_FILE" echo "✅ Декомпіляція завершена!" echo "📁 APKTool вивід: ${BASE_NAME}_apktool" echo "📁 JADX вивід: ${BASE_NAME}_jadx" echo "📁 JAR файл: ${APK_FILE%.apk}-dex2jar.jar" |
Скрипт для збірки та підпису APK
Створіть файл ~/Android/reverse-tools/build-and-sign.sh:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/bash if [ $# -eq 0 ]; then echo "Використання: ./build-and-sign.sh папка_проекту" exit 1 fi PROJECT_DIR="$1" OUTPUT_APK="${PROJECT_DIR}_modified.apk" ALIGNED_APK="${PROJECT_DIR}_aligned.apk" echo "🔧 Збірка APK..." apktool b "$PROJECT_DIR" -o "$OUTPUT_APK" echo "🔧 Вирівнювання APK..." zipalign -v 4 "$OUTPUT_APK" "$ALIGNED_APK" echo "🔧 Підпис APK..." jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/Android/android-key.keystore "$ALIGNED_APK" androidkey echo "✅ APK готовий: $ALIGNED_APK" echo "📱 Для встановлення: adb install -r $ALIGNED_APK" |
Зробіть скрипти виконуваними:
|
1 2 3 |
chmod +x ~/Android/reverse-tools/full-decompile.sh chmod +x ~/Android/reverse-tools/build-and-sign.sh |
Базовий workflow
1. Декомпіляція APK
|
1 2 3 4 5 6 7 |
# Перейдіть до робочої папки cd ~/Android reverse # Декомпілюйте APK apk-decode app.apk # або використайте повний скрипт ~/Android/reverse-tools/full-decompile.sh app.apk |
2. Аналіз коду
|
1 2 3 4 5 6 |
# Відкрийте графічний інтерфейс JADX jadx-gui app.apk # Або використайте командний рядок jadx app.apk -d app_jadx_output |
3. Модифікація
Відредагуйте необхідні файли у папці app/:
AndroidManifest.xml– маніфест застосункуres/– ресурси (strings, layouts, тощо)smali/– код у форматі smali
4. Збірка та підпис
|
1 2 3 4 5 6 7 8 9 |
# Зберіть модифікований APK apk-build app -o app_modified.apk # Вирівняйте байти zipalign -v 4 app_modified.apk app_aligned.apk # Підпишіть APK apk-sign app_aligned.apk androidkey |
5. Встановлення
|
1 2 3 |
# Встановіть на пристрій/емулятор apk-install app_aligned.apk |
Корисні команди
Робота з пристроями
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Список підключених пристроїв adb devices # Встановлення APK adb install -r app.apk # Видалення застосунку adb uninstall com.example.package # Копіювання файлів adb push local_file /sdcard/ adb pull /sdcard/remote_file ./ |
Аналіз APK
|
1 2 3 4 5 6 7 8 9 |
# Інформація про APK aapt dump badging app.apk # Список файлів в APK aapt list app.apk # Перегляд маніфесту aapt dump xmltree app.apk AndroidManifest.xml |
Поради та рекомендації
Безпека
- Завжди тестуйте модифіковані APK в ізольованому середовищі
- Не встановлюйте підозрілі APK на основний пристрій
- Регулярно оновлюйте інструменти до останніх версій
Продуктивність
- Використовуйте SSD для зберігання проектів
- Виділіть достатньо RAM для JADX GUI (мінімум 4 ГБ)
- Закривайте непотрібні програми під час роботи з великими APK
Навчання
- Почніть з простих застосунків
- Вивчайте структуру Android Manifest
- Освоюйте основи мови Smali
- Практикуйтеся з відкритими джерелами
Вирішення проблем
APKTool не працює
|
1 2 3 4 5 6 7 |
# Перевірте версію Java java -version # Оновіть APKTool cd ~/Android/reverse-tools wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.9.3.jar -O apktool.jar |
Помилки підпису
|
1 2 3 4 5 6 |
# Перевірте, чи існує keystore ls -la ~/Android/android-key.keystore # Створіть новий keystore якщо потрібно keytool -genkey -v -keystore ~/Android/android-key.keystore -alias androidkey -keyalg RSA -keysize 2048 -validity 10000 |
ADB не бачить пристрій
|
1 2 3 4 5 6 7 |
# Перезапустіть ADB сервер adb kill-server adb start-server # Перевірте USB debugging на пристрої adb devices |
Висновок
Тепер у вас є повноцінне середовище для реверс-інжинірингу Android застосунків. Використовуйте ці інструменти відповідально та дотримуйтесь законодавства щодо авторських прав та ліцензій програмного забезпечення.
Успішного вивчення внутрішньої будови Android застосунків!