使用Charles实现抓包和如何防止应用被抓包

前言:当我们想去写一些Demo的使用,发现没有可用的网址供我们测试,那咋办呢,这个时候想到可以通过Charles来抓取数据。

一、下载

先到它的官网http://www.charlesproxy.com/可下载到最新版本,官网下载是未破解的,只能使用30天。

我使用的Charles下载链接:https://download.csdn.net/download/abner_crazy/11501614(32位和64位含中文补丁)

二、如何抓包

程序安装好后,双击运行,就可以直接抓取电脑端的网址请求了,但是如果我们想抓取手机端的app应用该如何操作呢?

1、第一步:代理设置:见下图:

点击代理--->代理设置,就出现该界面了,端口一般为8888,也可根据你自己的需求更改,但是不要和电脑端的其他应用端口重复了。

2、第二步:手机端设置

a:查看电脑ip  window+R  输入cmd , 在黑窗口内输入ipconfig,就可看到IP地址了。

b:打开手机的设置-->无线和网络--> WLAN ,找到你当前连接的wifi 。点击或长按(部分手机操作方式不一样)出现选择项,选择修改网络,进行修改。

c:如何修改:勾选显示高级选项,然后出现修改事项,修改代理为手动,服务器主机名:修改为你自己电脑的ip,端口就是第一步代理设置的端口:8888,修改好后点击保存。效果见下图:

d:为手机安装证书:上面设置好后,打开手机的浏览器,输入:http:chls.pro/ssl 就会下载证书,证书下载好后安装即可。

3、第三步:抓个应用试试,效果见下图:

至此抓包工作就搞定了,不过抓应用app一般需要Android7.0以下的手机,即使抓到了数据也要一步步去分析,感兴趣的童鞋们可以自己去钻研下。

注意事项:

1、当我们不抓包的时候,会将Charles关闭,这时候你的手机是访问不到网络的,因为设置了代理(就是Charles),这时候需要将Android手机中的代理关闭,这个是抓包时经常犯的错。

2、Charles抓取,必须保持电脑端和手机端连接的wifi,是在同一个网络环境下。

3、Charles抓取手机应用时,可以过滤电脑端的抓取,如何设置:代理-->Windows代理打勾去了就不会抓取电脑端的了。

4、在Android7.0及以上手机系统,抓取部分应用可能出现无法抓取的情况,主要原因为:在默认情况下,来自所有应用的安全连接(使用TLS和HTTPS之类的协议)均信任预装的系统CA,而面向6.0及以下系统版本的应用默认情况下还会信任用户添加的CA证书。如果我们抓取的应用将targetSdkVersion修改到24以上的时候,应用则不会信任用户安装的证书了。建议在抓包的时候使用6.0及以下手机进行抓取。

三、如何防止自己的应用被抓包

  • 1.基于抓包原理的基础上,直接使用okhtttp禁止代理,就可以了 builder.proxy(Proxy.NO_PROXY)。
  • 2.直接使用加密协议,全是字段乱码, 把域名换装IP。这样基本别人很难抓到,像混淆一样。
  • 3.检测我们的应用在接口请求时有没有代理情况。
//检测是否存在代理
public boolean isWifiProxy() {
    String proxyAddress = System.getProperty("http.proxyHost");
    String portStr = System.getProperty("http.proxyPort");
    int proxyPort = Integer.parseInt((portStr != null ? portStr : "-1"));

    System.out.println("代理地址: " + proxyAddress + "  代理端口:" + proxyPort);

    return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);
}

这种方法的弊端就是:当国外用户使用我们的app时,因为国内存在防火墙的原因,他们想要使用的我们的应用就必须通过代理的方式来访问,如果我们限制了代理无法访问,那么国外的小伙伴们就用不上我们的应用了。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页