Frida-powered hook runner based on JSON hook files.
Project description
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.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file frooky-0.2.1.tar.gz.
File metadata
- Download URL: frooky-0.2.1.tar.gz
- Upload date:
- Size: 11.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5d7903527db20a810b78299171fc3fc45217186fa08bbbfe0b934aab754e3f0
|
|
| MD5 |
d17f730a52444ee6e34a13f6446e03c9
|
|
| BLAKE2b-256 |
1fce31909454fb296e3195f6f8f6aa487b2a99f0832e6b944d71d18d8cd7a783
|
Provenance
The following attestation bundles were made for frooky-0.2.1.tar.gz:
Publisher:
publish.yml on cpholguera/frooky
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
frooky-0.2.1.tar.gz -
Subject digest:
d5d7903527db20a810b78299171fc3fc45217186fa08bbbfe0b934aab754e3f0 - Sigstore transparency entry: 925499753
- Sigstore integration time:
-
Permalink:
cpholguera/frooky@73f05ea1a6793e8e918ff057401539b312ee2403 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/cpholguera
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@73f05ea1a6793e8e918ff057401539b312ee2403 -
Trigger Event:
push
-
Statement type:
File details
Details for the file frooky-0.2.1-py3-none-any.whl.
File metadata
- Download URL: frooky-0.2.1-py3-none-any.whl
- Upload date:
- Size: 107.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf9c4e12821246559aa14ceff7d449c7c674d9de62cd35dd19b597af8a0a160d
|
|
| MD5 |
7ba3f20f13f390c1438ecf776f6fb06e
|
|
| BLAKE2b-256 |
8710ac103188c2c7eb81262fd8891af97bd8a2a9aa46d6f0e45ce7dfc18f8d96
|
Provenance
The following attestation bundles were made for frooky-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on cpholguera/frooky
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
frooky-0.2.1-py3-none-any.whl -
Subject digest:
cf9c4e12821246559aa14ceff7d449c7c674d9de62cd35dd19b597af8a0a160d - Sigstore transparency entry: 925499755
- Sigstore integration time:
-
Permalink:
cpholguera/frooky@73f05ea1a6793e8e918ff057401539b312ee2403 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/cpholguera
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@73f05ea1a6793e8e918ff057401539b312ee2403 -
Trigger Event:
push
-
Statement type: