Update document file

This commit is contained in:
2022-05-01 09:52:53 +08:00
parent 8d226bc42d
commit dfa3362c35
30 changed files with 1957 additions and 164 deletions

View File

@@ -8,7 +8,7 @@
```
Host Environment
└── YukiHookCreater
└── YukiMemberHookCreater
└── Class
└── MemberHookCreater
└── Member
@@ -19,6 +19,15 @@ Host Environment
├── Before
└── After
...
YukiResourcesHookCreater
└── Resources
└── ResourcesHookCreater
└── Drawable
└── Replace
ResourcesHookCreater
└── Layout
└── Inject
...
```
> 上方的结构换做代码将可写为如下形式。
@@ -37,6 +46,14 @@ TargetClass.hook {
}
}
}
resources().hook {
injectResource {
conditions {
// Your code here.
}
replaceTo(...)
}
}
```
## Demo
@@ -51,6 +68,10 @@ TargetClass.hook {
## 一个简单的 Hook 例子
> 这里给出了 Hook APP、Hook 系统框架与 Hook Resources 的例子,可供参考。
### Hook APP
假设,我们要 Hook `com.android.browser` 中的 `onCreate` 方法并弹出一个对话框。
`encase` 方法体中添加代码。
@@ -171,6 +192,97 @@ TestClass.hook {
}
```
### Hook 系统框架
`YukiHookAPI`Hook 系统框架的实现非常简单。
假设我们要全局 Hook 一个 `Activity``onCreate` 事件
`encase` 方法体中添加代码。
> 示例如下
```kotlin
loadZygote {
ActivityClass.hook {
injectMember {
method {
name = "onCreate"
param(BundleClass)
returnType = UnitType
}
afterHook {
// Your code here.
}
}
}
}
```
这样就实现了上述的 Hook 功能。
!> `loadZygote``loadApp(name = "android")` 有直接性区别,`loadZygote` 会在 `initZygote` 中装载,若要 Hook 系统框架,建议使用 `loadZygote`
### Hook Resources
假设,我们要 Hook `com.android.browser``string` 类型的 `app_name` 内容替换为 `123`
`encase` 方法体中添加代码。
> 示例如下
```kotlin
loadApp(name = "com.android.browser") {
resources().hook {
injectResource {
conditions {
name = "app_name"
string()
}
replaceTo("123")
}
}
}
```
若当前 APP 使用 `app_name` 设置了标题栏文本,则它就会变成我们的 `123`
你还可以使用当前 Xposed 模块的 Resources 替换 Hook APP 的 Resources。
假设,我们要继续 Hook `com.android.browser``mipmap` 类型的 `ic_launcher`
> 示例如下
```kotlin
loadApp(name = "com.android.browser") {
resources().hook {
injectResource {
conditions {
name = "ic_launcher"
mipmap()
}
replaceToModuleResource(R.mipmap.ic_launcher)
}
}
}
```
至此目标 APP 的图标将会被替换为我们设置的图标。
若你想替换系统框架的资源,同样也可以这样实现,只需要把 `loadApp` 换成 `loadZygote` 即可。
> 示例如下
```kotlin
loadZygote {
resources().hook {
// Your code here.
}
}
```
更多功能请参考 [ResourcesHookCreater](api/document?id=resourceshookcreater-class)。
## 异常处理
> `YukiHookAPI` 重新设计了对异常的监听,任何异常都不会在 Hook 过程中抛出,避免打断下一个 Hook 流程导致 Hook 进程“死掉”。
@@ -193,6 +305,20 @@ injectMember {
}
```
在 Resources Hook 时此方法同样适用。
> 示例如下
```kotlin
injectResource {
// Your code here.
}.result {
// 处理 Hook 时的任意异常
onHookingFailure {}
// ...
}
```
你还可以处理 Hook 的 `Class` 不存在时发生的异常。
> 示例如下