Automated Frida Gadget injection tool
Project description
Installation
pip install frida-gadget --upgrade
Prerequirement
# Install Apktool on macOS
brew install apktool
# Add Apktool to your PATH environment variable
export PATH=$PATH:$HOME/.brew/bin
Usage
$ frida-gadget --help
Usage: cli.py [OPTIONS] APK_PATH
Patch an APK with the Frida gadget library
Options:
--arch TEXT Specify the target architecture of the device. (options: arm64, x86_64, arm, x86)
--config TEXT Specify the Frida configuration file.
--js TEXT Specify the Frida gadget JavaScript file.
--js-delay INTEGER Specify seconds to wait before executing the JavaScript file.
--force-manifest Force modify AndroidManifest.xml even if it already has required permissions.
--custom-gadget-name TEXT Specify a custom name for the Frida gadget.
--no-res Skip decoding resources.
--main-activity TEXT Specify the main activity if known.
--sign Automatically sign the APK using uber-apk-signer.
--skip-decompile Skip the decompilation step.
--skip-recompile Skip the recompilation step.
--use-aapt2 Use aapt2 instead of aapt for resource processing.
--decompile-opts TEXT Specify additional options for apktool decompile.
--recompile-opts TEXT Specify additional options for apktool recompile.
--apktool-path TEXT Specify the path or command to run apktool.
--frida-version TEXT Specify the Frida version to use.
--ks TEXT The keystore file. If not provided, will use debug keystore.
--ks-alias TEXT The alias of the used key in the keystore.
--ks-key-pass TEXT The password for the key.
--ks-pass TEXT The password for the keystore.
--version Show the version and exit.
--help Show this message and exit.
How do I begin?
$ frida-gadget target.apk --sign
[INFO] Auto-detected frida version: 16.1.3
[INFO] APK: '[REDACTED]/demo-apk/target.apk'
[INFO] Auto-detected architecture via ADB: arm64-v8a # Alternatively, specify the architecture with --arch arm64
[INFO] Gadget Architecture(--arch): arm64(default)
[DEBUG] Decompiling the target APK using apktool
[DEBUG] Downloading the frida gadget library for arm64
[DEBUG] Checking internet permission and extractNativeLibs settings
[DEBUG] Adding 'android.permission.INTERNET' permission to AndroidManifest.xml
[DEBUG] Searching for the main activity in the smali files
[DEBUG] Found the main activity at '[REDACTED]/frida-gadget/tests/demo-apk/target/smali/com/google/mediap/apps/target/MainActivity.smali'
[DEBUG] Locating the onCreate method and injecting the loadLibrary code
[DEBUG] Recompiling the new APK using apktool
...
[INFO] APK signing finished: ./target/dist/target-aligned-debugSigned.apk (72.78 MiB)
With Docker
docker pull ksg97031/frida-gadget
docker run -v $(pwd):/workspace/mount ksg97031/frida-gadget /workspace/mount/your-app.apk --arch arm64 --sign
docker run -v $(pwd):/workspace/mount ksg97031/frida-gadget /workspace/mount/example.apk --arch arm64 --sign
# The patched APK will be located at ./example/dist/example.apk
Compatibility
Device Architecture
adb shell getprop ro.product.cpu.abi
$ frida-gadget target.apk --sign
[INFO] Auto-detected architecture via ADB: arm64-v8a
$ frida-gadget target.apk --arch arm64 --sign
[INFO] Gadget Architecture(--arch): arm64
Android Version Support
Android Version |
Minimum Frida Version |
Notes |
|---|---|---|
Android 5.x ~ 7.x (Lollipop~Nougat) |
Frida 14.2+ |
Support for older Android versions was improved in Frida 12.6. Frida 14.2 includes fixes for libc detection errors and restored Houdini (translator) support. Latest Frida (16.x) continues to support Android 5~7. |
Android 8.0 ~ 8.1 (Oreo) |
Frida 12.6.6+ |
Java API issues like Java.choose were resolved in Frida 12.6.3+. Java integration issues on 32-bit ARM devices were fixed in Frida 12.6.6. Frida 14.x and newer versions work stably on Oreo. |
Android 9.0 (Pie) |
Frida 12.7+ |
Frida was extensively tested on Pixel 3 (Android 9). Frida 12.x ~ 15.x versions work stably on AOSP-based Android 9. Latest Frida 16.x also supports Android 9. (For emulators, Google-provided Android 9 images for arm/arm64 are recommended.) |
Android 10 (Q) |
Frida 14.2+ |
While there were no major changes specific to Android 10, Frida 14.2+ is recommended for overall stability. Frida 14.2 includes various compatibility improvements for both pre and post Android 10 versions. Latest Frida 15.x and 16.x versions work without issues on Android 10. |
Android 11 (R) |
Frida 14.2+ |
Frida 14.2 includes modifications to address ART changes and ARM->x86 translation in Android 11. Frida 14.2 or higher is recommended for Android 11. Frida 15.x~16.x fully support Android 11. (May have separate issues on custom ROMs like Samsung.) |
Android 12 (S) |
Frida 15.0+ |
Official support for Android 12 was first added in Frida 15.0. Initial 15.0 version had minor compatibility issues, but Frida 15.1.23 includes several stability improvements for Android 12. Frida 15.1.23 or higher (preferably 15.2 or latest 16.x) is recommended for Android 12 devices. |
Android 13 (T) |
Frida 15.1.23+ |
Preliminary support for Android 13 was introduced in Frida 15.1.23, and support matured in Frida 16.x versions. Minimum Frida 15.1.23 is required for Android 13 devices, but using the latest Frida 16 version is recommended (includes fixes for Android 13’s internal behavior changes). |
Android 14 (UpsideDownCake) |
Frida 16.2.0+ |
Due to ART structure changes in Android 14, initial Frida 16.0~16.1 versions had issues with Java hooking, but Frida 16.2.0 improved hooking support for Android 14. Frida 16.2 or higher is recommended for Android 14 (Frida 16.2 added support for Android 14’s new ART entrypoints). |
How to Identify the Injection?
$ unzip -l [REDACTED]/demo-apk/target/dist/target.apk | grep libfrida-gadget
21133848 09-15-2021 02:28 lib/arm64-v8a/libfrida-gadget-16.1.3-android-arm64.so
Tips
Specifying a Different Main Activity
$ frida-gadget target.apk --main-activity com.example.MainActivity --no-res --sign
Creating Self-Contained SSL Bypass App with –js
frida-gadget target.apk --js frida-multiple-unpinning.js --sign --no-res
frida-gadget target.apk --js frida-multiple-unpinning.js --js-delay 2 --sign --no-res
frida-gadget target.apk --js frida-multiple-unpinning.js --frida-version 16.1.3 --sign --no-res
Using a Custom Apktool
$ frida-gadget target.apk --apktool-path ./tools/apktool.bat --sign # Windows
$ frida-gadget target.apk --apktool-path "java -Xmx16g -jar ~/Download/apktool.jar" --sign # Java with 16GB memory
Custom Apktool Options
$ frida-gadget target.apk --decompile-opts "--only-main-classes --no-res" --recompile-opts "--force-all" --sign
Contributing
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file frida-gadget-1.6.2.tar.gz.
File metadata
- Download URL: frida-gadget-1.6.2.tar.gz
- Upload date:
- Size: 19.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8097b27c2e65d194438baecf1dec00f1f77a19335600288ed8b36048ffddc535
|
|
| MD5 |
84260a7fb3569448d893cd0a74f43ac3
|
|
| BLAKE2b-256 |
f3c131dd656e38972524eff9081e3093a31f15ad74774326a044f23226680a84
|