Fiddler 抓包 Android

标签: Fiddler Android 网络 | 发表时间:2022-01-04 19:34 | 作者:
出处:https://moeci.com/

引言

准备

  • Fiddler
  • Android 模拟器
    • 我这里是 夜神模拟器,BlueStacks蓝叠 模拟器 没找到 WLAN 设置

Fiddler 基本配置

参考:

Fiddler 配置代理, 允许远程的计算机连接

点击 OK,保存确定后, 需要重启 Fiddler 才能生效

Fiddler 配置 HTTPS

Fiddler启用https:Options中勾选"Decrypt HTTPS traffic"和"Ignore server certificate errors(unsafe)",弹出的提示都选Yes

Android 模拟器 配置

参考:

配置 Android 模拟器的网络代理

打开 设置, 选择 WLAN, 在显示已连接的WIFI上长按鼠标左键,选择 修改网络 ,

勾选 高级选项

选择 手动,填写本机 ip 以及 端口 ( 8888 )

Fiddler 默认为 8888

查看本机端口, cmd 执行

1      
ipconfig      

图中 192.168.0.103 即为本机 ip,

我这里是 WiFi 连接,因此才是 Wireless LAN adapter WLAN, 如果是 网线连接 ,则是最上面的 以太网

PS: BlueStacks蓝叠 模拟器居然没找到 WLAN 设置, 于是这里用 夜神模拟器

应该说,到这里,就可以抓包 HTTP 了

针对 HTTPS 的请求,需要在Fiddler中启用 HTTPS,并把Fiddler的证书安装到模拟器中

配置 Fiddler 抓包 模拟器 的 HTTPS

模拟器 安装 来自 Fiddler 的 HTTPS 证书 有两种方式:

  1. Fiddler 导出证书,然后模拟器 导入电脑文件, 然后安装证书
  2. 在模拟器中通过浏览器访问 Fiddler 的 http://ip:8888 ,下载安装证书

这里选择第二种方式,方便

如果打开后浏览器提示证书错误,点击 继续 即可

点击下载 Fiddler 证书,下载完成后,点击安装,这里给证书取名,随便取,

凭据用途有两个选项:

  • VPN和应用
  • WLAN

我这里只安装 VPN和应用 ,也可以两个都安装一遍

这里需要设置密码,设置好后即可

确定安装完毕;在 设置 - 个人 - 安全 - 信任的凭据 中, 用户 标签页可以看到安装的证书

点击证书,可以查看详情

接下来就可以打开Fiddler,在模拟器中打开浏览器测试下https的数据包是否可以正常抓到和解析了,以百度为例

打开模拟器默认带的浏览器,输入 m.baidu.com,百度现在默认使用https,随便搜索一下,查看刚才的包

成功

部分 APP 不走 系统代理

参考:

现象

设置系统代理后,依然抓不到包 ( 没有相关请求的包 ),但是 app 却依旧正常返回数据,没有断网。

使用 Fiddler 或 Charles 这类代理抓包软件默认情况下无法抓取请求的,

但使用 Wireshark 这类网卡抓包软件可以看到这些 APP 的流量,

就表明这些 APP 使用的主要应用层协议仍然是 HTTP(HTTPS)

Fiddler 或 Charles 这类使用的代理的抓包软件与 Wireshark 是完全不同的(Wireshark 使用的网卡数据复制,只要是经过指定网卡都会被抓取),其只能对使用代理的应用层网络协议生效,比如常见的HTTP(https),Websocket 。

APP 不走系统代理 原因/实现

网络请求代理设置 NO_PROXY

在网络请求的时候,通过OkHttp可以设置一个选项,代理的类型。我们在这里直接设置成Proxy.NO_PROXY。这样话即使android设置了代理,我们的app也不会走代理。

  • android系统设置的代理并不是强制对所有app生效的
  • app可以在网络请求类库中通过自定义代理设置,选择是否要走系统代理
