代码拉取完成,页面将自动刷新
@startuml
interface IBinder
abstract class Hook {
getName()
beforeHook
onHook
afterHook
isEnable
}
interface IHookObject {
void addHook(Hook hook);
removeHook(hookName);
getHook(name);
getProxyObject();
}
class HookObject {
Map<String, Hook> mHookMaps;
mBaseObject;
mProxyObject;
}
class PatchObject {
hookObject
}
class ActivityManagerPatch {
}
interface Injectable {
inject()
isEnvBad()
}
class IInterface {
IBinder asBinder();
}
class IActivityManager {
startActivity()
broadcastIntent()
}
IHookObject <|-- HookObject
HookObject <|-- PatchObject
Injectable <|-- PatchObject
Hook <|-- StartActivity
Hook <|-- BroadcastIntent
IHookObject *-- IInterface
HookObject *-- Hook
ActivityManagerPatch *-- StartActivity
ActivityManagerPatch *-- BroadcastIntent
IBinder <|-- HookBinder
IHookObject <|-- HookBinder
IInterface <|-- IActivityManager
PatchObject <|-- ActivityManagerPatch
class PatchManager {
Map<Class, Injectable> mPatchMaps;
init()
injectAll()
addAllPatches()
addPatch()
addAllPatches()
}
PatchManager *-- ActivityManagerPatch
note top of Hook
该类是对方法的hook,每个Hook对象都对应于一个方法,
如IActivityManager.startActivity
endnote
note top of HookObject
该类对应于一个被hook的类,所有内部都代理了IInterface的某个具体子类,
该类中有一张表,存储了每个被hook的方法的Hook对象.
该类中对接口类使用
Proxy.newProxyInstance
InvocationHandler
endnote
@enduml
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。