途游斗地主加密协议分析及破解
点击上方↑↑↑蓝字[协议分析与还原]关注我们
“ 分析途游斗地主的加密协议。”
作为一个手机棋牌游戏厂商,途游是排得上号的,它的途游斗地主一直很火热,隐约记得,这个厂商一直在搞斗地主的全国竞技赛事,并蹭上了体育总局的IP,几轮投资人包括昆仑万维、奇虎360、创新工场、挑战者资本、星路资本等,甚是了得,不知道身后是哪位大佬。
作为专业的协议分析平台,当然不能错过对这个厂商的产品的分析,这里,将对途游棋牌的当家花旦——途游斗地主进行分析。
毫无疑问,途游斗地主的的数据是加密的,不是HTTP,不然这里就只有鄙视,而不会专门分析了。
它在整体上,加密分成两个部分,一个是HTTP承载的加密数据,一个是TCP长连接承载的加密数据。因此本文会分别对这两块的加密进行分析。
01
—
整体情况
在刚接触途游斗地主的时候,按标准分析套路,首先对它使用顺便进行抓包,看看报文的大体情况,几个26000端口的HTTP:
一个非标端口的TCP长连接:
不得不感慨,这款游戏采用的是上来直接就干的模式,进入游戏,一切都自动了,直接进入牌桌牌局,没有其它额外的东西,我都忍不住玩了几局。
言归正传,看了下游戏相关的流量加密了,那我们也开干吧!
使用android killer打开APK包,看了下大体结构,游戏是使用cocos2dx开发的,斗地主的游戏主体在脚本ddz_release.jsc里面:
下面的章节就介绍它的解密了。
02
—
HTTP体解密
前面抓包看到,打开途游斗地主首先出现的是几个26000端口的HTTP,使用的域名是fee.uebilling.com,不知道这个服务器上都在做啥:
很明显,请求和响应里面的http体是base64编码的,解开base64是二进制,明显有加密,一番探索,得到结果,加密方法是DES_ecb3_encrypt,密钥固定24字节"dbbsRYnaQPKia/sCWJGRNAsQH7PLIw3a",直接上解密代码:
解一段报文试试,各种参数:
基本上是属于个人信息。
03
—
TCP长连接解密
游戏运行过程中,长连接一直存在,估计是进行游戏数据的交互的:
继续分析,直接粗暴地上解密代码,不详细解释了:
简单的异或加密,只是用来异或的密钥值是动态的,每次连接有变化,每个报文块也会变化,密钥是连接起始的数字和每块长度数据相加的结果。
连接的IP端口怎么协商的,这里就不介绍了,如果哪位朋友有兴趣,分析一番就能得到结论。
解密没什么难度,诡异的是解密结果:
尝试在游戏界面找结果出现的地方,没找到呀,这是为啥?
再结合百度搜索出现的诡异热点内容关联:
是不是背后隐藏了什么秘密?
04
—
总结
途游斗地主这款游戏,加密的强度很小,分析起来基本没有难度,有兴趣的朋友可以拿去练手。3des、异或这些加密,是最初级的加密算法了。
我对它分析,其实感兴趣的是它背后的东西,比如上一节的末尾“途游输了倾家荡产”这个背后有些什么秘密,这个相关热点,我倾向于相信百度没有进行人工操控,完全是无数百度用户的搜索动作配合代码逻辑触发的,大家不妨一起探索,看看是如何倾家荡产的。
大家一起努力,学习学习再提高,可与我联系,一起交流心得。
长按进行关注,时刻进行交流。
点击“在看”,与朋友一起分享↘
相关文章:

URI、URL以及URN的区别
首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,…

[转]使用设计模式改善程序结构(二)
使用设计模式改善程序结构(二) 在本系列的 第一篇文章中,描述了如何通过设计模式来指导我们的程序重构过程,并且着重介绍了设计模式意图、动机的重要性。在本文中我们将继续上篇文章进行讨论,这次主要着重于设计模式的…