1     
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void run() {     
Looper.prepare();
OkHttpClient okHttpClient = new OkHttpClient.Builder().
proxy(Proxy.NO_PROXY).//okhttp不设置代理
build();
Request request = new Request.Builder()
.url("http://www.baidu.com")
.build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
Toast.makeText(this, Objects.requireNonNull(response.body()).string(), Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
Looper.loop();
}

解决

TODO: 未完

Q&A

补充

Fiddler 默认端口

Fiddler 导出 HTTPS 证书

代理抓包原理

参考:

下面内容 来自上面的参考内容,根据自己理解,修改简化

原理

为什么Fiddler 或 Charles对这些APP无效,我们有必要先了解代理抓包我原理

Fiddler 或 Charles 这类使用的代理的抓包软件与Wireshark是完全不同的(Wireshark 使用的网卡数据复制,只要是经过指定网卡都会被抓取),其只能对使用代理的应用层网络协议生效,比如常见的HTTP(https),Websocket 。

这里以HTTP为例简单说明下

客户端需要完成一次HTTP请求,通常需要先找到服务器,客户端会根据http请求中url的主机名(实际会使用host中的主角名)及其端口与目标主机建立tcp连接,建立连接后会将http报文发送给目标服务器 (更多细节请参考https://tools.ietf.org/html/rfc7232)

接下来我来看下HTTP代理是如何运作的,我们启动Fiddler 或 Charles就是启动了一个HTTP代理服务器,这类工具会通知操作系统,“现在我在系统上创建了一个HTTP代理,IP为XXXXXX端口为XX。如果您使用的是linux您可以手动通知操作系统(export http_proxy=ip:port export https_proxy=$http_proxy),如果您使用的是手机等移动设备您可以在当前wifi设置处告诉系统你要使用http代理。 现在我们已经告诉系统我们想要使用代理,这个时候运行在系统上的http客户端再去发送请求的时候,他就不会再去进行DNS解析,去连接目标服务器,而是直接连接系统告诉他代理所在的地址(代理的ip及端口,注意无论是http或https或其他支持代理的协议都会连接同一个端口)。然后代理服务器会与客户端建立连接,再然后代理服务器根据请求信息再去连接真正的服务器。

这里还有个细节正常在 没有代理 的情况下客户端向服务器发送的请求行里 只包含部分URI (实际上是没有方案,主机名及端口的)

有代理的情况下,应该是 黄色标记的那样 完整URL

如上图如果在没有代理的情况下,对 www.baidu.com/index.html 的请求的请求行实际上是 GET /index.html HTTP/1.1 其实并不是我们常见的完整uri。因为在原始的HTTP设计中没有考虑中间服务器(即代理)的情况,客户端在发送报文前已经知道服务器的地址并与之建立了连接,没有必要再发送方案,主机名及端口。不过代理出现后这种做法就会有问题了,客户端连接了代理服务器,而代理服务器却没有办法连接正确的服务器。因此客户端发送给代理的请求其实稍有不同,客户端会在请求行里使用完整的uri,这样代理服务器才能解析真实的服务器的地址。

现在我们的请求实际上都是通过代理服务器(Fiddler 或 Charles)发送出去的,所以代理抓包软件不仅知道http请求及响应的所有报文,甚至还可以随时修改请求及响应。

部分应用不能抓包的原因

代理抓包的关键就是需要HTTP客户端按照要求去连接代理服务器

一般情况下我们已经在系统层面上设置了代理,通常http客户端都是按要求去实现的,在进行http请求前会先检查系统代理,如果有设置代理,客户端会直接使用完整uri去连接代理服务器。不同的平台通常会实现自己的的http客户端的,虽然他们都按照协议要求实现了代理功能,但是并不一定在默认情况下会直接使用系统代理。

在现实中这种况下这种情况还不少,Flutter 就是这种情况,默认Flutter不会主动使用系统代理,需要单独设置。(当然个人认为这种策略也是有理由,虽然给测试及调试带来了不便不过也在一程度上提高了些许数据安全)

正是因为HTTP客户端没有使用我们设置的系统代理,他们自然也不会连接Fiddler 或 Charles创建的代理服务器,最终导致我们无法获取任何请求。

解决方案

不过既然我们已经知道了Fiddler 和 Charles不能抓包的具体原因,前面也提到了代理抓包的原理,那我们就总有办法解决。

前面说到了我们APP使用的HTTP客户端没有连接到代理服务器,导致我们的代理抓包软件无法正常抓包,那我们只要想办法让客户端重新连接到代理服务器就好了(当然这一切都是以不修改客户端软件APP为前提的)

方法1:控制DNS解析,通过修改dns的方式让客户端以为我们的代理服务器就是目标服务器。

优势:

  • 操作方便,通过修改设备的hosts可以十分方便的首先

劣势:

  • 需要为每个需要操作的域名提前添加host
  • 在手机等手持设备上难以修改hosts(即对移动APP这类应用很难实现)

方法2:在网络设备上直接做流量转发,将指定终端设备上发往80及443端口的数据直接转发到代理服务器的 目标端口上

优势:

  • 可以针对连接到网络设备上的终端设备进行分别配置,而手机等终端设备不需要进行任何设备

劣势:

  • 需要单独的硬件设备

方法3:使用VPN将终端设备的流量转发到代理服务器

优势:

  • 使用VPN软件不用添加其他测试。

劣势:

  • 终端上的VPN默认会直接对所有流量进行转发,要进行合理的配置可能需要额外的学习成本

TODO: 未复制完

参考

感谢帮助!

相关 [fiddler android] 推荐:

Fiddler 抓包 Android

- - yiyun's Blog
我这里是 夜神模拟器,BlueStacks蓝叠 模拟器 没找到. 使用Fiddler+安卓模拟器对app抓包,包含https_f_yunsheng_t的专栏-CSDN博客_fiddler安卓模拟器抓包. Fiddler 配置代理, 允许远程的计算机连接. 点击 OK,保存确定后, 需要重启 Fiddler 才能生效.

Android利用Fiddler进行网络数据抓包

- - 编程语言 - ITeye博客
要 介绍Android及IPhone手机上如何进行网络数据抓包,比如我们想抓某个应用(微博、微信、墨迹天气)的网络通信请求就可以利用这个方法. 相对于tcpdump配合wireshark抓包的优势在于: (1)无需root (2)对Android和Iphone同样适用 (3)操作更简单方便(第一次安装配置,第二次只需设置代理即可) (4)数据包的查看更清晰易懂,Fiddler的UI更简单明了 (5) 可以查看https请求.

web debugger fiddler 使用小结

- - 博客园_首页
     内部分享时总结了一下fiddler的使用,总是想写一篇fiddler的文章,写之前搜了一下,发现园子里已经有介绍的大作了: Fiddler 教程 ,不过还是总结下,如有雷同,还请见谅啊,哈哈. fiddler是什么相信大家都很清楚了,用句通俗的话就是抓包工具,下面我们就从实际的功能来说下它是什么,能干什么.

Fiddler的灵活使用

- - WooYun知识库
Fiddler是一款强大的web调试工具,其基本用法网上已经有很详细的教程,这里我就不再多说了. 下面只是经验之谈,利用Fiddler各种功能达到自动检测漏洞的目的. 我们在进行漏洞挖掘过程中,由于需要做大量的请求分析、大量的测试规则,且需要不断的重放修改请求进行探测,这导致消耗的精力、时间巨大. 如果我们可以将请求保存下来,本地模拟请求的发送,自动修改请求,加载各种漏洞的测试规则,然后对请求的返回结果、状态进行漏洞特点的判断,那么对一些常见的sql注入、xss漏洞、文件包含等漏洞挖掘就非常的方便了.

再谈iOS抓包,使用Fiddler

- Lynn - 99css
之前介绍过iOS抓包的方法,缺点有:. Wireshark用起来不太习惯. 今天碰巧看到Secret iOS business; what you don’t know about your apps里面熟悉的Fiddler截图,恍然大悟,上面的问题就都解决了. 下面以VirtualBox为例. VirtualBox 工具栏 – 设备 – 更改网络连接 – 在网络选项卡中将连接方式改为 Bridged Adapter(默认为NAT).

Web调试工具 Fiddler 教程

- - 互联网旁观者
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大的帮助. Fiddler的基本介绍. Fiddler的官方网站:  www.fiddler2.com.

抓包工具:Fiddler 2-强大功能之三 综合

- - 移动开发 - ITeye博客
在会话列表中选择2个会话,右键可选择Compaer进行会话比较,但此功能需要下载Windiff.exe. 嗅探localhost站点:. 默认的时候Fiddler是不能嗅探到localhost的网站,使用的localhost或127.0.0.1,默认会绕过代理,直接访问目标服务器. 只要在localhost后面加个点号(或者加.fiddler),Fiddler就能嗅探到.

使用Fiddler的X5S插件查找XSS漏洞

- - FreeBuf.COM
OWASP top 10的安全威胁中的CrossSite Scripting(跨站脚本攻击),允许攻击者通过浏览器往网站注入恶意脚本. 这种漏洞经常出现在web应用中需要用户输入的地方,如果网站有XSS漏洞,攻击者就可以通过这种漏洞向浏览网站的用户发送恶意脚本,同时也可以利用该漏洞偷取sessionid,用来劫持用户帐户的会话.

使用Fiddler对手机应用进行抓包测试

- - 标点符
手机应用的抓包测试相对于PC上要麻烦一些. 以下内容来自公司QA的指导,感谢~. WIFI共享工具: 猎豹免费WIFI (使用360WIFI等均可,只要保证在同一局域网下就都可以,连接同一个路由器也可以). 1、启动Fiddler,打开菜单栏中的 Tools > Fiddler Options.

Android 遥控车

- CasparZ - LinuxTOY
您确定您真的会用 Android 手机玩赛车. 16 岁的法国学生 Jonathan Rico 使用 Android 手机通过蓝牙实现了对改装玩具汽车的遥控. 操控的方式和那些标榜的智能手机游戏一样,使用重力感应,差别是这次控制的是现实世界中的遥控汽车. 收藏到 del.icio.us |.