Android 逆向实战:检测系统代理 && 不走代理的处理方案
今天来实战一个简单检测了系统代理的 APP 抓包。
APP1
APP1 地址:https://app1.scrape.center/
APP1 说明:
最基本的 App 案例,数据通过接口加载, 无反爬,无任何加密参数,适合做抓包分析和请求模拟。
先安装 APP 看看效果,都会请求什么数据。

可以看到,请求了一些电影的数据,点进去可以看到详细的信息。题目中也说明了,适合抓包分析,我们来设置下系统代理,看看请求了哪些数据。
设置系统代理:

保存,打开抓包软件,我这里使用的是 proxyman,MacOS 系统可用。
查看说明如何在 Android 手机上安装证书:

我这里已经安装好了,就不重复安装了。重新打开 APP1,并且查看抓包软件:

已经抓到了对应的数据包, 由于没有任何反爬和加密参数,我们直接使用 Python 模拟就可以了,大家可以自己尝试一下。
APP2
APP2 地址:https://app2.scrape.center/
APP2 说明:
设置了接口请求不走系统代理,因此无法直接抓包,适合做抓包特殊处理。
说明中提到了请求不会走系统代理了,那么我们刚才设置的系统代理就无法抓到数据包。我们先使用系统代理尝试一下,发现数据请求到了,但是确没有抓到数据,看起来确实是不走系统代理了。
这种情况下,我们需要一个软件。来将某些请求转发到我们电脑对应的端口上,我这里使用的软件叫 ProxyDroid(需要 root 权限),这个软件会创建一个 VPN 通道,并且支持选择只转发某个软件的请求,不会一股脑的将所有的请求都转发过去。并且这个软件还支持切换配置文件,可以对不同的地址和端口使用不同的配置文件,适合我在家里和公司来回切换,不用每次都填地址了。


打开软件先设置只转发我们需要的 APP2 的请求,并且设置好地址和端口,还有协议使用 socks5,打开转发开关。

重新打开软件,发现会报错证书校验失败,这里卡了我好久,研究了半天,发现好像是 TLS 协议不匹配导致的,我使用的抓包软件是 proxyman,它可能支持的支持的协议版本比较高,APP2 支持的版本比较低,导致一直握手失败,换了 Charles 就可以正常抓到包了。

看了一下 APP2 的代码,请求不走系统代理是因为 okhttp 的 NO_PROXY,所以 okhttp 发送请求的时候不会走系统代理。

可以看到上图中明确设置了 NO_PROXY。
其实像这种不走系统代理的 APP,还有其他的解决方案,就是在 root 的情况下,使用 frida 或者 xp 框架,对 proxy 属性进行 hook,动态的将其改写掉,就可以让 okhttp 继续使用系统代理了。
APP3
APP3 地址:https://app3.scrape.center/
APP3 说明:
对系统代理进行了检测,如果设置了代理则无法正常请求数据,适合做抓包特殊处理。
和 APP2 基本一样,看了下代码,的确是检测了代理,如果检测到使用了代理,则不会发起请求。


在检测到代理后,会弹窗提示,不会发起请求,使用 APP2 的方案可以完美规避这个问题。

关掉系统代理,使用转发软件已经可以正常抓到请求了。
总结
APP 的这三道题目还算是比较简单的入门题,因为没有任何混淆和负责的检测,只是检测了系统代理,方便我们熟悉对系统代理的检测和处理不走系统代理的请求。
本文章首发于个人博客 LLLibra146's blog
本文作者:LLLibra146
更多文章请关注公众号 (LLLibra146):
![]()
版权声明:本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!
版权声明: 本文为 InfoQ 作者【LLLibra146】的原创文章。
原文链接:【http://xie.infoq.cn/article/a3a297a6f0229e24301e22b64】。未经作者许可,禁止转载。
评论