战旗直播平台弹幕登录分析

编程入门 行业动态 更新时间:2024-10-18 18:22:48

<a href=https://www.elefans.com/category/jswz/34/1690388.html style=战旗直播平台弹幕登录分析"/>

战旗直播平台弹幕登录分析

平台网址:www.zhanqi.tv 

一、登录账号

  验证接口 .login

提交方式POST

参数说明:


使用的验证是极验验证,参数还是很直观的。

提交成功后返回

[javascript] view plain copy
  1. {  
  2.     "code": 0,  
  3.     "message": "登录æˆåŠŸ",  
  4.     "data": {  
  5.         "uid": xxxxxx,  
  6.         "nickname": "xxxxx",  
  7.         "avatar": ".jpg",  
  8.         "status": 0,  
  9.         "gender": 1,  
  10.         "uright": 0,  
  11.         "email": "",  
  12.         "qq": "",  
  13.         "account": "xxxxx",  
  14.         "exp": {  
  15.             "nums": 0,  
  16.             "level": 1,  
  17.             "levelNeed": 15,  
  18.             "levelNow": 0  
  19.         },  
  20.         "istrust": 1,  
  21.         "letter": 0,  
  22.         "badNickname": false,  
  23.         "loginIp": "xxxxxxx",  
  24.         "isAnchor": false,  
  25.         "anchorUrl": "",  
  26.         "roomId": 0,  
  27.         "fans": 0,  
  28.         "bindMobile": "1xxxx31xxx",  
  29.         "bindEmail": "",  
  30.         "crc32": 2173657370,  
  31.         "token": "hubc1uqv3sas3gj736qnvhhsa3.715E1448-7151-444F-2903-A99D26EA7551",  
  32.         "slevel": {  
  33.             "name": "",  
  34.             "pos": "0",  
  35.             "keep": "",  
  36.             "nextname": "é’é“œ5",  
  37.             "level": "0",  
  38.             "nextexp": "15000",  
  39.             "leftexp": "15000",  
  40.             "levelexp": "0",  
  41.             "curexp": "0",  
  42.             "uid": "xxxxx9",  
  43.             "opp": 0  
  44.         },  
  45.         "permission": 0,  
  46.         "rich": {  
  47.             "gold": 0,  
  48.             "coin": 0  
  49.         },  
  50.         "role": {  
  51.             "level": {  
  52.                 "level": 1,  
  53.                 "current": 0,  
  54.                 "total": 80,  
  55.                 "percent": 0  
  56.             },  
  57.             "skill": [  
  58.                 {  
  59.                     "id": 1,  
  60.                     "name": "旗娘çªè¢­",  
  61.                     "description": "解é”表情[å–èŒ]",  
  62.                     "icon": ".png",  
  63.                     "type": 0,  
  64.                     "level": 1,  
  65.                     "unlockLevel": 5,  
  66.                     "effectId": 1,  
  67.                     "effect1": 1,  
  68.                     "effect2": 0,  
  69.                     "effect3": 0,  
  70.                     "effect4": 0,  
  71.                     "next": 5,  
  72.                     "nextDescription": "解é”表情[å–èŒ]",  
  73.                     "typeStr": "被动技能"  
  74.                 },  
  75.                 {  
  76.                     "id": 16,  
  77.                     "name": "弹幕乱舞",  
  78.                     "description": "å‘é€å¼¹å¹•çš„字数上é™+1",  
  79.                     "icon": ".png",  
  80.                     "type": 0,  
  81.                     "level": 1,  
  82.                     "unlockLevel": 8,  
  83.                     "effectId": 2,  
  84.                     "effect1": 1,  
  85.                     "effect2": 0,  
  86.                     "effect3": 0,  
  87.                     "effect4": 0,  
  88.                     "next": 8,  
  89.                     "nextDescription": "å‘é€å¼¹å¹•çš„字数上é™+1",  
  90.                     "typeStr": "被动技能"  
  91.                 },  
  92.                 {  
  93.                     "id": 31,  
  94.                     "name": "能é‡è½¬åŒ–",  
  95.                     "description": "æ¯æ—¥å‰2次é€ç¤¼èŽ·å¾—粉ä¸ç»éªŒé¢å¤–增加2点",  
  96.                     "icon": ".png",  
  97.                     "type": 0,  
  98.                     "level": 1,  
  99.                     "unlockLevel": 10,  
  100.                     "effectId": 3,  
  101.                     "effect1": 2,  
  102.                     "effect2": 2,  
  103.                     "effect3": 0,  
  104.                     "effect4": 0,  
  105.                     "next": 10,  
  106.                     "nextDescription": "æ¯æ—¥å‰2次é€ç¤¼èŽ·å¾—粉ä¸ç»éªŒé¢å¤–增加2点",  
  107.                     "typeStr": "被动技能"  
  108.                 }  
  109.             ]  
  110.         }  
  111.     }  
  112. }  


二、进入直播房间

先获取房间信息

接口:

