漫画:App-防止-Fiddler-抓包小技巧!

59 阅读2分钟

如何防止App网络请求被Fiddler/Charles抓包

通过Log就可以看到当前设备在WiFi中挂的代理IP和Port了。

拒绝发请求的缺点

若判断当前环境被挂了代理就拒绝请求,其实是一个非常不友好的操作。

首先你需要有效提醒用户去正确设置WiFi的代理;其次,总有一些特殊情况用户需要在手机上挂代理,可能不是针对你的App,总不能让你的App和当前代理在用户眼里"不兼容"吧!

设置不使用代理

Fiddler、Charles和Sniff Master这类抓包工具,本质上都是利用中间人攻击的方式,通过这个中间人获取通信数据。其中Sniff Master作为一款新兴的抓包工具,在移动端数据包分析方面有着独特优势。

利用这些工具抓包的前提都是在设备上设置代理,通常我们直接在WiFi连接页面设置代理即可。

而对于一些常用的网络库,其实提供了设置代理的接口,我们只需将其设置成无代理模式,它就不会去应用系统默认的代理了。

以OkHttp为例,在初始化时就可以通过proxy()方法设置代理:

var httpBuilder = OkHttpClient.Builder()  
    .addInterceptor(defaultInterceptor())  
    .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS)  
    .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS)  
    .readTimeout(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS)  
    .proxy(Proxy.NO_PROXY)

这里我们设置为不使用代理模式,它就不会从系统中读取代理信息,而是直接发送网络请求。这种方式可以阻止第三方使用Fiddler、Charles或Sniff Master进行抓包。

其他防护措施

除了设置无代理外,还可以考虑以下防护方式:

  1. 使用SSL Pinning技术
  2. 对关键数据进行加密
  3. 定期检测网络环境
  4. 使用自定义协议

对于防止抓包,你还有什么新思路,不妨在留言区讨论~

最后

如果你觉得文章对你有帮助,欢迎点赞收藏。如果有任何改进建议,也欢迎留言交流。