PineHookPlus
Pine Hook +
**PineHookPlus** is an advanced example project demonstrating creative and efficient ways to leverage the [Pine Hooking Framework](https://github.com/canyie/pine) for runtime modifications in Android apps. This project focuses on simplifying the integration and customization of hooks, offering a structured and flexible approach to app behavior modification. The project is written primarily in Java, distributed under the MIT License license, first published in 2024. Key topics include: android, art-runtime, hook, hooking, java-hook.
PineHookPlus
PineHookPlus is an advanced example project demonstrating creative and efficient ways to leverage the Pine Hooking Framework for runtime modifications in Android apps. This project focuses on simplifying the integration and customization of hooks, offering a structured and flexible approach to app behavior modification.
To learn more about its usage and demo, please refer to the blog post.
๐ Features
- Automatically loads libraries based on the user's system architecture:
- AArch64 (arm64) and armeabi-v7a architectures supported.
- A11 and UP.
- Libraries are stored in the root directory of the APK under
hook/for streamlined access. - Use
config.jsonto define hooks in thehook/directory. - Easily specify:
- Class Name: Target class to hook.
- Method Name: Method to override.
- Parameter Types: Types of parameters accepted by the method.
- args: Arguments to pass to the hooked method.
- Return Value: The desired return value of the hooked method.
- No need to write or compile custom code for every method.
- Directly hook into and modify class constructors.
- Moves away from methods like
AppComponentFactory,android:nameand usesContentProvider. - Load Xposed modules seamlessly.
๐ฆ Project Structure
PineHookPlus/
โ
โโโ app/
โ โโโ src/
โ โ โโโ hook/ # Hook source directory
| | | โโโhook/
| | | | โโโ libarm.so # ARM32 library
| | | | โโโ libarm64.so # ARM64 library
| | | | โโโ config.json # Hook configuration file
| | | | โโโ modules.txt # Xposed modules configuration file
โ โ โโโ main/ # Main application source code
โ โ โโโ ... # Other modules and configurations
โ โโโ build.gradle # Project-specific Gradle file
โ
โโโ build.gradle # Root Gradle file
โโโ settings.gradle
๐ Example Configurations
Hooking a Method
In config.json, define the target class and method to hook, along with the parameter types, arguments, and return value as needed:
json{ // Target class to hook "com.pinehook.plus.MainActivity": { // Method name to hook "argMethod": { // parameter types of the method "paramTypes": [ "boolean" ], // return result of the method after it's call "after": { "result": false } }, "beforeOnlyMethod": { "paramTypes": [ "java.lang.String" ], "before": { // args to pass to the method before it's call "args": [ "modifiedBefore" ] } }, "afterOnlyMethod": { "paramTypes": [ "java.lang.String" ], "after": { // return result of the method after it's call "result": "modifiedAfter" } } }, }
Hooking a Constructor
json{ // Constructor hook example "com.pinehook.plus.ConstructorClass": { // Do not change this value for constructor hook "constructor": { // parameter types of the constructor "paramTypes": [ "boolean", "java.lang.String", "boolean", "long", "long", "java.lang.String", "java.lang.String", "java.lang.String" ], // args to pass to the constructor before it's call "before": { "args": [ true, "PlayStore", false, 0, 0, "null", "Yearly", "null" ] } } } }
Check config.json for more.
Result
<img src="images/result.png" alt="result preview image" widt="200" height="400">Check out other projects
๐ License
This project is licensed under the MIT License. See the LICENSE file for details.
๐ Acknowledgments
- Canyie for the incredible Pine Framework.
- Hikki for Initial Ideas, Support and Work.
- Abhi for Constructor Hooks and other improvements.
Contributors
Showing top 1 contributor by commit count.
