部分App无法使用系统代理抓包的原因及解决办法(Fiddler+Drony)_百 ...
部分App⽆法使⽤系统代理抓包的原因及解决办法
(Fiddler+Drony)
有⼀些安卓App在进⾏分析的时候,发现常⽤的系统代理连接好后,该App就⽆法正常使⽤,或是常⽤的抓包⼯具Fiddler、Charles等⽆效。⽐如⽀付宝、微博等App就是这样的情况。下⾯就来阐述⼀下⽆法使⽤的原因及解决⽅案。
原理
若不想了解可以直接跳到下⽂的解决⽅案处。
当客户端想要完成⼀次HTTP请求的时候,⾸先要根据请求中的URL通过DNS到服务器,然后与服务器经过三次握⼿建⽴TCP连接。建⽴连接后客户端会将HTTP报⽂发送给服务器。
我们在启动Fiddler或是Charles时,该软件会⾃动设置⼀个系统代理指向⾃⾝,从⽽完成数据包的抓取⼯作。使⽤Windows时可以⾃动设置系统代理,使⽤Linux可以通过设置环境变量的⽅式来设置代理,⽽⼿机就是在连接⽹络的时候⼿动改指定代理服务器的信息。当系统设置代理后,各类应⽤在发送请求的时候就不再是直接通过DNS然后连接服务器,⽽是⾸先连接系统指定的代理服务器,随后代理服务器再根据请求去连接真正的服务器。只有这样,代理服务器才能随意的进⾏HTTP包的截获、修改甚⾄进⾏“中
间⼈攻击”来解密https包。
⽽部分应⽤在遇到系统设置的代理的时候,直接绕过代理直接发送请求或是直接报错。这样的后果就是要么App⽆法连接⽹络,要么Fiddler 等软件⽆法正常抓包。
解决⽅案
解决⽅案就是利⽤⼀些⼿段,强制的让这些App⾛到代理服务器就可以了。
⽅法有好多种:
①修改Hosts,直接控制DNS解析,欺骗App认为我们的服务器就是他需要到达的服务器。这样做的话缺点就是针对每个域名都要提前设置好,⽐较繁琐。再有就是移动设备上⼗分不容易操作。
②建⽴⼀个新的⽹络,将其中特定设备的流量转发到代理服务器上。优点是对于设备不需要特殊的配置,直接在⽹络设备上配置即可。缺点就是需要专门的⽹络设备,配置过程⼀样较为繁琐。
③利⽤VPN将终端的流量转发到代理服务器上。这种⽅法的优势是操作较便捷,缺点就是VPN⼀般针对于全部软件的流量进⾏转发,配置不当数据量会很恐怖。
综合考虑,这⾥我们就选⽤⽅案③。
如何设置代理服务器这次操作中,使⽤的是⼀台root过的安卓设备(因为要解密https流量需要在系统证书区安装Fiddler根证书,只有root后或刷有第三⽅recovery的设备才可以。⾄于为什么需要安装根证书,详见中间⼈攻击原理),需要的软件是Fiddler和Drony。
安装Fiddler根证书到系统证书区
⾸先在Fiddler中导出根证书。Tools->Options,选择HTTPS选项卡,在右侧Actions按钮上点⼀下,然后选择Export Root Certificate to Desktop,即导出根证书到桌⾯。在此例中导出的⽂件名称是。
然后利⽤openssl⼯具计算证书的Hash值,给证书改名。为确保安全,Android系统的系统证书区⾥⾯的证书都是以Hash值为名称。openssl x509 -inform DER -subject_hash_old -
将输出中类似269953fb这样的字符串复制,将改名为hash.0,就像本例中改为“269953fb.0”(去掉引号)。扩展名中的0是防⽌证书Hash碰撞,概率极低。
改名把改好名的证书放到Android设备/system/etc/security/cacerts⽬录中,重启⼿机即可⽣效。可以在⼿机的系统证书区看到Fiddler根证书的相关信息。
配置Drony
Drony是⼀款代理软件。安装在⼿机上后打开。滑动上⽅选项卡,选择设置(Settings),⾸先点选⽹络中的⽆线⽹络。
然后选择⾃⼰连接的WiFi。点击进⼊。
然后在选项中⾸先设置代理类型为⼿动(Proxy Type->Manual),主机名和端⼝填写局域⽹中Fiddler主机的IP和Fiddler的端⼝。(注
意,Fiddler软件中Connection选项卡⾥⾯的允许远程⽹络连接选项务必打开!否则⽆论如何是连接不上的。)
向下翻,代理类型选择普通http代理。(Proxy Type->Plain http proxy)
继续下翻,过滤默认值选择允许全部(Filter default value->Direct all),然后点击规则(Rules)。
默认的规则⾥⾯应该是空的。点击右上⾓加号新建⼀个规则。(即单独针对某⼀个App进⾏代理转发。)
⽹络ID(Network ID)处确认是正确的WiFi名称。⾏动(Action)选择本地代理链全部(local proxy chain),应⽤就选择想要转发包的应⽤。剩下的⽆需填写。填写好后点击右上⾓存盘。
然后返回到主页,点击下⽅“关”按钮开启。该按钮上的⽂字代表程序状态,显⽰“开”就是代表代理已开。
现在就可以打开待抓包的应⽤了,发现应⽤使⽤正常,http包也已经正常出现,https包也成功解密。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。