-
赛尔号的发包实例及其逆向步骤 - 易语
资源介绍
以前分享过摩尔庄园、奥比岛等发包例子,后来官方更改了加密手段,这次分享个赛尔号的发送数据例子
切勿用于非法用途,本贴只用于技术交流与学习
赛尔号通信数据的逆向分析与还原(思路篇)
0x01 前言
flash游戏即将淘汰,被称为最强的as加密方式Alchemy被应用于一些主流的页游,很多游戏都转战h5或者手游端。今天闲来没事,就上手一款童年游戏。"赛尔号",应该是全网首发吧
0x02 准备工具
FFDEC(强大的免费开源swf反编译工具) 、 Chrome浏览器 、在线Hex编辑
0x03分析过程
使用 浏览器加载游戏并 通过 开发者工具抓取到数据包可以发现一个dll.xml的配置文件此游戏的习惯将核心数据存放于==TaomeeLibraryDLL.swf==文件当中。此时直接将swf文件拖入FFDec会发现,读取失败。需要拖入Hex编辑器搞一下==CWS== 是标识码 具体可以参考 Swf文件头信息,前面则是一些无关紧要的数据。可以看到在Client.swf里对于swf文件的加载是这样处理的
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);//相当于设置了位置 前面可以看出到,标识码前面有7个字节是无用的数据 gt;gt; this._stream.potion=7
}
this._stream.readBytes(byteArray);//
if(this._isRelease)
{
byteArray.uncompress();//再进行Zlib解压处理
}
this._stream.close();//关闭字节流
//然后就加载
this._loader.loadBytes(byteArray,new LoaderContext(false,ApplicationDomain.currentDomain));
}
思路清晰,可以干代码,这里使用了易语言
导出文件
可以,再将其导入FFdec看看效果。解压后,开始找与通讯的类。一般搜索flash.net.Socke即可==send(param1, param2) #4CAF50==发送数据包的函数
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("gt;gt;Socket[" + this.ip + ":" + this.port.toString() + "][cmdID:" + param1 + "]",getCmdLabel(param1),"[data length:" + this._sendBodyLen + "]");
//这里可以清晰的看出 param1是数据包的命令码,param2为数据的整体
retur
- 上一篇: 易语言 e秒百科模块
- 下一篇: Debug Hacks中文版--深入调试的技术和工具