《吐血整理》高级系列教程-吃透Fiddler抓包教程(28)-Fiddler如何抓取Android7.0以上的Https包-下篇
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版本以下下载地址:https://pan.baidu.com/s/1dEToAvJ 密码: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的安装包,也就是最上边的下载地址:http://forum.xda-developers.com/showthread.php?t=3034811 。如下图所示:
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管理器,下载地址:https://coolapk.com/apk/bin.mt.plus 。拖拉到模拟器中安装完成,点击打开应用,左边打开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,就罢工了。
《吐血整理》高级系列教程-吃透Fiddler抓包教程(28)-Fiddler如何抓取Android7.0以上的Https包-下篇的更多相关文章
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(30)-Fiddler如何抓取Android7.0以上的Https包-番外篇
1.简介 通过宏哥前边几篇文章的讲解和介绍想必大家都知道android7.0以上,有android的机制不在信任用户证书,导致https协议无法抓包.除非把证书装在系统信任的证书里,此时手机需要roo ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(26)-Fiddler如何抓取Android7.0以上的Https包-上篇
1.简介 众所周知,假如设备是android 7.0+的系统同时应用设置targetSdkVersion >= 24的话,那么应用默认是不信任安装的Fiddler用户证书的,所以你就没法抓到应用 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(29)-Fiddler如何抓取Android7.0以上的Https包-终篇
1.简介 上一篇宏哥介绍的Xposed是一款可以在不修改APK的情况下影响程序运行的框架.可以编写并加载自己编写的插件app,实现对目标apk的注入.拦截等.一般研究移动安全的都会使用Xposed. ...
- [转]Fiddler抓取Android真机上的HTTPS包
此篇文章转载自:http://blog.csdn.net/roland_sun/article/details/30078353 工作中经常会需要对一些app进行抓包, 但是每次默认都是只抓http请 ...
- 吐血整理 Delphi系列书籍 118本(全)
Delphi 教程 系列书籍 网友(老帅)整理 001_<Delhpi6数据库设计思想与实践> 002_<Delphi6应用开发指南> 003_<Delphi6开发人员指 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(34)-Fiddler如何抓取微信小程序的包-上篇
1.简介 有些小伙伴或者是童鞋们说小程序抓不到包,该怎么办了???其实苹果手机如果按照宏哥前边的抓取APP包的设置方式设置好了,应该可以轻松就抓到包了.那么安卓手机小程序就比较困难,不是那么友好了.所 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(33)-Fiddler如何抓取WebSocket数据包
1.简介 本来打算再写一篇这个系列的文章也要和小伙伴或者童鞋们说再见了,可是有人留言问WebSocket包和小程序的包不会抓,那就关于这两个知识点宏哥就再水两篇文章. 2.什么是Socket? 在计算 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(24)-Fiddler如何优雅地在正式和测试环境之间来回切换-中篇
1.简介 在开发或者测试的过程中,由于项目环境比较多,往往需要来来回回地反复切换,那么如何优雅地切换呢?宏哥今天介绍几种方法供小伙伴或者童鞋们进行参考. 2.实际工作场景 2.1问题场景 (1)已发布 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(25)-Fiddler如何优雅地在正式和测试环境之间来回切换-下篇
1.简介 在开发或者测试的过程中,由于项目环境比较多,往往需要来来回回地反复切换,那么如何优雅地切换呢?宏哥今天介绍几种方法供小伙伴或者童鞋们进行参考. 2.实际工作场景 2.1问题场景 (1)已发布 ...
随机推荐
- 5.4 NOI模拟
\(5.4\ NOI\)模拟 \(T1\) 想到分讨,但是暴力输出一下方案之后有很多特别的情况要讨论,就弃了... 假设\(a\)是原序列,\(b\)是我们得到的序列 设\(i\)是最长公共前缀,\( ...
- javaScript 事件循环机制
JavaScript是单线程的编程语言,只能同一时间内做一件事.但是在遇到异步事件的时候,js线程并没有阻塞,还会继续执行,这就是因为JS有事件循环机制. 事件循环流程总结 主线程开始执行一段代码, ...
- java的stream让我灵光一现
说实话,我是一个到了退役也没有搞明白C++的istream和ostream的. 刚开始的时候我把<iostream>直接拆解成ios和tream 真,果粉暴露 退役之后划水,倒是从java ...
- Luogu3090 [USACO13NOV]空荡荡的摊位Empty Stalls (动态规划)
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...
- SpringBoot整合Redis实现常用功能
SpringBoot整合Redis实现常用功能 建议大小伙们,在写业务的时候,提前画好流程图,思路会清晰很多. 文末有解决缓存穿透和击穿的通用工具类. 1 登陆功能 我想,登陆功能是每个项目必备的功能 ...
- 谈谈你对Promise的理解
一.Promise是什么? 理解 抽象表达: Promise 是一门新的技术(ES6 规范) Promise 是 JS 中进行异步编程的新解决方案(备注:旧方案是单纯使用回调函数) 具体表达: 从语法 ...
- ceph 010 clustermap ceph调优
cluster map [ceph: root@clienta /]# ceph mon dump epoch 4 fsid 2ae6d05a-229a-11ec-925e-52540000fa0c ...
- [CSP-S 2019 day2 T1] Emiya家今天的饭
题面 题解 不考虑每种食材不超过一半的限制,答案是 减去 1 是去掉一道菜都不做的方案. 显然只可能有一种菜超过一半,于是枚举这种菜,对每个方式做背包即可(记一维状态表示这种菜比别的菜多做了多少份). ...
- 【JAVA】学习路径35-InputStream使用例子
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; pu ...
- Java接口自动化测试框架系列(一)自动化测试框架
一.什么是自动化测试 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程. 通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例一步步执行测试,得到实际结果与期望结果的比较. 为了节省 ...