Skip to content

client/hook/utils · Hook 工具 ​

Hook 框架的通用工具目录,目前含 MethodParameterUtils 一个类。它把各 MethodProxy 里反复出现的「在参数数组里找某类型参数、替换包名/Uid」操作收敛成静态方法,是 hook 代理方法最常见的助手。

MethodParameterUtils ​

方法作用
getFirstParam(args, tClass)取实参数组里第一个指定类型的参数
replaceFirstAppPkg(args)把第一个 String 包名参数替换成当前虚拟 App 包名,返回原值
replaceLastAppPkg(args)把最后一个 String 包名参数替换成虚拟包名
replaceSequenceAppPkg(args, sequence)替换第 N 个 String 包名参数
replaceLastUid(args)把最后一个 int uid 参数替换成虚拟 uid
getAllInterface(Class) / getAllInterfaces(Class, set)反射收集某类实现的所有接口

为什么需要它 ​

大量系统服务方法(startActivity、getPackageInfo、queryIntentActivities …)的参数里带「调用方包名 / uid」。在虚拟环境里,App 传上来的真实包名要被改成虚拟包名、真实 uid 要改成虚拟 uid,否则系统服务按真包名查不到虚拟安装的 App。这些替换逻辑高度同质,抽到这里避免每个 MethodProxy 各写一遍。

参数替换流程 ​

java
@Override
public Object invoke(Object who, Method method, Object[] args) {
    MethodParameterUtils.replaceFirstAppPkg(args);
    return method.invoke(who, args);
}

关联 ​

基于 VirtualApp 与 epic,仅供学习研究。VirtualApp 禁止商用。