API Hook总结之三

6.6 MountService Hook

结构图如下,


Hook 类

IMountServiceBinderHook

Hook 代理类

IMountServiceHookHandle

Hook 方法实现类

mkdirs


IMountServiceHookHandle的内部类mkdirs的beforeInvoke方法部分代码如下,

if (path != null) {
    final boolean isAndroiDataHostPath = path.indexOf(ANDROID_DATA) < 0;
    final boolean isAndroiObbHostPath = path.indexOf(ANDROID_OBB) < 0;
    if (isAndroiDataHostPath && !isAndroiObbHostPath) {
         path = path.replaceFirst(ANDROID_DATA, ANDROID_DATA + mHostContext.getPackageName() + "/Plugin/");
         args[index1] = path;
    } else if (!isAndroiDataHostPath && isAndroiObbHostPath) {
          path = path.replaceFirst(ANDROID_OBB, ANDROID_OBB + mHostContext.getPackageName() + "/Plugin/");
          args[index1] = path;
    }
}

6.7 SearchManager Hook

结构图如下,


Hook 类

ISearchManagerBinderHook

Hook 代理类

ISearchManagerHookHandle

Hook 方法实现类

getSearchableInfo


getSearchableInfo的beforeInvoke方法如下,

protected boolean beforeInvoke(Object receiver, Method method, Object[] args) throws Throwable {
    if (args != null && args.length > 0 && args[args.length - 1] instanceof ComponentName) {
         ComponentName cpn = (ComponentName) args[args.length - 1];
         ActivityInfo info = PluginManager.getInstance().getActivityInfo(cpn, 0);
         if (info != null) {
             ActivityInfo proxyInfo = PluginManager.getInstance().selectStubActivityInfo(info);
             if (proxyInfo != null) {
                 args[args.length - 1] = new ComponentName(proxyInfo.packageName, proxyInfo.name);
             }
           }
    }
     return super.beforeInvoke(receiver, method, args);
}

6.8 ISessionManagerBinderHook Hook

结构图如下,


Hook 类

ISessionManagerBinderHook

Hook 代理类

ISessionManagerHookHandle

Hook 方法实现类

createSession


createSession的beforeInvoke方法如下,

protected boolean beforeInvoke(Object receiver, Method method, Object[] args) throws Throwable {
            int index = 0;
            if (args != null && args.length > index && args[index] instanceof String) {
                String pkg = (String) args[index];
                if (!TextUtils.equals(pkg, mHostContext.getPackageName())) {
                    args[index] = mHostContext.getPackageName();
                }
            }
            return super.beforeInvoke(receiver, method, args);
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值