Android Hook技术实践

     昨晚听动脑学院Danny老师讲的关于Android Hook技术的实现,不需要在Manifest.xml中注册Activity组件,都可以在代码中startActivity,看了下演示,感觉挺牛逼,可以绕过PMS的检查,搞Android也有一段时间了,还是头一次听说这样子搞,不过非常不幸的是,昨晚的课程讲完,视频也没录,代码人家也不给,不过我自己有截屏了几段,今天就一起想着把这个搞出来,没搞出来,自己心里始终放不下。

     好了,完整的实现我自己已经完成了,代码给大家任意下载:

     Android Hook技术实践

     这个hook技术的目的呢,就是不在Manifest中注册Activity,也可以通过startActivity打开界面,那问题就来了,平时我们开发时候都知道,如果Manifest中没有注册,那么直接启动的时候,就会报ClassNotFound异常导致应用崩溃,要解决这个问题,那就是要通过技术手段来骗过PMS的这一步检查,过了关口检查这一关后,下面要作的就是启动目标Activity了,相信经常看源码的话,大家应该非常熟悉,Activity的启动是在ActivityThread类的成员变量mH的handleMessage方法中调用handleLaunchActivity来完成的,这些都是系统动作了,这一步我们不可能自己实现,因为启动Activity的流程中涉及到很多的过程,我们只能偷天换日,把这个方法的参数修改掉,给系统传递我们自己封装好的带有目标Activity的Intent,让系统去执行,这样就可以实现我们的目的了。

     好了,有了上面的分析,我们的实现也就非常清晰了,整个过程分为两步:1、拦截系统ActivityManagerNative.getDefault().startActivity方法,这一步是binder调用,会在AMS中执行,对目标Activity的检查,也是在AMS中调用PMS去完成的;2、拦截ActivityThread类的成员变量mH的handleMessage方法的第一个case LAUNCH_ACTIVITY,这是应用侧启动Activity的源头,只要在这里把我们封装好的数据替换进去之后,我们的目的也就达到了。

     大家可以看一下整个项目的代码,非常简单,所有的重点都在HookUtils类中,我们把这个类的代码贴上来:

package com.hook.project;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.la
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红-旺永福

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值