简介
Xposed是 Android 平台上很出名的一个hook开源框架,使用这个框架我们可以Hook Android系统的核心进程Zygote来达到修改应用程序的运行过程和结果,本篇文章主要介绍怎样通过Android Studio来编写插件给Xposed来实现自己想要的拦截效果。
使用
安装xposed_install
首先需要安装xposed_installer框架,因为需要劫持系统,所以要求你的手机已经是root的了,并且因为David虚拟机和Art虚拟机的不同,在安装上的区别比较大,这里只介绍在David虚拟机(Android4.0~4.4)上的安装使用,在5.0以及以上的可以参考网上的其他资料进行安装。xposed的下载地址为:http://repo.xposed.info/module/de.robv.android.xposed.installer ,直接下载
de.robv.android.xposed.installer_v33_36570c.apk进行安装即可。
下载完成之后,点击 “框架”--“安装/更新”即可,这个过程手机可能会重启几次。
image.png
下载/模块
安装完成之后,我们就可以点击 “下载” 去下载一些比较热门的插件,这里有一些其他大神写好的模块,可以直接体验,下载完成之后在“模块”进行勾选激活,按照提示进行重启即可使用。但如果想要实现自己想要的修改效果,就需要自己来编写插件了。
日志
有时候为了知道运行过程的细节,需要打log,一般我们可以使用Android 提供的Log类在控制台进行输出,但这种方式不会提示你在xposed运行过程的一些异常,Xposed提供了XposedBridge.log的方式,这种方式的好处是在程序发生异常的时候,会进行输出提示,不过他提示的内容是在上面的“日志”模块,当你写的模块没有按照预期的方式响应,需要调试的时候推荐使用这个,不过缺点也很明显,需要来回切换。
插件编写
- 1、AndroidStudio创建一个新的Project,因为我们不需要有界面,所以在创建的时候选择Add No Activity即可。
- 2、在app 目录下创建一个名字为lib的文件夹,将XposedBridgeApi.jar包放在lib这个目录下面,同时右键选择 Add as Library,将包引入进来,同时还需要修改build.gradle文件,将complie改为provided.
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:27.1.1'
provided files('lib/XposedBridgeApi-54.jar')
}
-
3、新建Main类,实现IXposedHookLoadPackage接口,配置AndroidManifest.xml
image.png
-
4、在main文件夹下新建assets目录,创建xposed_init文件,同时将Main类的路径填入:com.example.hook.HookModule
image.png
-
5、在HookModule类里面的handleLoadPackage方法实现自己的逻辑。
image.png
我们的HookModule实现了IXposedHookLoadPackage接口,当系统加载我们的应用程序的时候,会回调handleLoadPackage方法,如果是我们想要hook的应用程序的包名,则通过XposedHelpers.findClass找到对应的类,然后通过XposedHelpers.findAndHookMethod的方式找到我们要hook的方法,这里需要注意一点,找类的时候,需要使用反编译之后的名字,即使是.a.b这样子的形式,通过再hook方法的时候,如果原来的方法有参数,需要写上对应参数+.class,XposedHelpers也提供了findAndHookConstructor来hook类的构造函数。
编译打包
插件编写完成之后,需要经过打包签名才能够使用,方式是:选择build- generate signed APK,签名的key可以随意写,完成之后就会在release文件夹下生成对应的apk。然后进行安装,这个手机通知栏会提示我们xposed模块已经更新,在模块那里勾选,然后重启即可完成整个hook操作。
image.png
结果
image.png我们的程序的代码如上,刚才的handleLoadPackage是hook了summit 方法,并修改了参数的内容。在运行我们的hook模块之前,程序正常运行的情况下,点击按钮提示的是 “未被劫持”,在hook之后提示的是“我被劫持了”。
image.png
说明我们已经成功修改了程序的参数,至此整个hook步骤就完成了。
感兴趣的同学可以在下面的链接下载来体验一下:
网友评论