.viewer?uid=房主Uid&_t=时间戳

房主Uid直接可以在页面源码里获取

接口返回:

[javascript] view plain copy
  1. {  
  2.     "code": 0,  
  3.     "message": "",  
  4.     "data": {  
  5.         "uid": xxxxx,  
  6.         "gid": 1827291574,  
  7.         "sid": "YzM2YjdiM2JkYWJhZDZmNmEwYmIzN2JiNjU4MDQ0ZDQ=",  
  8.         "timestamp": 1494308710,  
  9.         "prop": {  
  10.             "speaker": 0,  
  11.             "ticket": 0  
  12.         },  
  13.         "isFollow": false,  
  14.         "roomdata": {  
  15.             "vlevel": 0,  
  16.             "vdesc": "",  
  17.             "slevel": {  
  18.                 "name": "",  
  19.                 "pos": "0",  
  20.                 "keep": "",  
  21.                 "nextname": "é’é“œ5",  
  22.                 "level": "0",  
  23.                 "nextexp": "15000",  
  24.                 "leftexp": "15000",  
  25.                 "levelexp": "0",  
  26.                 "curexp": "0",  
  27.                 "uid": "xxxxx",  
  28.                 "opp": "0"  
  29.             }  
  30.         },  
  31.         "clientIp": xxxxx  
  32.     }  
  33. }  
战旗的弹幕服务器是直接通过Flash连接的,通过查看页面源码可以看到Flash的参数


红框内的数据是标准的BASE64加密的,解密后如下:

[javascript] view plain copy
  1. {"list":[{"ip":"121.43.196.77","port":15010,"id":41,"chatroom_id":41},{"ip":"112.124.38.229","port":15010,"id":64,"chatroom_id":64},{"ip":"120.26.16.38","port":15010,"id":87,"chatroom_id":87}]}  
通过截取封包工具可以获得通讯数据



封包是明文的,发现有个loginreq的登录包:

[javascript] view plain copy
  1. {  
  2.     "timestamp": 1494309269,  
  3.     "hideslv": 0,  
  4.     "tagid": 0,  
  5.     "thirdaccount": "",  
  6.     "roomid": 29402,  
  7.     "cmdid": "loginreq",  
  8.     "fhost": "",  
  9.     "gid": 1827291574,  
  10.     "roomdata": {  
  11.         "vlevel": 0,  
  12.         "slevel": {  
  13.             "opp": "0",  
  14.             "name": "",  
  15.             "nextname": "5",  
  16.             "keep": "",  
  17.             "curexp": "0",  
  18.             "nextexp": "15000",  
  19.             "uid": "xxxxxx",  
  20.             "level": "0",  
  21.             "leftexp": "15000",  
  22.             "pos": "0",  
  23.             "levelexp": "0"  
  24.         },  
  25.         "vdesc": ""  
  26.     },  
  27.     "sid": "NjYzNDNkMjM2NDMzNTI1NDVjYzRkOTU4NzZjYjgwZjk=",  
  28.     "ajp": -2,  
  29.     "t": 0,  
  30.     "imei": "553149823",  
  31.     "uid": xxxxxxx,  
  32.     "ver": 12,  
  33.     "ssid": "ZWI3YzViNmU5YjNkYjcwOWExODI0N2Q3YzY1OGUxMDA=",  
  34.     "fx": 0  
  35. }  

粗略看了下几个参数还是很明显的,这里特别的分析下SSID的获取方式。


三、SSID的获取

通过调试页面的JS代码找到源头:


最终走到:


这里可以看出来是JS与Flash的交互,这个函数直接转进Flash了,通过分析FLash文件,发现做过加密和混淆处理,代码已经很难辨认


看来Flash这条路走不通了,然后转战APP,直接下载了安卓版本的APP,用工具解开APK,直接DEX转jar ,jd-gui跑起

通过搜索loginreq关键字,可以找到这里:


代码还是很明显,可以知道是 uid + gid + getVerStr() + timestamp 拼接成的字符串,然后计算个MD5,最后BASE64加密

然后这个的getVerStr()是什么鬼!? 点进去看看申明:

public static native String getVerStr();

居然是 native ,在java中这个类型的申明表示是接口函数,后面我们在找下这个函数的原型


四、getVerStr()原型获取

分析思路:

1、找到.So文件

2、找到getverstr的导出

3、分析函数执行

通过筛选文件,最终找到了libddmd.so,使用ida静态分析下


直接点开看原型


看起来是直接返回一个字符串, “www.zhanqi.tvWY|qZJYcX(K4zj^%” 。



最后按照算法直接组装一个登陆包即可完成房间的登录,其他的协议均可以在java内找到,基本无难度了。

PS. 1、登录包内的 sid 和 timestamp 必须和查询房间信息返回的数据一致,否则登录会不通过

更多推荐

战旗直播平台弹幕登录分析

本文发布于:2024-02-13 02:42:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1690389.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:战旗   平台   弹幕

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!