mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
Fix an hardcore bug
This commit is contained in:
@@ -78,7 +78,7 @@ class HookEntry : IYukiHookXposedInit {
|
||||
// 开始你的 Hook
|
||||
// 可简写为 encase {}
|
||||
YukiHookAPI.encase {
|
||||
// 装载到系统框架
|
||||
// 装载 APP Zygote 事件
|
||||
loadZygote {
|
||||
// 得到需要 Hook 的 Class
|
||||
ActivityClass.hook {
|
||||
|
@@ -240,7 +240,11 @@ fun loadApp(name: String, hooker: YukiBaseHooker)
|
||||
|
||||
`name` 为 APP 的包名,后方的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。
|
||||
|
||||
装载并 Hook 指定、全部包名的 APP,若要 Hook 系统框架,请使用 `loadZygote`。
|
||||
装载并 Hook 指定、全部包名的 APP。
|
||||
|
||||
若要装载 APP Zygote 事件,请使用 `loadZygote`。
|
||||
|
||||
若要 Hook 系统框架,请使用 `loadSystem`。
|
||||
|
||||
### loadZygote [method]
|
||||
|
||||
@@ -258,6 +262,26 @@ fun loadZygote(hooker: YukiBaseHooker)
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 装载 APP Zygote 事件。
|
||||
|
||||
方法中的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。
|
||||
|
||||
### loadSystem [method]
|
||||
|
||||
```kotlin
|
||||
inline fun loadSystem(initiate: PackageParam.() -> Unit)
|
||||
```
|
||||
|
||||
```kotlin
|
||||
fun loadSystem(hooker: YukiBaseHooker)
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0.82` `新增`
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 装载并 Hook 系统框架。
|
||||
|
||||
方法中的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。
|
||||
|
@@ -201,7 +201,7 @@ encase {
|
||||
}
|
||||
```
|
||||
|
||||
你还可以同时使用 `loadZygote` 方法来装载系统框架。
|
||||
你还可以同时使用 `loadZygote` 方法来装载新的进程被 fork 后的第一个事件 `initZygote`。
|
||||
|
||||
> 示例如下
|
||||
|
||||
|
@@ -192,11 +192,11 @@ TestClass.hook {
|
||||
}
|
||||
```
|
||||
|
||||
### Hook 系统框架
|
||||
### Hook Zygote
|
||||
|
||||
在 `YukiHookAPI` 中,Hook 系统框架的实现非常简单。
|
||||
在 APP 启动时,新的进程被 fork 后的第一个事件 `initZygote`。
|
||||
|
||||
假设我们要全局 Hook 一个 `Activity` 的 `onCreate` 事件
|
||||
假设我们要全局 Hook 一个 APP `Activity` 的 `onCreate` 事件
|
||||
|
||||
在 `encase` 方法体中添加代码。
|
||||
|
||||
@@ -221,7 +221,34 @@ loadZygote {
|
||||
|
||||
这样就实现了上述的 Hook 功能。
|
||||
|
||||
!> `loadZygote` 与 `loadApp(name = "android")` 有直接性区别,`loadZygote` 会在 `initZygote` 中装载,若要 Hook 系统框架,建议使用 `loadZygote`。
|
||||
### Hook 系统框架
|
||||
|
||||
在 `YukiHookAPI` 中,Hook 系统框架的实现非常简单。
|
||||
|
||||
假设我们要全局 Hook 一个系统 `Activity` 的 `onCreate` 事件
|
||||
|
||||
在 `encase` 方法体中添加代码。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
loadSystem {
|
||||
ActivityClass.hook {
|
||||
injectMember {
|
||||
method {
|
||||
name = "onCreate"
|
||||
param(BundleClass)
|
||||
returnType = UnitType
|
||||
}
|
||||
afterHook {
|
||||
// Your code here.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
!> `loadZygote` 与 `loadSystem` 有直接性区别,`loadZygote` 会在 `initZygote` 中装载,系统框架被视为一个单独的 APP 而存在,若要 Hook 系统框架,请使用 `loadSystem`。
|
||||
|
||||
### Hook Resources
|
||||
|
||||
|
@@ -169,8 +169,10 @@ open class PackageParam(@PublishedApi internal var wrapper: PackageParamWrapper?
|
||||
/**
|
||||
* 装载并 Hook 指定、全部包名的 APP
|
||||
*
|
||||
* 若要 Hook 系统框架 - 请使用 [loadZygote]
|
||||
* @param name 包名 - 不填将过滤除了系统框架的全部 APP
|
||||
* 若要装载 APP Zygote 事件 - 请使用 [loadZygote]
|
||||
*
|
||||
* 若要 Hook 系统框架 - 请使用 [loadSystem]
|
||||
* @param name 包名 - 不填将过滤除了 [loadZygote] 事件外的全部 APP
|
||||
* @param initiate 方法体
|
||||
*/
|
||||
inline fun loadApp(name: String = "", initiate: PackageParam.() -> Unit) {
|
||||
@@ -180,8 +182,10 @@ open class PackageParam(@PublishedApi internal var wrapper: PackageParamWrapper?
|
||||
/**
|
||||
* 装载并 Hook 指定、全部包名的 APP
|
||||
*
|
||||
* 若要 Hook 系统框架 - 请使用 [loadZygote]
|
||||
* @param name 包名 - 不填将过滤除了系统框架的全部 APP
|
||||
* 若要装载 APP Zygote 事件 - 请使用 [loadZygote]
|
||||
*
|
||||
* 若要 Hook 系统框架 - 请使用 [loadSystem]
|
||||
* @param name 包名 - 不填将过滤除了 [loadZygote] 事件外的全部 APP
|
||||
* @param hooker Hook 子类
|
||||
*/
|
||||
fun loadApp(name: String = "", hooker: YukiBaseHooker) {
|
||||
@@ -192,12 +196,24 @@ open class PackageParam(@PublishedApi internal var wrapper: PackageParamWrapper?
|
||||
* 装载并 Hook 系统框架
|
||||
* @param initiate 方法体
|
||||
*/
|
||||
inline fun loadSystem(initiate: PackageParam.() -> Unit) = loadApp(YukiHookBridge.SYSTEM_FRAMEWORK_NAME, initiate)
|
||||
|
||||
/**
|
||||
* 装载并 Hook 系统框架
|
||||
* @param hooker Hook 子类
|
||||
*/
|
||||
fun loadSystem(hooker: YukiBaseHooker) = loadApp(YukiHookBridge.SYSTEM_FRAMEWORK_NAME, hooker)
|
||||
|
||||
/**
|
||||
* 装载 APP Zygote 事件
|
||||
* @param initiate 方法体
|
||||
*/
|
||||
inline fun loadZygote(initiate: PackageParam.() -> Unit) {
|
||||
if (wrapper?.type == HookEntryType.ZYGOTE) initiate(this)
|
||||
}
|
||||
|
||||
/**
|
||||
* 装载并 Hook 系统框架
|
||||
* 装载 APP Zygote 事件
|
||||
* @param hooker Hook 子类
|
||||
*/
|
||||
fun loadZygote(hooker: YukiBaseHooker) {
|
||||
|
@@ -56,7 +56,8 @@ import java.lang.reflect.Member
|
||||
object YukiHookBridge {
|
||||
|
||||
/** Android 系统框架名称 */
|
||||
private const val SYSTEM_FRAMEWORK_NAME = "android"
|
||||
@PublishedApi
|
||||
internal const val SYSTEM_FRAMEWORK_NAME = "android"
|
||||
|
||||
/** Xposed 是否装载完成 */
|
||||
private var isXposedInitialized = false
|
||||
|
Reference in New Issue
Block a user