• 途游斗地主加密协议分析及破解


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


     分析途游斗地主的加密协议

    作为一个手机棋牌游戏厂商,途游是排得上号的,它的途游斗地主一直很火热,隐约记得,这个厂商一直在搞斗地主的全国竞技赛事,并蹭上了体育总局的IP,几轮投资人包括昆仑万维、奇虎360、创新工场、挑战者资本、星路资本等,甚是了得,不知道身后是哪位大佬

    作为专业的协议分析平台,当然不能错过对这个厂商的产品的分析,这里,将对途游棋牌的当家花旦——途游斗地主进行分析。

    640?wx_fmt=png

    毫无疑问,途游斗地主的的数据是加密的,不是HTTP,不然这里就只有鄙视,而不会专门分析了。

    它在整体上,加密分成两个部分,一个是HTTP承载的加密数据,一个是TCP长连接承载的加密数据。因此本文会分别对这两块的加密进行分析。

    01

    整体情况

    在刚接触途游斗地主的时候,按标准分析套路,首先对它使用顺便进行抓包,看看报文的大体情况,几个26000端口的HTTP:

    640?wx_fmt=png

    一个非标端口的TCP长连接:

    640?wx_fmt=png

    不得不感慨,这款游戏采用的是上来直接就干的模式,进入游戏,一切都自动了,直接进入牌桌牌局,没有其它额外的东西,我都忍不住玩了几局。

    言归正传,看了下游戏相关的流量加密了,那我们也开干吧!

    使用android killer打开APK包,看了下大体结构,游戏是使用cocos2dx开发的,斗地主的游戏主体在脚本ddz_release.jsc里面:

    640?wx_fmt=png

    下面的章节就介绍它的解密了。

    02

    HTTP体解密

    前面抓包看到,打开途游斗地主首先出现的是几个26000端口的HTTP,使用的域名是fee.uebilling.com,不知道这个服务器上都在做啥:

    640?wx_fmt=png

    很明显,请求和响应里面的http体是base64编码的,解开base64是二进制,明显有加密,一番探索,得到结果,加密方法是DES_ecb3_encrypt,密钥固定24字节"dbbsRYnaQPKia/sCWJGRNAsQH7PLIw3a",直接上解密代码:

    640?wx_fmt=png

    解一段报文试试,各种参数:

    640?wx_fmt=png

    基本上是属于个人信息。

    03

    TCP长连接解密

    游戏运行过程中,长连接一直存在,估计是进行游戏数据的交互的:

    640?wx_fmt=png

    继续分析,直接粗暴地上解密代码,不详细解释了:

    640?wx_fmt=png

    简单的异或加密,只是用来异或的密钥值是动态的,每次连接有变化,每个报文块也会变化,密钥是连接起始的数字和每块长度数据相加的结果。

    连接的IP端口怎么协商的,这里就不介绍了,如果哪位朋友有兴趣,分析一番就能得到结论。

    解密没什么难度,诡异的是解密结果:

    640?wx_fmt=png

    尝试在游戏界面找结果出现的地方,没找到呀,这是为啥?

    再结合百度搜索出现的诡异热点内容关联:

    640?wx_fmt=png

    是不是背后隐藏了什么秘密?

    04

    总结

    途游斗地主这款游戏,加密的强度很小,分析起来基本没有难度,有兴趣的朋友可以拿去练手。3des、异或这些加密,是最初级的加密算法了。

    我对它分析,其实感兴趣的是它背后的东西,比如上一节的末尾“途游输了倾家荡产”这个背后有些什么秘密,这个相关热点,我倾向于相信百度没有进行人工操控,完全是无数百度用户的搜索动作配合代码逻辑触发的,大家不妨一起探索,看看是如何倾家荡产的。

    大家一起努力,学习学习再提高,可与我联系,一起交流心得。


    640?wx_fmt=jpeg

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

    点击“在看”,与朋友一起分享↘

  • 相关阅读:
    LeetCode 75. Sort Colors(按颜色进行排序)
    LeetCode 451. Sort Characters By Frequency(按照字符出现次数对字符串排序)
    LeetCode 347. Top K Frequent Elements(出现频率最多的 k 个元素)
    LeetCode 215. Kth Largest Element in an Array(数组求第k大)
    CF #629 Div.3 E(LCA)F
    系统函数
    CASE表达式
    循环得出数据库中所有的 DB_ID,DB_NAME
    数据库的编码问题
    检验临时表是否存在
  • 原文地址:https://www.cnblogs.com/protosec/p/11673317.html
Copyright © 2020-2023  润新知