1.简介
虽然依旧能抓到大部分Android APP的HTTP/HTTPS包,但是别高兴的太早,有的APP为了防抓包,还做了很多操作:
① 二次加密
有的APP,在涉及到关键数据通信时,会将正文二次加密后才通过HTTPS发送,我们抓包抓到的是一堆二进制base64
② 自带HTTP Client
像支付宝那样的变态,自己带了一个基于so的HTTP Client库,对于关键数据,都不走URLConnection和OkHttp,而是走自己的HTTP Client库,甚至一些WebView页面的渲染,都是先用自带的HTTP Client请求得到json数据,然后填到HTML模板里面,再在WebView里渲染出来。
③ SSL/TLS Pinning,APP自带服务端证书,除了自带证书什么都不信
apk在开发时就将服务端证书一块打包到客户端里。这样在HTTPS建立时与服务端返回的证书比对一致性,进而识别出中间人攻击后直接在客户端侧中止连接。
解决原理:
客户端不是会做两个证书间的一次性校验吗,那么就通过hook的方式将此次校验的结果返回true或者干脆不让其做校验。当然这种做法只能在越狱环境下实现,但对于抓包来说,这已经足够了。
2.方案一
方案一:Xposed+JustTrustMe+Android模拟器(安卓手机需要Root,该方法有手机变砖风险,建议在模拟器下操作)。
大名鼎鼎得Xposed,是Android平台上最负盛名的一个框架。在这个框架下,我们可以加载很多插件App,这些插件App可以直接或间接操纵系统层面的东西,比如操纵一些本来只对系统厂商才open的功能(实际上是因为Android系统很多API是不公开的,而第三方APP又没有权限)。有了Xposed后,理论上我们的插件APP可以hook到系统任意一个Java进程(zygote,systemserver,systemui)。
功能太强大,自然也有缺点。Xposed不仅仅是一个插件加载功能,而是它从根上Hook了Android Java虚拟机,所以它需要root,所以每次为它启用新插件APP都需要重新启动。而如果仅是一个插件加载模块的话,当前有很多开源的插件加载模块,就没这么复杂了。
Xposed框架以在不修改APK文件的情况下修改程序的运行。
这套框架需要设备解锁了Bootloader方可安装使用[1](root为解锁Bootloader的充分不必要条件,而xposed安装仅需通过TWRP等第三方Recovery卡刷安装包而不需要设备拥有完整的root权限)。
(1) xposed 是啥?
xposed是一个框架,上面有很多模块,这些模块都依赖于xposed这个框架,之所以称xposed是第一神器,就是因为这些模块可以完成许多匪夷所思的功能,例如:修改微信的界面,自动抢红包模块,自定义程序的文本,防止微信消息撤回,防止BAT三大流氓的全家桶相互唤醒、连锁启动,锁屏后自动干掉APP防止后台运行耗电,还有很多修改App或手机数据的装B模块等等。
(2) xposed 的原理?
xposed 原理就是修改系统的关键文件,然后当APP调用系统API时,首先经过xposed,而这些基于xposed的模块就可以选择性的在App调用这些api的时候干一些”坏坏”的事情,或者修改返回的结果,这样app在运行的时候效果就会改变,但app本身并没有被破坏,只是调用系统api的时候,Android系统的表现发生了变化,这就是钩子,专业术语hook。所以,说白了,xposed就是个强大的钩子框架。
来一段专业的原理解释吧:
作者通过替换 /system/bin/app_precesss 程序控制zygote进程,使得它在系统启动的过程中会加载Xposed framework的一个jar文件即XposedBridge.jar,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持,并且能够允许开发者独立的替代任何class,例如framework本身,系统UI又或者随意的一个app。
除此之外使用这种方法的好处是ROM,APP都没有产生任何变化,因此理论上就不会造成设备变砖,同时撤掉修改也非常容易,仅需要停用 Xposed framework 即可完全恢复原样。
XposedInstaller(xposed框架)是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。
JustTrustMe是Github上的一个开源工程,他是一个Xposed模块,用来禁止SSL证书验证。以下是其简介。
JustTrustMe:An xposed module that disables SSL certificate checking. This is useful for auditing an appplication which does certificate pinning.
Xposed安装器下载地址
安卓5.0版本以下下载地址:百度网盘 请输入提取码 密码:uiu8
安卓5.0版本以上下载地址:https://files.cnblogs.com/files/pingming/xposedinstaller.apk
JustTrustMe Relese版本下载地址:https://files.cnblogs.com/files/pingming/JustTrustMe.apk github:https://github.com/Fuzion24/JustTrustMe/releases
以下是安装步骤:
2.1安装Xposed安装器
Xposed是一款特殊的Android应用,通过替换system\bin\下面的的app_process等文件来控制zygote进程,进而实现控制手机上所有的app进程;缺点就是不能hook应用的so中的函数。
官网地址:https://repo.xposed.info/module/de.robv.android.xposed.installer 。如下图所示:
敲黑板!!!官网地址中给出两个安装包,一个是Android版本5.0以下下载地址,一个是以上下载地址需要你根据你的手机系统版本去下载。
1.宏哥这里直接在模拟器的浏览器中输入官网地址下载,省的后边还要将安装包拖到模拟器中,宏哥这里的版本是7.0。如下图所示:
2.根据官网提示,宏哥下载大于5.0的安装包,也就是最上边的下载地址:[OFFICIAL] Xposed for Lollipop/Marshmallow/Nougat/Oreo [v90-beta3, 2018/01/29] | XDA Forums 。如下图所示:
3.下载完成安装包,安装到模拟器,如下图所示:
2.2安装Xposed框架
安装好Xposed安装器后,发现Xposed框架没有安装,那么接下来就安装Xposed框架,安装过程需要Root权限,完成后重启。具体操作步骤如下:
1.需要安装插入Xposed框架,点击“Version89”,然后点击“install”,如下图所示:
竟然提示下载失败,查了下原因应该是网络的关系(不是我们自己的网络,而是无法连接官方获取安装文件),这就说明其实只要能连接,不管是官方也好、神盾也罢,都是可以安装成功的。
既然自动方式行不通,我们就手动解决这个问题。以下步骤我是在夜神模拟器上实现的,不管是真机还是其它模拟器,实现方式都一样。具体解决方法如下:
(1)先把Xposed安装器安装好(随便你用官方的还是神盾的),然后回到主界面,打开系统应用中的文件管理器(其它方式请自行努力找到这个文件夹),如下图所示:
(2)按此顺序进入文件夹:storage > emulated > 0 > Android > data > de.robv.android.xposed.installer > cache>downloads>framework
注1:在最外层直接点击 sdcard 也能进入到 Android 那一层。
注2:有些版本或设备 Android 直接就在最外层。
注3:你可能只有cache目录,那你自己手动创建后边的两个文件夹,宏哥这里都自动创建好了。
(3)点击夜神模拟器侧边栏的电脑图标,选择打开电脑文件夹,会跳转打开电脑的目录C:\Users\Administrator\Nox_share,将下载好的安装器zip文件【xposed-v88-sdk25-x86.zip】复制到ImageShare目录下即可
(4)下载MT管理器,下载地址:MT管理器(bin.mt.plus) - 2.14.5 - 应用 - 酷安 。拖拉到模拟器中安装完成,点击打开应用,左边打开Pictures目录就可以看到刚才电脑ImageShare目录中下载好的安装器zip文件【xposed-v88-sdk25-x86.zip】
(5)右边点击进入到storage > emulated > 0 > Android > data > de.robv.android.xposed.installer > cache>downloads>framework目录,然后长按左边的269953fb.0文件,点击复制即可复制到右边打开的目录那里
(6)关键来了,直接重启模拟器,然后打开Xposed安装器,点击右上角的三个点,选中【Show outdated versions】:
(7)奇迹出现了可以看到我们下载的Version88导入成功了:
2.接下来一切就简单了,点击【Version88】,点击【Install】,如下图所示:
3.选中【永久记住选择】,点击【允许】,会发现安装器安装成功,那么一切大功告成,
4.重启模拟器,
5.再次打开Xposed安装器,会发现安装器已经激活了:
敲黑板!!!如果安装错误,找到模拟器中的“设置”-“应用兼容”-“关闭”,然后重新安装Xposed框架
2.3安装JustTrustMe
2.3.1JustTrustMe 简介
JustTrustMe 一个用来禁用、绕过 SSL 证书检查的基于 Xposed 模块。
项目地址:https://github.com/Fuzion24/JustTrustMe
2.3.2实现原理分析
JustTrustMe 是将 APK 中所有用于校验 SSL 证书的 API 都进行了 Hook,从而绕过证书检查的,所以弄请原理之前,先得弄清楚 Android 上实现 Https 通信有哪几种方式。
Android 上实现 Https 的几种方式
1.通过 OkHttp 来实现
2.自定义证书和 HostnameVerify 来实现 Https 校验
3.通过 HttpsURLConnection 来实现HttpsURLConnection 中进行 SSL 证书校验
2.3.3下载安装JustTrustMe
1.模拟器访问JustTrustMe项目地址,如下图所示:
2.下载安装包,安装JustTrustMe到模拟器中,错误提示不用管。
2.4 安装完成后打开模块选项
1.打开Xposed Installer,点击右上角的三个横线图标,如下图所示:
2.点击“模块”,如下图所示:
3.在模块里面勾选JustTrustMe,重启即可。如下图所示:
至此,完成配置,再加上之前的Charles或者Fiddler4的HTTPS配置,就能抓取HTTPS请求了。
3.小结
今天主要讲解和分享了:
(1)使用xposed hook绕过SSL证书验证
(2)在xposed上安装这个框架就可以了
(3)JustTrustMe的原理就是将各种已知的的HTTP请求库中用于校验证书的API都进行Hook,使无论是否是可信证书的情况,校验结果返回都为正常状态,从而实现绕过证书检查的效果。
Xposed 框架安装器可以看成是个Xposed 框架的管理工具,在这里可以安装、更新Xposed 框架,也可以卸载Xposed 框架,查看安装日志。也可设置Xposed 框架安装器是否联网更新框架及模块。
3.1JustTrustMe有个bug
需要注意的是JustTrustMe有个坑,不要下载它Github中编译的Latest release版本,其实那是一个很古老的版本,对于APP内嵌的WebView没有做处理,安装以后,URLConnection、OkHttp通信的HTTPS是可以抓到了,但是APP内嵌的WebView仍然出错。所以最好git clone它的最新源代码,然后自行编译。
也可以下载我编译的最新版本:关注宏哥公众号,回复“JustTrustMe” 获取下载地址和源码。
当然这个方案也有缺点,毕竟手机被Root后,还安装了Xposed框架,有的APP可是会检测的,发现手机被Root,或者自身被Xposed Hook,就罢工了。
每天学习一点,今后必成大神-
往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问):
Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试
Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南
Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架
Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架
Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程