最近,参与了一个移动安全的技术大会,会议上分析了目前黑客的产业的一些技术以及常用的一些工具,以及防护的一些流程。下面就Android破解中常用的Xposed技术给大家做简单的讲解,逆向是一个持久的过程,而使用Xposed工具则是进行Hook的重要手段。
Xposed,是Android平台上最负盛名的一个逆向分析框架,使用这个框架,我们可以加载很多插件App,这些插件App可以直接或间接操纵系统层面的东西,比如操纵一些本来只对系统厂商才开放的功能。例如,使用插件APP可以hook到系统任意一个Java进程(zygote,systemserver,systemui好不啦!)。
当然,Xposed功能的确很强大,但也有缺点,需要root,所以每次为它启用新插件APP都需要重新启动。但最新的VirtualXposed 则不需要Root。
目前,Xposed支持32位和64位的dalvik以及ART,同时支持selinux。其中:
VirtualXposed是基于VirtualApp 和 epic 在非ROOT环境下运行Xposed模块的实现,支持Android5.0到8.1版本。是为了修复Xposed需要Root才能Hook的缺陷,官网地址为:https://github.com/android-hacker/VirtualXposed。
首先到 VirtualXposed发布页面 下载最新的VAExposed安装包安装到手机上,其使用上和Xposed的使用相似,打开 VirtualXposed,在里面安装要使用的APP,以及相应的Xposed模块即可。
注意:所有的工作(安装Xposed模块,安装APP)必须在 VirtualXposed中进行,否则Xposed模块不会有任何作用!比如,将微信直接安装在系统上(而非VirtualXposed中),防撤回安装在VirtualXposed中;或者把微信安装在VirtualXposed上,防撤回插件直接安装在系统上;或者两者都直接安装在系统上,均不会起任何作用。
不过,目前VirtualXposed也还存在一些兼容性问题。由于暂不支持资源HOOK,因此资源钩子不会起任何作用;使用资源HOOK的模块,相应的功能不会生效。部分插件的兼容性有问题,比如QX模块。
Xposed是一个庞大的工程,包含多个项目,项目主要使用Java和C、C++来实现。项目的源代码可以通过https://github.com/rovo89/Xposed和https://github.com/android-hacker/XposedBridge来获取。Xposed包含如下几个工程:
根据XposedTools的说明,我们先要修改下AOSP源码里的.repo,关于如何下载ASOP,可以参考网上的介绍,本文以Android4.4.4源码进行讲解。
下面就下载支持库的具体步骤如下:
其中,
配置好后,请在AOSP目录下执行repo sync。这样它会根据manifests更新AOSP源码。当然,也可以只是下载frameworks/base/cmds/xposed工程和更新build工程。
注意,repo sync是一个重型操作,会导致所有工程都进行一次同步。所以,最好的办法是直接下载和更新对应的工程,比如,下载xposed工程,用repo sync frameworks/base/cmds/xposed即可。
下面我们进入XposedTools目录,然后修改其中的build.conf文件。该文件用于指示AOSP源码等参数。XposdTools提供了一个build.conf.sample模板,图2中的build.conf文件是在这个模板基础上修改而来。红框中是我修改的结果。其他选项没有变化。
到XposedTools目录下,执行:./build.pl -t arm:19命令,这表明我要编译arm平台上SDK=19版本的xposed框架。注意,./build.pl –help会打印出使用方法。build.pl是一个perl脚本。
可以发现build.pl跑到AOSP源码目录下,执行了:
在使用build.pl时,它还依赖一些Perl的类库,这些库包括:
build.pl执行过程中,如果报还有其他依赖库未找到,请通过下面命令
apt-cache search perl XXX
来查找需要apt-get install哪个目标库。XXX是build.pl执行过程中报错时提供的库信息。
编译结果是一个xposed-v65-arm-custom-build-xyz-20151030.zip包,这个包可以通过recovery刷到手机上。包的内容就是files文件夹下的内容,包含:
XposedInstaller是Xposed的App,用于管理Xposed框架和插件App。本节我们主要讨论它是如何安装Xposed框架和插件App的。
郑重声明:手机安装xposed框架有变砖的风险,慎重!!!
首先,在安装xposed需要Root系统,在Android5.0版本以下可以直接安装。
从Android 5.0开始,谷歌使用ART替换Dalvik,所以xposed安装有点麻烦,分为两个部分:xposed*.zip 和 XposedInstaller_3.1.apk。zip文件是框架主体,需要进入Recovery后刷入,apk文件是xposed模块管理应用,主要用于下载、激活、是否启用模块等管理功能。
1,首先,根据需要下载xposed*.zip 文件,源码下载地址为:http://dl-xda.xposed.info/framework/。
根据自己的Android版本来选择对应的sdk版本,然后根据自己手机cpu的位数,如果是64位cpu则下载 arm64 文件夹中的文件,否则下载arm文件夹中的,x86一般是模拟器用的。博主下载的是xposed-v86-sdk23-arm64.zip。sdk21 是 Android 5.0,SDK22 是 Android 5.1,SDK23 是 Android 6.0,SDK27 是 Android 8.0.
2,接着下载XposedInstaller_xxx.apk ,例如下载XposedInstaller_3.1.1.apk
3,刷入TWRP
Android 的 Recovery 可以简单理解为windows的PE系统,PE系统有很多,像番茄花园、雨林木风之类的,那么Android里面呢,我们用TWRP这个Recovery系统。相关介绍可以从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机
到这里选择你的设备对应的twrp recovery版本去下载。
注意:一定要下载你的设备对应的twrp版本
接着刷入twrp,先连接手机,进入开发者模式,打开usb调试,用下面的命令:
adb reboot bootloader
进入bootloader,接着用下面的命令刷入twrp,例如本机刷入的是twrp-3.0.2-2-angler.img镜像。
fastboot flash recovery twrp-3.0.2-2-angler.img
4,用TWRP刷入xposed*.zip
成功输入TWRP之后,将我们下载的xposed*.zip文件放到sdcard上,博主以xposed-v86-sdk23-arm64.zip为例,接着进入Recovery。
关机后同时按住电源键和音量下键3秒钟,就会进入bootloader,接着按两下音量减键,看到recovery,电源键确认进入,此时屏幕下方会有一个滑动条,向右拉即可:
点击安装,选择我们放在sdcard上的xposed-v86-sdk23-arm64.zip,然后把滑动条拉到右边即可开始安装:
5,安装XposedInstaller_3.1.1.apk
刷入完毕后,第一次开机可能要优化应用,这是正常的,接着安装XposedInstaller_3.1.1.apk就可以开始愉快的使用xposed啦。
xposed插件,在xposed世界里我们说它是插件,但是放到Android世界里它就是一种特殊的APP。这种类型的APP由xposed框架识别并加载,然后hook到其他的App进程。
这里提供一个学习xposed的网站:http://xposed.appkg.com/category/xposed。xposed提供了很多的xposed插件。可以查看详细的插件安装过程。