
赛尔号发包实例及逆向分析-易语言
5星
- 浏览量: 0
- 大小:None
- 文件类型:ZIP
简介:
本教程详细介绍在《赛尔号》游戏中使用易语言进行脚本编写和逆向工程的实例解析,涵盖从基础语法到高级应用的技术要点。
以前分享过摩尔庄园、奥比岛等游戏的数据包例子,后来官方更改了加密方式。这次我来分享一个赛尔号发送数据的例子。
请注意不要将此用于非法用途,本贴仅用于技术交流与学习目的。
### 0x01 前言
Flash 游戏即将被淘汰,被称为最强大的 AS 加密方法 Alchemy 被应用于一些主流的网页游戏中。许多游戏转向了 H5 或者手游端。今天闲来无事,就上手一款童年经典游戏——赛尔号。
### 0x02 准备工具
需要使用 FFDEC(一个功能强大的免费开源 SWF 反编译工具)、Chrome 浏览器、以及在线 Hex 编辑器等工具进行逆向分析与还原工作。
### 0x03 分析过程
通过浏览器加载游戏,并利用开发者工具抓取到的数据包中,可以看到有一个 dll.xml 配置文件。此游戏中核心数据通常存储在 TaomeeLibraryDLL.swf 文件内。直接将 SWF 文件拖入 FFDec 可能会读取失败,需要先使用 Hex 编辑器处理一下 CWS 标识码和一些无用的数据。
接着,在 Client.swf 中查看对 swf 文件加载的代码:
```actionscript
private function onComplete(e:Event):void {
var info:DLLInfo = this._dllList[0];
var byteArray:ByteArray = new ByteArray();
if(this._isRelease) {
this._stream.readBytes(new ByteArray(), 0, 7);
// 设置了位置,跳过前面的无用数据
this._stream.position = 7;
}
this._stream.readBytes(byteArray);
if(this._isRelease){
byteArray.uncompress(); // 进行 Zlib 解压处理
}
this._loader.loadBytes(byteArray, new LoaderContext(false, ApplicationDomain.currentDomain));
}
```
该代码中,通过读取字节流并解压缩后加载 SWF 文件。接着就是发送数据包的函数分析。
```actionscript
public function send(param1:uint, param2:Array):uint {
var loc3_:* = null;
var loc4_:* = null;
if(this.connected) {
loc3_ = this.pack(this.userID,param1,param2);
loc3_.position = 0;
// 加密处理
loc4_ = MessageEncrypt.encrypt(loc3_);
writeBytes(loc4_);
flush(); // 发送数据出去
this.sendDataError(param1);
DebugTrace.show(Socket[ + this.ip + : + this.port.toString() + ][cmdID: + param1 + ]
, getCmdLabel(param1)
,[data length: + this._sendBodyLen]);
}
}
```
通过以上代码可以看出,`param1` 是数据包的命令码,而 `param2` 包含了所有发送的数据。
全部评论 (0)


