草庐IT

Android 7.0+模拟器Fiddler抓包详细教程

潇曜 2023-04-04 原文

【前言】

     众所周知,假如设备是android 7.0+的系统同时应用设置targetSdkVersion >= 24的话,那么应用默认是不信任安装的Fiddler用户证书的,所以你就没法抓到应用发起的https请求,然后你在Fiddler就会看到一堆200 HTTP Tunnel to xxx.xxx.xxx:443的请求日志,这些都是没有成功抓取的https请求,下面重点介绍一下各种解决方案,相信总有一款解决方案适合你~

【懒人快速解决篇】

下面先介绍3种懒人解决方案,适合需要快速解决https抓包问题的人挑选(Android Fiddler抓包官方操作文档点这里):
1、用android 7.0以下系统的设备去装应用,是可以正常抓包,但是一般来说,android 7.0以下不管是真机还是模拟器,运行起来都是比较卡的,能接受不那么流畅体验的用户可以尝试,适合小白型用户使用;
2、把应用apk的targetSdkVersion设置为23及以下,也是可以正常抓包,但是假如是抓别人的应用,同时别人又做了防止反编译措施的话,这个方案就不适用了;
3、在应用的res/xml目录下添加文件network_security_config.xml,设置信任用户证书,内容如下:

<?xml version="1.0" encoding="utf-8"?>  
<network-security-config>
    <!-- 设置允许http明文传输-->
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <!-- 设置信任系统级别证书-->
            <certificates src="system" />
            <!-- 设置信任用户自定义证书,设置之后才能用fiddler之类的抓取https请求,出包最好不要设置,防止被抓包-->
            <certificates src="user" />
        </trust-anchors>
    </base-config> 
</network-security-config>

然后application标签下设置属性:android:networkSecurityConfig="@xml/network_security_config",这个方案也是仅适用于有android基础同时懂反编译的人员使用

【一劳永逸解决篇】

     究其根源,targetSdkVersion >= 24的应用在android 7.0+系统的设备中之所以没法被抓包,是因为android 7.0之后的应用是默认只信任系统证书,不信任用户证书,那么我们可以想办法将Fiddler证书装到系统证书目录下,伪装成系统证书,那么就不存在因为fiddler证书不被信任而无法抓包的问题了

一、 导出Fiddler证书

1、下载安装Fiddler抓包工具,下载完成之后先不要点击打开运行
2、下载fiddlercertmaker.exe这个Bouncy Castle证书生成器,因为新版本的Android拒绝超过两年有效期的证书,双击下载好的fiddlercertmaker.exe(确保已关闭Fiddler),会弹出提示导入证书成功这个对话框

3、将Fiddler的证书导出到电脑,点击Tools -> Options -> HTTPS -> Actions -> Export Root Certificate to Desktop

导出成功之后,就可以在桌面上看到导出的FiddlerRoot.cer证书文件

二、下载和安装openssl

1、下载Window版openssl, 点击这里打开页面,下拉到下面,选择最上面的64位EXE点击下载安装即可


2、安装完成之后,打开cmd命令行试试openssl命令是否生效,要是有如下输入信息,就说明安装成功:

三、证书格式转换与重命名

1、将Fiddler cer证书pem证书,在cmd输入如下命令进行转换:

openssl x509 -inform DER -in C:\Users\Administrator\Desktop\FiddlerRoot.cer -out C:\Users\Administrator\Desktop\FiddlerRoot.pem

2、用md5方式显示pem证书的hash值, 在cmd输入如下命令:

openssl x509 -inform PEM -subject_hash_old -in C:\Users\Administrator\Desktop\FiddlerRoot.pem

从上面可以看到,咱们生成Fiddler证书的hash值是e5c3944b
3、将pem证书重命名,使用上面显示的值e5c3944b对pem证书进行重命名,以下命令仅适用于window,linux请用mv

ren C:\Users\Administrator\Desktop\FiddlerRoot.pem e5c3944b.0

注意:ren命令第二个参数,直接输入新的文件名即可,不要输入完整路径,否则会报错

四、安装证书到系统目录(/system/etc/security/cacerts)

教程一:适合有Android基础的开发者

1、找一台root过的手机或者任意一款模拟器,因为只有root过的手机才有可能执行各种高权限的命令。我这边下载了一款叫夜神android 9系统的模拟器

2、cmd输入adb connect 127.0.0.1:62001,使adb跟夜神模拟器连接上
3、cmd 输入adb shell,进入到夜神模拟器的终端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\Administrator\Desktop\e5c3944b.0 /system/etc/security/cacerts,将事先转换好的Fiddler证书推送到夜神模拟器的/system/etc/security/cacerts目录下

7、到这里就已经成功的把Fiddler证书安装到系统目录了,咱们点击模拟器的设置 -> 安全性与位置信息 -> 加密与凭据 -> 信任的凭据 -> 系统,往下拉可以看到咱们的Fiddler证书
现在再打开Fiddler进行抓包,你会发现可以成功抓包了(记得模拟器在wifi那里设置好代理)

