API Hook总结之三

来源:互联网 发布:seo关键词优化工具 编辑:程序博客网 时间:2024/05/20 05:59

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);        }