API Hook总结之四

6.9 WifiManager Hook

结构图如下,


Hook 类

IWifiManagerBinderHook

Hook 代理类

IWifiManagerHookHandle

 

Hook 方法实现类

getScanResults

getBatchedScanResults

setWifiEnabled

内部类 IWifiManagerHookedMethodHandler的beforeInvoke方法如下,

protected boolean beforeInvoke(Object receiver, Method method, Object[] args) throws Throwable {
            //callingPackage
            final int index = 0;
            if (args != null && args.length > index && args[index] instanceof String) {
                String callingPackage = (String) args[index];
                if (!TextUtils.equals(callingPackage, mHostContext.getPackageName())) {
                    args[index] = mHostContext.getPackageName();
                }
            }
            return super.beforeInvoke(receiver, method, args);
        }

6.10,NotificationManager Hook

结构图如下,


Hook 类

INotificationManagerBinderHook

Hook 代理类

INotificationManagerHookHandle

 

 

 

 

Hook 方法实现类

enqueueNotification

cancelNotification

cancelAllNotifications

enqueueToast

cancelToast

enqueueNotificationWithTag

enqueueNotificationWithTagPriority

cancelNotificationWithTag

setNotificationsEnabledForPackage

areNotificationsEnabledForPackage

 

不仅InotificationManagerHookHandle的内部类MyNotification实现了beforeInvoke方法,有些具体实现类也实现了beforeInvoke方法,

具体的beforeInvoke方法在此就不论述了。

6.11,WindowManagerHook

结构图如下,


Hook 类

IWindowManagerBinderHook

Hook 代理类

IWindowManagerHookHandle

 

Hook 方法实现类

openSession

overridePendingAppTransition

setAppStartingWindow

 

其中openSession实现了afterInvoke方法,如下,

super.afterInvoke(receiver, method, args, invokeResult);
Class clazz = invokeResult.getClass();
IWindowSessionHook invocationHandler = new IWindowSessionHook(mHostContext, invokeResult);
invocationHandler.setEnable(true);
List<Class<?>> interfaces = Utils.getAllInterfaces(clazz);
Class[] ifs = interfaces != null && interfaces.size() > 0 ? interfaces.toArray(new Class[interfaces.size()]) : new Class[0];
Object newProxy = MyProxy.newProxyInstance(clazz.getClassLoader(), ifs, invocationHandler);
setFakedResult(newProxy);

居然实现了对WindowSession实现了Hook,并且安装好。WindowSession机制见下节分析。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值