https://github.com/xuexiangjys/sandhooktest
SandHook在Android上的Hook应用
https://github.com/xuexiangjys/sandhooktest
Last synced: 20 days ago
JSON representation
SandHook在Android上的Hook应用
- Host: GitHub
- URL: https://github.com/xuexiangjys/sandhooktest
- Owner: xuexiangjys
- License: apache-2.0
- Created: 2020-03-05T18:22:52.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-12-15T02:36:02.000Z (almost 2 years ago)
- Last Synced: 2025-06-26T05:04:13.080Z (5 months ago)
- Language: Java
- Size: 159 KB
- Stars: 10
- Watchers: 2
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SandHookTest
[SandHook](https://github.com/ganyao114/SandHook)框架使用演示,用于Android Hook。
## 特点
* 主要基于 inline hook,条件不允许时进行 ArtMethod 入口替换
* 接口为注解式,较为友好
* 支持直接 Hook,也支持在插件场景中的 Hook
## 支持 OS
4.4 - 10.0
## 支持架构
* ARM32
* Thumb-2
* ARM64
## Hook范围
* 对象方法
* Static 方法
* 构造方法
* JNI 方法
* 系统方法
## 使用方法
### 增加依赖
```
implementation 'com.swift.sandhook:hooklib:4.1.7'
```
### 定义Hook类
```
/**
* Hook Activity 对象方法
*
* @author xuexiang
* @since 2020/3/5 9:38 PM
*/
@HookClass(Activity.class)
public class ActivityHooker {
@HookMethodBackup("onCreate")
@MethodParams(Bundle.class)
static Method onCreateBackup;
@HookMethodBackup("onPause")
static HookWrapper.HookEntity onPauseBackup;
@HookMethodBackup("onResume")
static HookWrapper.HookEntity onResumeBackup;
@HookMethod("onCreate")
@MethodParams(Bundle.class)
public static void onCreateHook(Activity activity, Bundle bundle) throws Throwable {
Log.e("ActivityHooker", "hooked onCreate success " + activity);
SandHook.callOriginByBackup(onCreateBackup, activity, bundle);
}
@HookMethod("onPause")
public static void onPauseHook(@ThisObject Activity activity) throws Throwable {
Log.e("ActivityHooker", "hooked onPause success " + activity);
onPauseBackup.callOrigin(activity);
}
@HookMethod("onResume")
public static void onResumeHook(@ThisObject Activity activity) throws Throwable {
Log.e("ActivityHooker", "hooked onResume success " + activity);
onResumeBackup.callOrigin(activity);
}
}
```
### 注册Hook类
```
private void initSandHook() {
try {
SandHook.addHookClass(
ActivityHooker.class,
LogHooker.class,
ObjectHooker.class,
ClassMethodHooker.class,
JNIHooker.class
);
} catch (HookErrorException e) {
e.printStackTrace();
}
}
```
## 混淆配置
```
# SandHook
-keep class com.swift.sandhook.** { *; }
-keep @com.swift.sandhook.annotation.* class * {*;}
-keep class * {
@com.swift.sandhook.annotation.* ;
}
-keepclassmembers class * {
@com.swift.sandhook.annotation.* ;
}
## 这里填你需要Hook的类
-keep class com.xuexiang.sandhooktest.core.entity.** {*;}
```