APK.SH - это сценарий, который облегчает приложения для Android с обратной инженерией, автоматизируя некоторые повторяющиеся задачи, такие как вытягивание, декодирование, восстановление и исправление APK.
APK.SH в основном использует APKTool для разборки, декодирования и восстановления ресурсов и некоторых ударов для автоматизации процесса впрыска гаджета Frida. Он также поддерживает пакеты приложений/разделение APK.
⬅ Вытащить APK с устройства прост, так как запуск ./apk.sh pull <package_name>
? Декодирование APK простое, как запуск ./apk.sh decode <apk_name>
? Восстановление APK проста, как запуск ./apk.sh build <apk_dir>
apk.sh pull APK с устройства. Он поддерживает пакеты приложений/разделение APK, что означает, что разделенные APK будут соединены в одном APK (это полезно для исправления). Если пакет является пакетом приложений/разделенным APK, APK.SH объединит APK в один APK, исправляя все идентификаторы общественных ресурсов.
apk.sh patch Patch Apk для загрузки Frida-Gadget.so на старт.
FRIDA-GADGET.SO-это общая библиотека FRIDA, предназначенную для загрузки программами, которые должны быть приготовлены (когда введенный режим работы не подходит). Просто загрузив библиотеку, она позволит вам взаимодействовать с ней, используя существующие инструменты на основе Frida, такие как Frida-Trace. Он также поддерживает полностью автономный подход, в котором он может запускать сценарии из файловой системы без какой -либо внешней связи.
Плачкование APK простое, как запуск ./apk.sh patch <apk_name> --arch arm .
Вы можете указать конфигурацию гаджета Frida в json ./apk.sh patch <apk_name> --arch arm --gadget-conf <config.json>
Если вы столкнетесь с «Уже станонированными» ошибками apktool d , как в #30, вы можете передать флаг- --only-main-classes , который будет передаваться в apktool при расшифровании вашего APK.
Во взаимодействии по умолчанию Frida Gadget выявляет интерфейс совместимого с Frida-Server, прослушивая Localhost: 27042 по умолчанию. Чтобы достичь раннего инструментария Frida, пусть функциональный блок конструктора Gadget до тех пор, пока вы либо attach() к процессу, либо вызовите resume() после прохождения обычного spawn() -> attach() -> ...apply instrumentation... Шаги.
Если вы не хотите этого блокирующего поведения и хотите позволить программе загружаться прямо, или вы предпочли бы, чтобы она прослушивала другой интерфейс или порт, вы можете настроить это через файл конфигурации JSON.
Конфигурация по умолчанию:
{
"interaction" : {
"type" : " listen " ,
"address" : " 127.0.0.1 " ,
"port" : 27042 ,
"on_port_conflict" : " fail " ,
"on_load" : " wait "
}
} Вы можете передать файл конфигурации гаджета в apk.sh с опцией --gadget-conf .
Обычно предложенная конфигурация может быть:
{
"interaction" : {
"type" : " script " ,
"path" : " /data/local/tmp/script.js " ,
"on_change" : " reload "
}
}script.js может быть чем -то вроде:
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 the console.log Вывод любого сценария из кода Frida при использовании типа взаимодействия сценария.
// 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 ) ) ;
} 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]
pull Pull an apk from device/emulator.
decode Decode an apk.
build Re-build an apk.
patch Patch an apk.
rename Rename the apk package.
-a, --arch <arch> Укажите целевую архитектуру, обязательную при исправлении.
-g, --gadget-conf <json_file> Укажите файл конфигурации Frida-Gadget, необязательно при исправлении.
-n, --net Добавьте разрешающую конфигурацию сетевой безопасности при строительстве, необязательно. Его можно использовать с патчем, тянуть и переименовать.
-s, --safe не декодируют ресурсы при декодировании (то есть apktool -r). Нельзя использовать при исправлении.
-d, --no-dis не разбирается dex, не желающему при декодировании (то есть apktool -s). Нельзя использовать при исправлении.
https://frida.re/docs/gadget/
https://lief-project.github.io/doc/latest/tutoriors/09_frida_lief.html
https://koz.io/using-frida-on-android-without-root/
https://github.com/sensepost/obection/
https://github.com/nickstadb/patch-apk/
https://neo-geo2.gitbook.io/adventures-on-security/frida-scripting-guide/frida-scripting-guide