最近由于工作要求,需要对移动应用进行安全分析,同时涉及Android/iOS两部分内容。学习之前先看了一下宫司机的移动APP培训PPT...看完以后发现差距实在太大,非常无奈,只能脚踏实地先从基础学起,这次先从Android的Xposed开篇,讲述这一段跳坑之旅。
Xposed为何物?
众所周知,Android系统是Google基于Linux平台开发的移动端操作系统,那么同样具备开源的特性,众多手机厂商也是基于以上特点,二次开发了自己的定制化系统,比如Flyme、MIUI等。
我们知道Linux系统权限最高的用户为root,对系统内的全部文件具备读、写、执行的权限,可以说权限之高令人深感恐怖如斯。Google及其它手机厂商基于安全性、简便性等方面考虑并没有开放手机系统的root权限,但是广大的搞机爱好者怎么可能放过这个高权限的帐号乖乖受限于普通用户呢?于是,自Android诞生起,围绕获取该系统root权限的各种高端操作便层出不穷,这里简单提一下,毕竟不是本篇的重点哈:
1. 本地提权漏洞(各种CVE、su命令获取、setUID文件获取等);
2. 刷第三方Rom,自带root或很容易获得root;
3. 厂商预留root后门;
诸多软件厂商也是看到了广大Android用户在root方面的需求,因此也推出了众多“一键Root应用”,其实也有不少相关应用是带后门的,以root权限运行的恶意后门对于普通用户而言其实很难发现和清除的,即使不带后门也会带一些广告,毕竟天下没有免费的午餐,因此对于普通用户而言需要谨慎选择root软件,对于广大搞机爱好者而言,在有能力的情况下,其实自己root安全性更高。
那么root以后可以干什么呢?不同用户的需求其实不同,有的是为了卸载预装软件,有的为了手机美化,有的是为了装一些高端软件......无论初衷如何,总之也是为了更好地使用自己的手机。
说了这么多还是没说到Xposed上,其实Xposed全称为Xposed installer,其最大作用在于给已经root的手机(亦有不用root使用Xposed的方式,下面也会简单介绍一下)提供更多的模块,在不修改APK的情况下影响程序运行(修改系统),这个说法有点抽象,简单点说,你可以安装一些模块修改系统信息、应用信息、去广告、丰富应用功能,比如微信红包助手,消息防撤回等等。用户既可以使用网上现成的模块丰富手机功能,亦可根据实际需要自行编写模块使得使用效果更好。同时Xposed框架支持版本丰富,支持从Android 2.x到8.x,同时兼容ARM32、ARM64、Intel x86架构CPU,对于Android开发者而言,可谓是居家旅行,杀人越货的必备良品。
Xposed框架核心技术在于系统进程注入技术,所谓“不修改APK的情况下影响程序运行(修改系统)”其实是利用Hook技术对要修改的进程进行注入,如果要注入系统进程就必须要root权限,这也是Xposed框架需要root权限的原因,Xposed框架也由此被称之为“Hook神器”。
顺便提一下不用root也能安装Xposed框架思路:
一直一来Xposed框架安装需要满足root权限的条件,有时不同设备不同ROM都可能导致安装失败,或引发无限重启手机变砖等问题,且目前高版本Android获取root权限也没有那么轻松,很多厂商也不约而同关闭了自身系统的root通道。正是基于以上问题,终于有大表哥制作出了“VirtualXposed”实现了非root情况下安装Xposed框架
我们思考一下Xposed为什么需要root权限,原因是需要对其它进程进行注入,没root权限不行。我们或多或少听说过有一种技术叫做“双/多开技术”,其本质原理是在系统上启一个容器,将该应用在容器内运行,那么容器对其中的应用具备绝对控制的能力。
VirtualXposed其实本质一样,启动一个容器,将需要修改的APP在VirtualXposed中运行,然后HOOK自己的进程并进行修改,这样就无需root权限了。可以理解为在PC上安装了一台虚拟机,里面安装了和宿主机相同的应用,然后在虚拟机里修改应用。
以上就是VirtualXposed应用的相关原理
下面还是回归Xposed本身,说一说怎么安装
Xposed如何安装?
原料如下:
安卓4.4.4系统手机x1
数据线x1
上古时代的Vivo X510w在沉寂数年之后,终于迎来的焕发第二春的机会,想当初刚买这手机的时候真是小白一枚,被奸商坑,不知道这款只支持联通3G,自己又是移动的卡,所以头两年用的都是移动2G网,真是哭晕在厕所。
好了,言归正传,根据我上面的描述,安装Xposed之前需要先把手机给root了,方法很多啊,我这边简单提一下
使用PC应用连接数据线方式root或者直接在手机上安装应用root,我这里用的是"大数字一键root"安卓版,下载安装以后,手机放一边让应用自己动就行。这里吐槽一下"大数字一键root"PC版,搞半天没root成功,全家桶倒是装了一堆,建议各位谨慎使用。顺便一提,高版本Android(一般是Android 6.0以上)一键root的应用一般不支持,需要自行解锁Bootloader刷Recovery,这里不细说了,反正坑多练手。
一旦root成功以后,即可去官网下载Xposed Installer
apk下载完成后安装即可,适时给下root权限即可完成安装
这里先给个警告:安装Xposed框架是一件存在风险的事情,安装错误的框架可能导致手机变砖或者无线重启,请慎重
安装完成以后,一开始“框架”部分是红色的未激活状态,此时先点击一下“安装/更新”选项,给予root权限后等待重启
启动完成后,激活的状态变成绿色就可以开始我们的跳坑之旅了~
下面分别从安装网络模块和自行编写模块两个角度从最基础的角度介绍Xposed的强大之处~
神奇模块安装篇
刚刚完成安装的Xposed Installer中是没有任何模块,仅仅是一个具备Hook技术的空壳而已,如果在“模块”部分简单看一下,发现里面是空的
Xposed里面的下载模块自带很多优秀的模块,可自行选择下载
可自行搜索并前往下载apk并安装,然后在Xposed启用即可,如果觉得里面的框架不全,可以网上自行搜索自己感兴趣的Xposed的模块,安装并启用即可。一般可以安装一些“App Setting”、“微X助手”、“支付助手”等模块
切记一点:由于Xposed的原理是进程注入技术,是在进程启动时进行注入,同时注入系统进程和应用进程,为保证注入成功,在下载安装模块后,手机需要重启,是的进程重新启动时进行Hook才能完成该模块的启用。
完成安装以后手机屏幕上会多出该模块图标,Xposed框架中也会多出该模块,下图为安装“上帝模式”模块后的效果
当然模块安装还是有风险的,同一模块在不同手机上表现不同,因此需要谨慎,比如我安装的这个“上帝模式”,原本用途是调整APP中各个模块的位置,自行修改其中的模块,但是在我的Vivo重启后,居然先对我的锁屏界面自行启用修改,导致根本解不了锁,真是醉了
重启后效果一样,本来以为要双清,后来找到了开机禁用Xposed框架自启的方法“开启时连续按任意实体键”即可禁用Xposed框架,这还真是救人一命,此为一坑切记注意。
试验过程中下了一个叫“文本自定义”的模块,可以修改APP中显示的文字,将广告王“XX手机助手”中的“手机”改成了“渣渣”,点开以后效果显示一级棒,这里就不放图了,可以自行下载安装感受一下~
神奇模块自研篇
说起来这里才能算是Xposed入门的第一课,前面部分其实和自己下点软件安装没啥差别,从这里开始会重点介绍一下,如何自己编写模块并添加到手机中。
俗话说“天下没有免费的午餐”,网上下载的Xposed模块或多或少还是有些不放心,毕竟权限这么高的东西,别人想动点手脚而不被发现还是很有可能的。所以想要来点安全的模块,还是需要“自己动手,丰衣足食”,老当伸手党是不会有进步的,下面我们介绍一下如何使用Android Stduio自行编写Xposed模块,然后和手机联调~
你需要
安装Xposed框架的手机x1
数据线x1
Android Stduio 3.1.2
基础java知识,有安卓开发知识更佳
OK,准备正式入坑吧~
首先自行下载Android Stduio(以下简称AS)
AS安装也是一个大坑,由于我大天朝某不可描述的存在,导致安装过程下载插件根本下载不下来,网上也有一些对应的解决办法,这个可以自行百度
下载完成以后需要新建一个空白项目,一路Next,但是可能会和我一样卡在“Gradle:Build”这一步,寸步不得进,网上方法很多,但是大多是编译项目时候出现该问题,我这项目都没建立起来,这不搞笑的吗?
找了很久,终于找到了退敌良策
解决Android Studio新建或导入工程总是重新下载gradle,以至于新建初始化build缓慢的问题
按照步骤操作果然解决,真是良心博主
OK,创建项目成功,接下来就可以正式编写相关模块了
参考教程如下:
按照教程操作就可以了,一些注意点我这边说一下:
- build.gradle在依赖中添加如下两行足矣
provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'
- 修改完build.gradle后记得及时点击右上角“sync now”完成同步,不然编写下面类的时候会找不到Xposed的api引发报错
- 代码不要照搬照抄,根据你项目的实际情况进行修改
- 有些Xposed项目代码并没有完成给出需要import的库,写代码时候会报错,在AS中按下“Alt+Enter”快捷键可以自动添加相关的基础类库
仔细看一下Tutorial类的源码,分析一下这个模块的作用:
public class Tutorial implements IXposedHookLoadPackage {
public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
XposedBridge.log("Loaded app: " + lpparam.packageName);
}
}
其实很简单:这个类实现了Xposed类库中的IXposedHookLoadPackage ,在Xposed的日志中输出系统中加载的app名称
然后就是联调手机进行模块安装调试了
当然AS中也可以提供模拟环境调试该模块,但是终归不是真机,连接真机调试其实坑也不少,这边说一下
首先手机通过数据线连接电脑,手机上开启允许“USB调试”
连接成功后,电脑的“设备管理器”里是可以看到的
如果连接不成功很可能是驱动问题,实在没办法的情况下,安装一个PC版XX手机助手或者豌豆荚,让这些软件自行安装驱动,完成后卸载软件即可
然后在AS的菜单中依次点击“Run”--“Edit Configurations”,在Target中选择“USB Devices”
然后左下角“logcat”日志中就会出现你的手机
此时即可shift+f10运行,但是会遇到一个问题,报错找不到MainActivity
看这篇教程,里面只有Tutorial类,没有Main类,且教程中的AndroidManifest.xml也没有Main类的描述,因此找不到入口点,这个时候解决方法有两个:
- 自行修改AndroidManifest.xml,将Tutorial作为主类;
- 修改Edit Configurations,将Launch Options修改成Nothing
因为这个Tutorial并没有涉及图形界面的代码,因此启动项选为Nothing即可
万事俱备,运行的时候手机会提示收到外部在安装应用,此时手机上选择“允许”即可
安装完成以后即可在模块处看见该项目
启动该模块,然后重启手机即可在日志输出的地方看见手机开机以来加载的全部包
这里一定要重启手机,让模块启用执行进程注入,否则不会有结果,之前在这里折腾许久不得其法真是浪费时间。
OK,到这里Xposed的入门教程就完成了,根据实际情况后续会推出其它教程,敬请期待~
还不快抢沙发