某名麻将长连接数据解密

点击上方蓝字[协议分析与还原]关注我们


 分析金某麻将的长连接数据加密算法。

近期,不小心碰到了一个棋牌游戏,叫xx麻将,使用长连接进行数据的传输,但三天两头换传输的内容格式,它的编码方式也很有意思(乱七八糟的意思),特分享给大家,这个棋牌游戏没在应用市场上架,但存在自己的传播渠道,大家应该能想象得到它是干啥的,看看就好。里面玩的大概是这样:

60c9c3ed065b450283e019f0243e991e.png

01

长连接识别

它的长连接采用的是固定IP端口进行交互,从服务器下发,因此需要从服务器取数据来进行识别,当然,一段时间内,它的服务器地址及端口是不变的,否则规模很大,或者成本很高,这不用怀疑。

cd7b2104c123890ecbdf3ec9048a07cb.png

这个长连接,没有用常见的成熟的方案,而是自己实现了一套TCP长连接方案,粗略地看下,会发现这个游戏的代码质量很差,TCP没管理好,没用的数据过多,浪费了很多资源。

02


长连接内容

接下来看下这个长连接里面传输的内容,是下面这样子。

24db25e09a401baad5f277e50124acbf.png

内容看着很有规律,里面有一段BASE64,在BASE64之前,可以认为是数据块头,经过分析,有自己的格式,最开始说它的编码方式很有意思,说的就是这里。

这个TCP长连接里面传输的是数据块,这个游戏是啥数据都在这个TCP连接里面传,但是,开发者能力有限,无法hold住稍微长点的数据的传输,然后就比较蛋疼了,导致游戏非常卡顿,动不动就死就挂,另外数据块还分成多层嵌套,估计是一层层的补丁。

常规情况,这些TCP流内的数据块头里面都有个字段来标示数据块的长度,在这个游戏里,数据块头的前4字节就是这个长度值,理论上,能传输的长度很大的。但是,它却没有充分利用它,根据分析,推测原因是资源消耗以及数据加密和BASE64编码不方便处理导致的。

这个游戏长连接里面传输的内容有多种情况,最常见的是一块数据就是一块加密内容,解开就能看到里面的内容了:

1008:{"ids":[1216,1710,1712,1713,1714,1715,1716,1717,1718,1719,1720,1722,1723,1724,1725,1726,1732,1733,1749,1753,1754,1756,1761,1772,1800,1801,1802,2000,2001,2002,2003,2004,2005,2006]}

还有一个大块数据里嵌套多个加密块,每个BASE64块带自己的块头,再拼一起,组成一个大块,再加上一个外层的块头,类似下面这样:

78f184cc1ef282516c73148e25fa183f.png

这种就需要根据外层块头进行处理,然后里面循环提取内层块,再进行块内容的处理,这还算简单的。

接下来还有一个加密块被分到多个数据块里面的情况,这种通常是加密块太大了,然后就被拆分成小些的块,每块相当于前面的第一种情况。

是不是以为这种情况是最后一种情况了,不是的,它还有一种情况,是多个加密块组成一个大块,然后再被分到多个数据块里,我不禁在想,这个开发者是不是俄罗斯套娃的小迷弟。

03


长连接数据解密

长连接里面的base64,是一个加密的消息内容,当然需要解密,这里给出简单的解密代码。

def decmsgdata(self,data):
        decdata = b''
        if len(data) == 0:
            return decdata
        try:
            encdata = base64.b64decode(data)
            if len(encdata) == 0:
                return decdata
            if len(encdata) % 16 != 0:
                return data
        except:
            return data
        key, iv = deck()
        try:
            model = {'ECB': AES.MODE_ECB, 'CBC': AES.MODE_CBC}['CBC']
            padding = 'pkcs7'
            aes = AES.new(key, model, iv)
            decdata = unpad(aes.decrypt(encdata), 16, padding)
            return decdata.strip(b'\0')
        except:
            return data

04


结束

有想要交流长连接处理解密经验朋友,可以畅所欲言。

别忘点“在看”、“赞”和“分享”

新的规则,及时收推文要先给公号星标

别忘了星标一下,不然就错过了

dcc975ab558081c3ef9726113d1d4223.jpeg

长按进行关注,时刻进行交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/485077.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中间件设置静态资源目录

文章目录 为什么要设置静态资源目录设置静态资源代码示例 为什么要设置静态资源目录 服务器中的代码,对于外部来说都是不可见的, 所以我们写的html页面,浏览器无法直接访问 如果希望浏览器可以访问,则需要将页面所在的目录设置静…

洛谷day3

B2053 求一元二次方程 - 洛谷 掌握printf用法&#xff1b; #include <iostream> #include <cmath> using namespace std; double a,b,c; double delta; double x1,x2;int main() {cin>>a>>b>>c;delta b*b-4*a*c;if(delta>0){x1 (-bsqrt…

微服务(基础篇-003-Nacos集群搭建)

目录 Nacos集群搭建 1.集群结构图 2.搭建集群 2.1.初始化数据库 2.2.下载nacos 2.3.配置Nacos 2.4.启动 2.5.nginx反向代理 2.6.优化 视频地址&#xff1a; 06-Nacos配置管理-nacos集群搭建_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p29&…

包子凑数 蓝桥杯

关于这题的数学定理&#xff0c;如果 a,b 均是正整数且互质&#xff0c;那么由 axby&#xff0c;x≥0&#xff0c;y≥0 不能凑出的最大数是 &#xff1a;a*b-a-b 想不起来的时候&#xff0c;把能列出来的数据列出来找规律&#xff0c;不互质得数不符合题目所说 类似于力扣零钱…

