逆向分析

Xposed的使用(一)

2018-06-10  本文已影响0人  骑着蜗牛闯世界666

简介

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

下载完成之后,点击 “框架”--“安装/更新”即可,这个过程手机可能会重启几次。


image.png

下载/模块

安装完成之后,我们就可以点击 “下载” 去下载一些比较热门的插件,这里有一些其他大神写好的模块,可以直接体验,下载完成之后在“模块”进行勾选激活,按照提示进行重启即可使用。但如果想要实现自己想要的修改效果,就需要自己来编写插件了。

日志

有时候为了知道运行过程的细节,需要打log,一般我们可以使用Android 提供的Log类在控制台进行输出,但这种方式不会提示你在xposed运行过程的一些异常,Xposed提供了XposedBridge.log的方式,这种方式的好处是在程序发生异常的时候,会进行输出提示,不过他提示的内容是在上面的“日志”模块,当你写的模块没有按照预期的方式响应,需要调试的时候推荐使用这个,不过缺点也很明显,需要来回切换。

插件编写

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.1'
    provided files('lib/XposedBridgeApi-54.jar')
}

我们的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步骤就完成了。
感兴趣的同学可以在下面的链接下载来体验一下:

上一篇 下一篇

猜你喜欢

热点阅读