教程二:适合没有Android基础的小白

1、找一台root过的手机或者任意一款模拟器,因为只有root过的手机才有可能执行各种高权限的命令。我这边下载了一款叫夜神android 9系统的模拟器

2、点击夜神模拟器侧边栏的电脑图标,选择打开电脑文件夹,会跳转打开电脑的目录C:\Users\Administrator\Nox_share,将转换好的Fiddler证书e5c3944b.0复制到ImageShare目录下即可

3、下载MT管理器,拖拉到模拟器中安装完成,点击打开应用,左边打开Pictures目录就可以看到刚才电脑ImageShare目录的Fiddler证书e5c3944b.0

4、右边点击进入到system/etc/security/cacerts目录,然后长按左边的e5c3944b.0文件,点击复制即可复制到右边打开的目录那里

5、一般人到这里以为就结束,但是你留意看一下刚才复制到system/etc/security/cacerts目录下的e5c3944b.0文件,你会发现跟其他已有的系统证书相比,e5c3944b.0根本就没有读的权限,到时你到信任的凭据也是没法找到这个Fiddler证书的,点击MT管理器的左上角,找到打开终端

6、进入到终端之后,输入以下命令将e5c3944b.0文件设置为可读即可

7、再看看system/etc/security/cacerts目录下e5c3944b.0文件的权限,发现确实有读权限了

8、咱们回到模拟器桌面,点击模拟器的设置 -> 安全性与位置信息 -> 加密与凭据 -> 信任的凭据 -> 系统,往下拉终于看到咱们的Fiddler证书,尝试一下抓包也是没问题了

【拓展知识】

     可能到这里有小伙伴会有疑问,系统证书是放在system/etc/security/cacerts目录下,那么假如是安装的用户证书是在保存在哪个目录下,其实就保存在data/misc/keystore目录下

【注意事项】

雷电4模拟器经过上述设置之后,你会发现依然是没法成功抓包,这时需要允许以下命令给雷电4设置全局代理

adb shell settings put global http_proxy <代理ip>:<代理端口>

其中adb在模拟安装目录可以找到

有关Android 7.0+模拟器Fiddler抓包详细教程的更多相关文章

  1. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  2. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  3. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  4. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  5. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  6. ruby-on-rails - 在这种情况下我如何模拟一个对象?没有明显的方法可以用模拟替换对象 - 2

    假设我在Store的模型中有这个非常简单的方法:defgeocode_addressloc=Store.geocode(address)self.lat=loc.latself.lng=loc.lngend如果我想编写一些不受地理编码服务影响的测试脚本,这些脚本可能已关闭、有限制或取决于我的互联网连接,我该如何模拟地理编码服务?如果我可以将地理编码对象传递到该方法中,那将很容易,但我不知道在这种情况下该怎么做。谢谢!特里斯坦 最佳答案 使用内置模拟和stub的rspecs,你可以做这样的事情:setupdo@subject=MyCl

  7. ruby - "public/protected/private"方法是如何实现的,我该如何模拟它? - 2

    在ruby中,你可以这样做:classThingpublicdeff1puts"f1"endprivatedeff2puts"f2"endpublicdeff3puts"f3"endprivatedeff4puts"f4"endend现在f1和f3是公共(public)的,f2和f4是私有(private)的。内部发生了什么,允许您调用一个类方法,然后更改方法定义?我怎样才能实现相同的功能(表面上是创建我自己的java之类的注释)例如...classThingfundeff1puts"hey"endnotfundeff2puts"hey"endendfun和notfun将更改以下函数定

  8. ruby - 在 RSpec 中 stub /模拟全局常量 - 2

    我有一个gem,它有一个根据Rails.env的不同行为的方法:defself.envifdefined?(Rails)Rails.envelsif...现在我想编写一个规范来测试这个代码路径。目前我是这样做的:Kernel.const_set(:Rails,nil)Rails.should_receive(:env).and_return('production')...没关系,只是感觉很丑。另一种方法是在spec_helper中声明:moduleRails;end而且效果也很好。但也许有更好的方法?理想情况下,这应该有效:rails=double('Rails')rails.sho

  9. ruby - 在 RUBY 上的 PADRINO 框架上使用 RSPEC 进行测试的教程 - 2

    我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa

  10. ruby-on-rails - rspec 模拟对象属性赋值 - 2

    我有一个rspec模拟对象,一个值赋给了属性。我正在努力在我的rspec测试中满足这种期望。只是想知道语法是什么?代码:defcreate@new_campaign=AdCampaign.new(params[:new_campaign])@new_campaign.creationDate="#{Time.now.year}/#{Time.now.mon}/#{Time.now.day}"if@new_campaign.saveflash[:status]="Success"elseflash[:status]="Failed"endend测试it"shouldabletocreat

随机推荐