iOS arm 64 的了解
ARM 简介:ARM处理器是英国Acorn有限公司设计的低功耗成本的第一款RISC微处理器。全称为Advanced RISC Machine。百度介绍 iOS设备中的处理器都是基于ARM架构的。 arm设备真机i386(iphone5,iphone5s以下的模拟器)x86_64(iphone6以上的模拟器…
wireshark和tcpdump抓包TCP乱序和重传怎么办?PCAP TCP排序工具分享
点击上方↑↑↑蓝字[协议分析与还原]关注我们 “ 介绍TCP排序方法,分享一个Windows版的TCP排序工具。” 在分析协议的过程中,不可避免地需要抓包。 无论抓包条件如何优越,无论Windows下使用wireshark还是Linux下使用tcpdump,无论是…

USACO JANUARY——矩形[rects]
Description 给出N个矩形(1≤N≤100)和它的长和宽(不超过1000),写一个程序找出最大的K,使得有K个矩形满足层层包含的关系,即里层的矩形被所有外层的矩形包含.一个矩形P1包含另一个矩形P2,则P2的一边小于P1的一边&#…

ORACLE分页SQL
ORACLE分页SQL 1,使用rownum SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM < 40 ) WHERE RN > 21 2,使用between SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) W…

01-基本概念
GCD 1 基本概念 概念: 是 Apple 开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并发任务 优点 多核并行运算不需要手动管理线程生命周期自动利用CPU的内核 两个基本点…
cocos2d游戏jsc文件格式解密,SpideMonkey大冒险
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 介绍cocos2d游戏中常用的jsc格式文件的解密。” 01 — 在破解游戏应用中,经常会碰到后缀为jsc的文件,这是基于cocos2d开发的游戏的加密代码,本质上是js文件,只是被加密了。 例如之前…

02-dispatch_barrier
1 dispatch_barrier_async 概念 栅栏方法,暂时的将一部操作做成一个同步操作,向一个栅栏一样的分开 dispatch_barrier_async函数的作用是在进程管理中起到一个栅栏的作用,它等待所有位于barrier函数之前的操作执行完毕后执行,并且在barrier函数执行之后…

sqljdbc.jar 和 sqljdbc4.jar
从微软官网下载的Sql server2008的JDBC jar包,解压后里面有两个jar包(sqljdbc.jar 和 sqljdbc4.jar)。到底应该用哪个呢? 地址: http://www.microsoft.com/downloads/details.aspx?FamilyIDa737000d-68d0-4531-b65d-d…

综合性深入的技术文章-20161103
已读文章: SqlServer性能检测和优化工具使用详细 百万级访问网站前期的技术准备 从100PV到1亿级PV网站架构演变 待阅读: 从0到千万级访问量网站架构演变史 memcached全面剖析–5. memcached的应用和兼容程序 PHP解决网站大流量与高并发 NGINX防御CC攻击教…
头条小视频和西瓜视频signature签名算法
点击上方↑↑↑蓝字[协议分析与还原]关注我们“分析今日头条内小视频和西瓜视频分享后浏览器打开所用的signature签名算法。” 上月写的一篇关于使用微信的wxid加好友的文章,竟然无意间碰到了一个微信搜索黑洞,成就了本号有史以来搜索量、阅读量、关注度…

一个winform带你玩转rabbitMQ
源码已放出 https://github.com/dubing/MaoyaRabbit 本章分3部分 一、安装部署初探 二、进阶 三、api相关 安装 部署 初探 先上图 一. 安装部署 下载 rabbitMQ :http://www.rabbitmq.com/download.html 安装rabbitmq需要erlang,下载erlang:ht…

03-dispatch_after
1 dispatch_after 概念 在指定时间之后将任务追加到主队列中。严格来说,这个时间并不是绝对准确的,但想要大致延迟执行任务,dispatch_after函数是很有效的。 NSLog("currentThread---%",[NSThread currentThread]); // 打印当前线…

C#模糊查询绑定datagridview
private CollectionViewSource wgdData new CollectionViewSource(); private DataTable Ds_wgd { get { return this.dgv_wgd.ItemsSource as DataTable; } set { wgdData.Source value; this.dgv_wgd.ItemsSource ((DataTable)wgdData.Source).DefaultView; } } //文本框修…

