Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
apk.sh — Делает реверс-инжиниринг Android-приложений проще, автоматизируя повторяющиеся задачи, такие как извлечение, декодирование, пересборка и патчинг APK. | Kitploit
Инструменты/GitHubGitHub/ax/apk.sh
Безопасность AndroidДинамический анализ (песочница)Генерация полезной нагрузкиОбратная инженерияМобильная безопасностьАнализ Бинарных Файлов
GitHubax/apk.sh

apk.sh

Делает реверс-инжиниринг Android-приложений проще, автоматизируя повторяющиеся задачи, такие как извлечение, декодирование, пересборка и патчинг APK.

Репозиторий
3.8k2266 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

🕹️ apk.sh

apk.sh — это Bash-скрипт, упрощающий обратную разработку Android-приложений и автоматизирующий некоторые повторяющиеся задачи, такие как извлечение, декодирование, пересборка и патчинг APK.

Возможности

apk.sh в основном использует apktool для дизассемблирования, декодирования и пересборки ресурсов, а также bash для автоматизации процесса внедрения frida gadget. Также поддерживаются app bundles/split APK.

  • 🍄 Патчинг APK для загрузки frida-gadget.so при запуске.
  • 🆕 Поддержка прямой манипуляции байт-кодом без декомпиляции, что позволяет избежать ошибок декомпиляции/рекомпиляции.
  • 🍱 Поддержка app bundles/split APK.
  • 🔧 Дизассемблирование ресурсов в почти исходную форму с помощью apktool.
  • 🔩 Пересборка декодированных ресурсов обратно в бинарный APK/JAR с помощью apktool.
  • 🗝️ Подпись кода APK с помощью apksigner.
  • 🖥️ Поддержка нескольких архитектур (arm, arm64, x86, x86_64).
  • 📵 Root-доступ на Android-устройстве не требуется.

Начало работы

⬅️ Извлечение APK с устройства происходит простым запуском ./apk.sh pull <package_name>

🔧 Декодирование APK — простым запуском ./apk.sh decode <apk_name>

🔩 Пересборка APK — простым запуском ./apk.sh build <apk_dir>

apk.sh pull

apk.sh pull извлекает APK с устройства. Поддерживаются app bundles/split APK, то есть разделённые APK объединяются в один APK (это удобно для патчинга). Если пакет является app bundle или split APK, apk.sh объединит APK в один, исправляя все идентификаторы публичных ресурсов.

apk.sh patch

apk.sh patch применяет патч к APK для загрузки frida-gadget.so при запуске.

frida-gadget.so — это общая библиотека Frida, предназначенная для загрузки инструментируемыми программами (когда инжектируемый режим работы не подходит). Простая загрузка библиотеки позволяет взаимодействовать с ней с помощью существующих инструментов на базе Frida, например frida-trace. Также поддерживается полностью автономный подход, когда скрипты выполняются из файловой системы без внешней связи.

Патчинг APK выполняется простым запуском ./apk.sh patch <apk_name> --arch arm.

Также можно указать конфигурацию Frida gadget в JSON: ./apk.sh patch <apk_name> --arch arm --gadget-conf <config.json>

Если вы столкнулись с ошибками apktool d вида "already interned", как в #30, можно передать флаг --only-main-classes, который будет передан apktool при декодировании APK.

🍄 Конфигурации Frida Gadget

В режиме взаимодействия по умолчанию Frida Gadget предоставляет совместимый с frida-server интерфейс, прослушивающий localhost:27042. Для ранней инструментации Frida позволяет функции-конструктору Gadget блокироваться до тех пор, пока вы либо не выполните attach() к процессу, либо не вызовете resume() после стандартных шагов spawn() -> attach() -> ...применение инструментации....

Если такое блокирующее поведение нежелательно и вы хотите, чтобы программа запускалась сразу, или хотите, чтобы прослушивание велось на другом интерфейсе или порту, это можно настроить через JSON-файл конфигурации.

Конфигурация по умолчанию:

root@kitploit:~
{
  "interaction": {
    "type": "listen",
    "address": "127.0.0.1",
    "port": 27042,
    "on_port_conflict": "fail",
    "on_load": "wait"
  }
}

Вы можете передать файл конфигурации gadget в apk.sh через опцию --gadget-conf.

Взаимодействие со скриптами

Типичная рекомендуемая конфигурация может выглядеть так:

root@kitploit:~
{
  "interaction": {
    "type": "script",
    "path": "/data/local/tmp/script.js",
    "on_change":"reload"
  }
}

script.js может быть примерно таким:

root@kitploit:~
var android_log_write = new NativeFunction(
    Module.getExportByName(null, '__android_log_write'),
    'int',
    ['int', 'pointer', 'pointer']
);

var tag = Memory.allocUtf8String("[frida-script][ax]");

var work = function() {
    setTimeout(function() {
        android_log_write(3, tag, Memory.allocUtf8String("ping @ " + Date.now()));
        work();
    }, 1000);
}

work();

android_log_write(3, tag, Memory.allocUtf8String(">--(O.o)-<"));

adb push script.js /data/local/tmp

./apk.sh patch <apk_name> --arch arm --gadget-conf <config.json>

adb install file.gadget.apk

Примечание

Добавьте следующий код для вывода в logcat результатов console.log любого скрипта из frida codeshare при использовании типа взаимодействия Script.

root@kitploit:~
// print to logcat the console.log output
// see: https://github.com/frida/frida/issues/382
var android_log_write = new NativeFunction(
    Module.getExportByName(null, '__android_log_write'),
    'int',
    ['int', 'pointer', 'pointer']
);
var tag = Memory.allocUtf8String("[frida-script][ax]");
console.log = function(str) {
    android_log_write(3, tag, Memory.allocUtf8String(str));
}

Требования

  • apktool
  • apksigner
  • unxz
  • zipalign
  • aapt
  • adb

Использование

СИНТАКСИС

root@kitploit:~
apk.sh [SUBCOMMAND] [APK FILE|APK DIR|PKG NAME] [FLAGS]
apk.sh pull [PKG NAME] [FLAGS]
apk.sh decode [APK FILE] [FLAGS]
apk.sh build [APK DIR] [FLAGS]
apk.sh patch [APK FILE] [FLAGS]
apk.sh rename [APK FILE] [PKG NAME] [FLAGS]

ПОДКОМАНДЫ

root@kitploit:~
pull	Извлечение APK с устройства/эмулятора.
decode	Декодирование APK.
build	Пересборка APK.
patch	Патчинг APK.
rename	Переименование пакета APK.

ФЛАГИ

-a, --arch <arch> Укажите целевую архитектуру, обязательно при патчинге.

-g, --gadget-conf <json_file> Укажите файл конфигурации frida-gadget, опционально при патчинге.

-n, --net Добавить разрешающую конфигурацию сетевой безопасности при сборке, опционально. Можно использовать также с patch, pull и rename.

-r, --no-res Не декодировать ресурсы при декодировании (т.е. apktool -r), опционально. Можно использовать при патчинге.

-s, --no-src Не дизассемблировать dex при декодировании (т.е. apktool -s), опционально. Можно использовать при патчинге.

📃 Полезные ссылки

https://frida.re/docs/gadget/

https://lief-project.github.io/doc/latest/tutorials/09_frida_lief.html

https://koz.io/using-frida-on-android-without-root/

https://github.com/sensepost/objection/

https://github.com/NickstaDB/patch-apk/

https://neo-geo2.gitbook.io/adventures-on-security/frida-scripting-guide/frida-scripting-guide

https://github.com/ax/DEXPatch

Скачать инструмент