使用charles 与 proxyDroid抓取android应用websocket包

最近发现一个有意思的现象,使用charles可以抓取android手机浏览器的websocket包但是无法抓取到app的websocket包。

实验一

使用charles抓取android手机浏览器的websocket包。使用一下代码启动一个nodejs的websocket服务端。

穿件文件夹test,并在test里面穿件test.js文件:

 // 导入WebSocket包
const WebSocket = require('ws');

// 创建WebSocket服务器监听3000端口
const wss = new WebSocket.Server({ port: 3001 });

// 监听连接事件,当客户端连接到WebSocket服务器时触发
wss.on('connection', function connection(ws) {
  // 每秒向前端发送消息
  const timer = setInterval(() => {
    ws.send('I am Nodejs WebSocket');
  }, 1000);

  // 监听前端发过来的消息,并在控制台输出消息内容
  ws.on('message', function incoming(message) {
    // 获取查询参数
    const queryParams = conn.path.split('?')[1];
    console.log('query', queryParams)
    console.log('received: %s', message);
  });

  // 监听断开连接事件,清除计时器
  ws.on('close', function close() {
    clearInterval(timer);
  });
});

进入test文件夹,安装 nodejs ws模块

npm i ws

启动websocket服务

node  test.js

使用websocket 在线测试工具测试,并抓包:http://wstool.js.org/   (使用android手机浏览器访问),抓包的websocket数据包如下:

可以看到抓取到了android浏览器的websocket包

实验二

android app 集成websocekt后无法抓取到websocket数据包,解决方案:

  1. 一个root的android手机或使用模拟器
  2. 下载 https://proxydroid.en.uptodown.com/android (proxyDroid),给手机配置全局socket代理
  3. charles配置socket抓包

1、root的android手机

2、下载安装proxyDroid,并配置如下

 3、charles配置如下:

 4、开始抓包:

可以看到,已经能抓取到app的websocket包了

 

posted @ 2023-12-19 23:07  远洪  阅读(4795)  评论(0)    收藏  举报