今日头条反爬措施形同虚设,论多平台协同在安全方面的重要性
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 玩头条练技能。”大家好,看到标题一定猜到了,我又来玩今日头条了,谁让它是东半球文明的杀时间神器呢。 想当年,头条刚问世,正愁长辈看新闻没合适且方便的工具࿰…

ueditor编辑器和at.js集成
源码: <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%//禁止jsp解析${} %> <% page isELIgnored"true"%> <%String path request.getContextPath();String basePath reques…

Java缓存学习之五:spring 对缓存的支持
(注意标题,Spring对缓存的支持 这里不单单指Ehcache ) 从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当…

04-dispatch_group
dispatch_group 实现线程同步 比如说,第一步我想先下载三张图片,然后第二步再去主线程刷新imgview 显示图片。 利用dispatch_group 来进行实现 ,简单来讲就四行代码. 就可以让代码按照你想要的顺序进行发生。 使用步骤 创建一个dispatch_g…
fiddler教程:抓包带锁的怎么办?HTTPS抓包介绍。
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 介绍Fiddler的HTTPS抓包功能。” 这里首先回答下标题中的疑问,fiddler抓包带锁的原因是HTTPS流量抓包功能开启,但解密功能未开启导致,只需要将HTTPS流量解密功能开启就能解决问题。01—作为一款…

如何实现后台向前台传数据
技术交流群:233513714 这两天正在研究如何让后天主动向前台展现数据,只要后台有数据上传的时候就向前台上传(因为公司有个项目,硬件设备会不断的上传数据,服务端将接收到的数据向前台展示)。在网上查了一下,下面将介绍…

05-dispatch_semphore
dispatch_semphore 信号量 dispatch_semaphore信号量为基于计数器的一种多线程同步机制。如果semaphore计数大于等于1,计数-1,返回,程序继续运行。如果计数为0,则等待。dispatch_semaphore_signal(semaphore)为计数1操作,dispatc…

[leetcode]_Integer to Roman
题目:对应之前那道将罗马数字转换整型数字的题目。反过来。 思路:刚开始做的时候,想着用程序进行判断,复杂的要死。网络了别人代码,非常清晰。 代码: 1 public String intToRoman(int num) {2 S…
fiddler使用技巧进阶,如何抓包修改数据?——AutoResponder重定向
“ 介绍Fiddler的AutoResponder重定向功能。” Fiddler功能十分强大,既能抓取报文,也能构造报文,本文继续介绍fiddler的功能,这次的功能与构造报文相关,用来回答标题中的疑问,即修改数据的方法,…

nginx基于IP的虚拟主机
知识点: server的语法: upstream语法: upstream中192.168.100.1不是ip只是个标识,只要和下面的proxy_pass 对应即可。 基于IP的虚拟主机: listen和server_name中多加上端口也没问题 listen可以监听在虚拟ip上面 代码&a…

读《人月神话》所感
《人月神话》 读书心得:因为现在还是学生,且没有什么真正在应用项目的开发经验,所以读《人月神话》这本书,与其说是在学习这位计算机先驱的经验,不如说是在了解一个大型软件系统的开发过程以及在开发过程中将会遇到的…
Android逆向之调试smali代码基础
点击上方↑↑↑蓝字[协议分析与还原]关注我们 “ 介绍Android逆向中调试smali代码的方法。” 最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享。 本文介绍Android逆向中smali代码的调试及环境的准备。 事先准备如下工具…

Python之路【第五篇】:面向对象及相关
Python之路【第五篇】:面向对象及相关 Python之路【第五篇】:面向对象及相关 面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇面向对象进阶篇其他相关 一、isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 123456class Foo…

关于安卓版的eclipse连接数据库并誓言增删改查
在安卓环境下连接数据库下面是主要代码极其作用: 1.编写 The Class类把课程表courses.db当做一个实体类,hashcode和equals这两个类是为了判断输入的查询内容和Excel表中的内容是否一致。 并在java里面区别两个对象是否一致 1 public class TheClass {2 …

07-主队列和全局队列
GCD 会主动的提供一个队列供开发者使用。 主队列 系统提供的串行队列 是在主线程执行的队列,所以是串行的队列。任务一个个执行。 dispatch_get_main_queue() 全局队列 系统提供的并发队列 全局队列是所有应用程序都能够使用的并发队列,不需要手动的创…