Clion使用 - vcpkg

创建空白C项目 引入vcpkg插件 开启清单模式 引入某个库&#xff08;以cjson库为例&#xff09; 在代码中使用某个库&#xff08;以cjson库为例&#xff09;

数据结构和算法:树

二叉树 与链表类似&#xff0c;二叉树的基本单元是节点&#xff0c;每个节点包含值、左子节点引用和右子节点引用。 /* 二叉树节点结构体 */ struct TreeNode {int val; // 节点值TreeNode *left; // 左子节点指针TreeNode *right; // 右子节点指针TreeNode(int x) : val(x),…

uniapp页面嵌套其他页面的实现

功能: 类似于一个drawer&#xff0c;当主页面加载的时候会一并加载url对应的组件&#xff0c;当点击后以drawer形式显示组件里面的内容&#xff0c;可动画。 <navigator url"/pages/my/components/personalMessage" slot"right"><view><di…

阿里云4核8G云服务器优惠价格表,多配置报价

阿里云4核8G云服务器优惠价格955元一年&#xff0c;云服务器ECS通用算力型u1实例。2024年腾讯云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff…

【自然语言处理】统计中文分词技术(一):1、分词与频度统计

文章目录 一、词与分词1、词 vs 词素2、世界语言分类 二、分词的原因与基本原因1、为什么要分词2、分词规范3、分词的主要难点-切分歧义如何排除切分歧义利用词法信息利用句法信息利用语义信息利用语用、语境信息 4、分词的主要难点-未登录词未登录词如何识别未登录词 三、分词…

Spark spark-submit 提交应用程序

Spark spark-submit 提交应用程序 Spark支持三种集群管理方式 Standalone—Spark自带的一种集群管理方式&#xff0c;易于构建集群。Apache Mesos—通用的集群管理&#xff0c;可以在其上运行Hadoop MapReduce和一些服务应用。Hadoop YARN—Hadoop2中的资源管理器。 注意&…

力扣3. 无重复字符的最长子串

Problem: 3. 无重复字符的最长子串 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.川建一个set集合存储最长的无重复的字符&#xff1b; 2.创建双指针p、q&#xff0c;每次当q指针指向的字符不在set集合中时将其添加到set集合中让q指针后移&#xff0c;并且更新…

【Transformer】transformer注解

every blog every motto: You can do more than you think. 0. 前言 transformer注解 在过去的一年里&#xff0c;《Attention is all you need》中的transformer一直萦绕在很多人的脑海里。除了在翻译质量上产生重大改进之外&#xff0c;它还为许多其他NLP任务提供了一种新的…

cocos3.0 关于UI组件学习

Sprite 图片&#xff1a;官方文档 Size Mode: 1.Raw&#xff1a;原始大小 2.TRIMMED: 默认&#xff0c;会裁切原始图片透明像素 3.Custom&#xff1a;自定义&#xff0c;只要修改ContentSize&#xff0c;会自动设置 Type 1.Simple:普通,会铺满&#xff0c;一张图。 2.Sliced…

卷积神经网络-卷积层

卷积神经网络-卷积层 1多层感知机&#xff08;MLP&#xff09;2卷积神经网络&#xff08;CNN&#xff09;3MLP和CNN关系与区别4仍然有人使用MLP的原因&#xff1a;5MLP的局限性&#xff1a;MLP的应用领域&#xff1a;总结&#xff1a;6全连接到卷积全连接层 vs 卷积层结构差异应…

(一)基于IDEA的JAVA基础7

关系运算符 运算符 含义 范例 结果 等于 12 false &#xff01; 不等于 1&#xff01;2 true > 大于 1>2 false < 小于 …

使用html做一个2048小游戏

下载地址: https://pan.xunlei.com/s/VNtiF13HxmmE4gglflvS1BUhA1?pwdvjrt# 提取码&#xff1a;vjrt”

Springboot家乡特色推荐系统

目录 背景 技术简介 系统简介 界面预览 背景 在当今这个网络迅猛发展的时代&#xff0c;计算机技术已经广泛应用于我们生活的每个角落&#xff0c;互联网在经济和日常生活等多个方面扮演着至关重要的角色&#xff0c;它已成为人们分享资源和快速交流信息的关键平台。在中国…

备战蓝桥杯Day35 - 动态规划 - 01背包问题

问题描述 隐含前提&#xff1a; 1.物体是不可分的&#xff0c;要么装&#xff0c;要么不装&#xff0c;不能只装一部分。 2.物体顶多使用一次。 动态规划思路 我在b站上看的闫氏dp分析大法的视频&#xff0c;他对dp问题做了总结归纳。 从集合的角度分析dp问题。求出有限集…

基于netcore的乡镇土地竞拍系统前端vue+mysql数据库

基于netcore的乡镇土地竞拍系统前端vuemysql数据库 本系统将采用采用Visual Studio2019版本为该系统的开发工具&#xff0c;Net 语言进行开发。系统从选题开始&#xff0c;共经历了搜集选题背景信息和选题目的及意义的分析&#xff0c;通过对国内外的研究&#xff0c;需求分析的…

nodejs+vue高校洗浴管理系统python-flask-django-php

高校洗浴管理系统采用数据库是MySQL。网站的搭建与开发采用了先进的nodejs进行编写&#xff0c;使用了express框架。该系统从两个对象&#xff1a;由管理员和学生来对系统进行设计构建。主要功能包括&#xff1a;个人信息修改&#xff0c;对学生管理、浴室信息、浴室预约、预约…