Frooky
___ ____
/ __\ / _ | _ _ _ _ _ _
/ _\ | (_) | / _ \ / _ \ | / / | | | |
/ / / / | | | (_) | (_) || < | |_| |
\/ /_/ |_| \___/ \___/ |_|\_\ \__, |
|___/
frooky is a Frida-based dynamic analysis tool for Android and iOS apps based on JSON hook files.
- Hook Java/Kotlin methods and native C/C++ functions
- Simple JSON hook file format
- Support for method overloads and stack trace capture
- Argument capture with various data types
- Filter hooks by argument values or stack trace patterns
- Output events in JSON Lines format for easy processing
See more in docs/usage.md.
Installation
Simply install via pip to get the frooky CLI tool:
pip3 install frooky
Usage
Create a hook file (e.g., hooks.json) as described in docs/usage.md, then run frooky with the desired options:
# Attach by app name
frooky -U -n "My App" --platform android hooks.json
# Spawn and add multiple hook files (hooks are merged)
frooky -U -f com.example.app --platform android storage.json crypto.json
See frooky -h for more options.
Example
We'll use the OWASP MAS MASTG-DEMO-0072 app to demonstrate hooking a cryptographic key generation method.
First you need to create a hook file, e.g., crypto.json:
{
"category": "CRYPTO",
"hooks": [
{
"class": "android.security.keystore.KeyGenParameterSpec$Builder",
"method": "$init",
"maxFrames": 10
}
]
}
Then run frooky with the hook file against your target app:
frooky -U -n "MASTestApp" --platform android crypto.json
Output (pretty-printed for readability):
Events are written to the output file in JSON Lines format (one JSON object per line, known as NDJSON). You can easily pretty-print it e.g. using
jq . output.json.
{
"id": "14535033-08ea-4063-897c-eacd4a885d8b",
"type": "hook",
"category": "CRYPTO",
"time": "2026-01-14T16:02:21.782Z",
"class": "android.security.keystore.KeyGenParameterSpec$Builder",
"method": "$init",
"instanceId": 35486102,
"stackTrace": [
"android.security.keystore.KeyGenParameterSpec$Builder.<init>(Native Method)",
"org.owasp.mastestapp.MastgTest.generateKey(MastgTest.kt:97)",
"org.owasp.mastestapp.MastgTest.mastgTest(MastgTest.kt:41)",
"org.owasp.mastestapp.MainActivityKt.MainScreen$lambda$12$lambda$11(MainActivity.kt:101)",
"org.owasp.mastestapp.MainActivityKt.$r8$lambda$Pm6AsbKBmypP53K-UABM21E_Xxk(Unknown Source:0)",
"org.owasp.mastestapp.MainActivityKt$$ExternalSyntheticLambda3.run(D8$$SyntheticClass:0)",
"java.lang.Thread.run(Thread.java:1012)"
],
"inputParameters": [
{
"declaredType": "java.lang.String",
"value": "MultiPurposeKey"
},
{
"declaredType": "int",
"value": 15
}
],
"returnValue": [
{
"declaredType": "void",
"value": "void"
}
]
}
See more in docs/usage.md and a full example in docs/examples/example.md.
For development and local testing instructions of this repo, see docs/develop.md.
Metadata
Release files for frooky 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| frooky-0.2.1.tar.gz | 11.9 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| frooky-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 12.0 MB
Release files / frooky-0.2.1.tar.gz
| Download URL | frooky-0.2.1.tar.gz |
|---|---|
| Size | 11.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d5d7903527db20a810b78299171fc3fc45217186fa08bbbfe0b934aab754e3f0
|
|
BLAKE2b-256 checksum How to use checksums |
1fce31909454fb296e3195f6f8f6aa487b2a99f0832e6b944d71d18d8cd7a783
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 6, 2026.
Transparency logRelease files / frooky-0.2.1-py3-none-any.whl
| Download URL | frooky-0.2.1-py3-none-any.whl |
|---|---|
| Size | 107.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cf9c4e12821246559aa14ceff7d449c7c674d9de62cd35dd19b597af8a0a160d
|
|
BLAKE2b-256 checksum How to use checksums |
8710ac103188c2c7eb81262fd8891af97bd8a2a9aa46d6f0e45ce7dfc18f8d96
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 6, 2026.
Transparency log