《吐血整理》高级系列教程-吃透Fiddler抓包教程(27)-Fiddler如何抓取Android7.0以上的Https包-中篇
1.简介
上一篇中,宏哥讲解和分享了一些如何快速解决的临时应急的的方法,但是小伙伴或者童鞋们是不是觉得是一些头痛医头脚痛医脚的方法,治标不治本,或者是一些对于测试人员实现起来比较有一定难度。所以今天宏哥再介绍和分享一下治本的方法。
2.追本溯源
要想从根本上解决问题,我们找到根源从跟上解决问题即可!究其根源,targetSdkVersion >= 24的应用在android 7.0+系统的设备中之所以没法被抓包,是因为android 7.0之后的应用是默认只信任系统证书,不信任用户证书,那么我们可以想办法将Fiddler证书装到系统证书目录下,伪装成系统证书,那么就不存在因为fiddler证书不被信任而无法抓包的问题了。找到根源了,既然是用户证书不被信任,那么我们制作一个系统证书安装在手机上你就解决这一问题了。接下来宏哥就按这个思路解决问题。
1.宏哥之前演示可以抓安卓手机的https的包,是因为宏哥的夜神模拟器的Android版本是5.1.1,所以可以抓到包。
2.宏哥点击夜神模拟器右边菜单里的夜神多开器,如下图所示:
3.添加一个Android版本大于7.0的模拟器,如下图所示:
4.设置好代理,再次使用Fiddler抓包百度手机助手。提示网络繁忙。具体表现为APP中的WebView无法打开内容,抓不到APP的包了,如下图所示:
5.Fiddler抓包结果:Fiddler中可以看到大量的CONNECT然后就没有下文了。如下图所示:
3.导出Fiddler证书
1.下载安装Fiddler抓包工具,下载完成之后先不要点击打开运行(如果你是首次安装,如果你已经安装好了,不要启动fiddler)。
2.下载fiddlercertmaker.exe这个Bouncy Castle证书生成器,因为新版本的Android拒绝超过两年有效期的证书,双击下载好的fiddlercertmaker.exe(确保已关闭Fiddler),会弹出提示导入证书成功这个对话框。(如果你的新版本可以安装,这一步可以省略)。
3.将Fiddler的证书导出到电脑,点击Tools -> Options -> HTTPS -> Actions -> Export Root Certificate to Desktop。如下图所示:
4.导出成功之后,就可以在桌面上看到导出的FiddlerRoot.cer证书文件 。如下图所示:
4.下载和安装openssl
1.下载Window版openssl, 下载地址:http://slproweb.com/products/Win32OpenSSL.html,下拉到下面,选择最上面的64位EXE点击下载安装即可,如下图所示:
2.安装完成之后,在openssl的安装目录bin下,打开cmd命令行试试openssl命令是否生效,要是有如下输入信息,就说明安装成功:
5.证书格式转换与重命名
1.将Fiddler cer证书转pem证书,在cmd输入如下命令进行转换:
openssl x509 -inform DER -in C:\Users\DELL\Desktop\FiddlerRoot.cer -out C:\Users\DELL\Desktop\FiddlerRoot.pem
2.用md5方式显示pem证书的hash值, 在cmd输入如下命令:
openssl x509 -inform PEM -subject_hash_old -in C:\Users\DELL\Desktop\FiddlerRoot.pem
从上面可以看到,咱们生成Fiddler证书的hash值是269953fb
3.将pem证书重命名,使用上面显示的值269953fb对pem证书进行重命名,以下命令仅适用于window,linux请用mv。如下图所示:
ren C:\Users\DELL\Desktop\FiddlerRoot.pem 269953fb.0
注意:ren
命令第二个参数,直接输入新的文件名即可,不要输入完整路径,否则会报错。如下图所示:
6.安装证书到系统目录(/system/etc/security/cacerts)
6.1适合有Android基础的开发者
1.找一台root过的手机或者任意一款模拟器,因为只有root过的手机才有可能执行各种高权限的命令。我这边下载了一款叫夜神android 7系统的模拟器。如下图所示:
2.cmd输入adb connect 127.0.0.1:62001,使adb跟夜神模拟器连接上(这部分不清楚的可以看宏哥有关Appium的文章,里边有详细的介绍如何连接)。
(1)安装完夜神模拟器在cmd检测时,提示adb server version (36) doesn't match this client (41); killing...
说明andriod adb版本和模拟器adb版本不匹配
查找原因:
(2)查看Android-adb 版本,cmd输入adb --version,可以看到当前版本是1.0.41 ,简称41版本
(2)查看模拟器(夜神)中adb的版本,在安装目录\Nox\bin下有个nox_adb.exe ,其实就是adb.exe。(这里便于和Android的adb做区分)
(3)然后在上一步中的目录地址栏输入cmd进入命令行,然后输入nox_adb,看到模拟器中的adb版本是36
(4)找到原因后,将platform-tools文件夹中adb.exe 替换到模拟器根目录下的nox_adb.exe即可,接下来把android-sdk里面的adb.exe版本复制出来,然后改名为nox_adb.exe,然后替换\Nox\bin下的nox_adb.exe,就可以了,关闭模拟器,再次启动模拟器进行检测,能看到127.0.0.1:62001 就是模拟器的设备名称表示连接成功
3.cmd 输入adb shell,进入到夜神模拟器的终端shell中。直接输入后,发现报错:error:more than one device/emulator 。如下图所示:
(1)查看是由于宏哥打开了两个模拟器,直接输入命令,系统不知道进入那个模拟器,你必须指定一个。如下图所示:
(2)指定模拟器然后进去shell,就可以成功进入,如下图所示:
4.cmd 输入 cd /system/etc/security, 然后输入ls -l, 可以看到cacerts目录,我们只有读与执行权限,并没有写入的权限。如下图所示:
5.cmd输入chmod 777 cacerts, 让咱们对该目录拥有写入权限,执行之后,在输入ls -l可以看到我们已经获取到写入权限了。如下图所示:
敲黑板!!!
有些小伙伴可能在其他模拟器输入chmod 777 cacerts,会被提示Read-only file system。如下图所示:
这种情况需要重新挂载一下系统,设置为可读写,输入mount -o remount,rw /system,然后再输入chmod 777 cacerts,你会发现可以成功设置了。如下图所示:
6.输入exit退出shell终端,然后输入adb push C:\Users\DELL\Desktop\269953fb.0 /system/etc/security/cacerts(同样道理需要指定模拟器),将事先转换好的Fiddler证书推送到夜神模拟器的/system/etc/security/cacerts目录下。如下图所示:
7.到这里就已经成功的把Fiddler证书安装到系统目录了,咱们点击模拟器的设置 -> 安全性与位置信息 -> 加密与凭据 -> 信任的凭据 -> 系统,往下拉可以看到咱们的Fiddler证书。如下图所示:
现在再打开Fiddler进行抓包,你会发现可以成功抓包了(记得模拟器在wifi那里设置好代理),如下图所示:
6.2适合没有Android基础的小白
1.找一台root过的手机或者任意一款模拟器,因为只有root过的手机才有可能执行各种高权限的命令。我这边下载了一款叫夜神android 7系统的模拟器
2.点击夜神模拟器侧边栏的电脑图标,选择打开电脑文件夹,会跳转打开电脑的目录C:\Users\Administrator\Nox_share,将转换好的Fiddler证书269953fb.0复制到ImageShare目录下即可
3.下载MT管理器,下载地址:https://coolapk.com/apk/bin.mt.plus 。拖拉到模拟器中安装完成,点击打开应用,左边打开Pictures目录就可以看到刚才电脑ImageShare目录的Fiddler证书269953fb.0
4.右边点击进入到system/etc/security/cacerts目录,然后长按左边的269953fb.0文件,点击复制即可复制到右边打开的目录那里
5.一般人到这里以为就结束,但是你留意看一下刚才复制到system/etc/security/cacerts目录下的269953fb.0文件,你会发现跟其他已有的系统证书相比,269953fb.0根本就没有读的权限,到时你到信任的凭据也是没法找到这个Fiddler证书的,点击MT管理器的左上角,找到打开终端
6.进入到终端之后,输入以下命令将269953fb.0文件设置为可读即可
7.再看看system/etc/security/cacerts目录下269953fb.0文件的权限,发现确实有读权限了
8.咱们回到模拟器桌面,点击模拟器的设置 -> 安全性与位置信息 -> 加密与凭据 -> 信任的凭据 -> 系统,往下拉终于看到咱们的Fiddler证书,尝试一下抓包也是没问题了
现在再打开Fiddler进行抓包,你会发现可以成功抓包了(记得模拟器在wifi那里设置好代理),如下图所示:
7.小结
1.雷电4模拟器经过上述设置之后,你会发现依然是没法成功抓包,这时需要允许以下命令给雷电4设置全局代理
adb shell settings put global http_proxy <代理ip>:<代理端口>
其中adb在模拟器安装目录可以找到。
2.在操作前一定要保证手机or模拟器已经开启了root,若模拟器的话还要开启usb调试选项,需要在设置 - 关于平板电脑或关于手机 - 对着Android版本号的位置猛戳5下(开启开发者选项)- 返回进入开发者选项 - 打开USB调试按钮开关 ps:用力越猛效果越好。
3.记得要进入openssl的安装目录bin,才能使用openssl命令,否则会提示命令不存在,如果需要在其他目录下使用openssl命令,需要你配置环境变量即可,具体配置方法自己可以查一下,毕竟宏哥今天这里不是主要讲解openssl的。
4.这里还有一点需要单独说明,/system/etc/security/cacerts/目录的写权限,需要手机root权限。也就是说复制证书到该目录需要您root自己的设备。关于Android手机的root,通常手机厂家都会有自己官方的教程,建议大家按官方的操作进行root。
8.拓展
可能到这里有小伙伴会有疑问,系统证书是放在system/etc/security/cacerts目录下,那么假如是安装的用户证书是在保存在哪个目录下,其实就保存在data/misc/keystore目录。
感谢您花时间阅读此篇文章,如果您觉得这篇文章你学到了东西也是为了犒劳下博主的码字不易不妨打赏一下吧,让博主能喝上一杯咖啡,在此谢过了!
如果您觉得阅读本文对您有帮助,请点一下左下角“推荐”按钮,您的
本文版权归作者和博客园共有,来源网址:https://www.cnblogs.com/du-hong 欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!
公众号(关注宏哥)                                                                                 客服微信