赛尔号通信数据的逆向分析与还原思路

赛尔号通信数据的逆向分析与还原(思路篇)

0x01 前言

flash游戏即将淘汰,被称为最强的as加密方式Alchemy被应用于一些主流的页游,很多游戏都转战h5或者手游端。今天闲来没事,就上手一款童年游戏。”赛尔号”,应该是全网首发吧

0x02 准备工具

FFDEC(强大的免费开源swf反编译工具) 、 Chrome浏览器 、 在线Hex编辑

0x03分析过程

使用 浏览器加载游戏并 通过 开发者工具抓取到数据包
可以发现一个dll.xml的配置文件
Dll信息
此游戏的习惯将核心数据存放于==TaomeeLibraryDLL.swf==文件当中。
此时直接将swf文件拖入FFDec会发现,读取失败。
读取失败
需要拖入Hex编辑器搞一下
CWS
==CWS== 是标识码 具体可以参考 Swf文件头信息,前面则是一些无关紧要的数据。
可以看到在Client.swf里对于swf文件的加载是这样处理的

思路清晰,可以干代码,这里使用了易语言
啦啦啦

导出文件
是

可以,再将其导入FFdec看看效果。
完美加载
解压后,开始找与通讯的类。一般搜索flash.net.Socke即可
==send(param1, param2) #4CAF50==发送数据包的函数

这里有1个知识点,记一下
public class SocketEncryptImpl extends Socket 这个类是继承了 Socket,所以在发送数据包的时候writeBytes(loc4_);和flush(); 其实是省略了 Socket.writeBytes和Socket.flush()

根据分析可得,MEncrypt(param1,loc2,loc3);
传入的参数是 原始数据param1 、加密的长度、加密后的数据loc3_
继续找 MEncrypt函数内容

我们来看这个Key是如何获取的 ==com.robot.core.net.SocketConnectio==  找到此类
在 ==RobotCoreDLL.swf==此dll上面可以找出

这位程序员也是挺可爱的,默认的密钥为 ==crack me Nothing :-)==
然后找出设置 ==setEncryptKeyStringArr== 的地方,一般设置密钥如果不是固定的,则可能是服务器返回的数据。如登录的时候,返回密钥。所以我们可以找登录的函数

在 ==RobotAppDLL.swf==此dll中,可以找到登陆包返回处理的函数。里面包含初始化密钥的处理方式,而且是只取前10位
当然直接搜索 ==setEncryptKeyStringArr== 是无效的,因为是==getDefinitionByName==
综合以上就基本上完成数据的解密工作了。

我使用的是易语言来进行操作
seer

MDe

Key

_De

Key获取
Key处理Key获取

效果图

0x04 写在最后

tm的加解密方式是通用的,只是密钥不同。
如赛尔号的是从返回包截取的
摩尔庄园 “^FStx,wl6NquAVRF@f%6”
赛尔号2  “taomee_seer2k~#”
小花仙 “v#93ta0mee+fl0WErd0t2eatMee&#$+@n0”

从09年到现在,tm的游戏从序列号自加1到封包的加密,也是历经了一段历史了吧,如今各种技术层出不穷。写这篇文章也纯属爱好和对技术的热爱。以前期盼着每周五的更新,到现在也是对过去的一种致敬吧。

发表评论

文章信息
字数 658
价格 免费
购买人数 0
作者信息
这个大佬什么都没有留下。