首页
社区
课程
招聘
[原创]QQ游戏--四国军旗数据分析及辅助分析工具的设计
发表于: 2006-8-8 18:21 27071

[原创]QQ游戏--四国军旗数据分析及辅助分析工具的设计

2006-8-8 18:21
27071
QQ游戏--四国军旗数据分析及辅助分析工具的设计


【作者】北极星2003
【来源】看雪技术论坛(bbs.pediy.com)
【时间】2006-8-8

        最近在QQ游戏上玩了几次四国军旗,这是以前高中时经常玩的游戏。现在玩起来又别是一番滋味,不过跟以前不同的是,现在看到一个软件总是会想它是怎么实现,内部的存储结构是什么之类的问题,成习惯了。

        此次分析,纯粹是出于兴趣。主要的分析对象是棋谱文件(JQL)和复盘文件(JQS),前者是用来保存军旗布局的文件,后者是记录一局游戏的文件。

分以下几部分来介绍:
(1)        JQL文件的存储结构
(2)        棋盘的存储结构
(3)        JQS文件的存储结构
(4)        指令详解(重点)
(5)        “QQ游戏-四国军旗 数据分析辅助工具”的开发(附源码)

一、        JQL文件的存储结构

这是从JQL文件分析而得的,JQL文件很小(50B),下面给出一个例子:


        开始的20个字节(图中的白色部分)只是一个信息头,不离它,后面30个字节(蓝色部分)就是一个棋局,如下所示:

        左图为从QQ游戏中调入该GQL文件的示例,右图为在我的软件的表示。

        根据图示,很容易就推断出棋子的等级表示:
军旗:0X02
地雷:0X03
炸弹:0X04
司令:0X05
军长:0X06
师长:0X07
旅长:0X08
团长:0X09
营长:0X0A
连长:0X0B
排长:0X0C
工兵:0X0D

每行5个,6行,共30。刚好对应30个字节。军营上没有棋子用0X00表示。

二、        棋盘的存储结构

棋盘的存储结构只是一个简单的二维数组,共0X10行0X10列,以起始玩家的角度来看是从上而下行递增,从右到左列递增,如下图所示:


在内存有了这个二维数组,那么每个特定的棋子的位置可以用两个字节来表示。  

三、        JQS文件的存储结构

JQS文件是以0X28字节的信息头开始,接着为4个玩家的信息CHESSBOARD_LAYOUT 结构,接着为0X20的保留字段,再接着就是指令,最后为8字节的0结束。

为了更清晰的表示该结构,下面以C语言的结构体来描述:
  

(注:在我的软件中并非用上面的结构,而是封装成class,但原理都是一样的,这里用结构体描述比较清楚)

JQS总结结构比较简单,难点在于指令部分。

JQS的玩家信息是以起始玩家开始顺时针存储的,我把JQS中的玩家信息依次称为“第一玩家”,“第二玩家”,“第三玩家”,“第四玩家”,在指令中的玩家标识依次为“0X00”,“0X01”,“0X02”,“0X03”。通常游戏以逆时针方式进行的,这样游戏的进行方式是“0X00”―> “0X03”―>“0X02”―>“0X01”。

四、指令详解

对于一个JQS文件,记录了棋盘布局信息,以及每个玩家的每一次动作。在本文中,我把JQS所记录的每一个动作称为一个指令。每个指令的长度固定为10个字节。

指令有两种:一种是普通的动作,例如移动,进攻等;另一种是系统控制信息,例如判定玩家超时,战败,退出等,属于服务对于客户端的控制信息。这里我把前者称为执行指令,后者称为控制指令。

        这里我只给出分析的结构,有兴趣的朋友可以使用在附件中提供的JQS文件结合我的数据分析辅助工具对指令进行验证。
(1)执行指令详解
  

(2)控制指令详解


五.“QQ游戏-四国军旗 数据分析辅助工具”的开发

        具体怎么实现的,这里我不想再多介绍,附上源码,供有兴趣的朋友自行研究。这里对这个软件的作用进行大致的介绍,以及关于本软件的一些关键东西。

        (1)软件界面如下:
  

        这里需要说明的是指令类型中的8个字符为位信息,组成一个字节,就是执行指令的第二个字节。

        对应指令中为10个字节的指令,为了直观软件在需要的地方加了空格。
       

        (2)指令过滤器

                设计原理:根据用户输入的过滤指令信息,与所有的指令按字节相与,如果结果与原始的过滤指令相同,则表示符合要求。

                指令过滤器如下:
  
        图中的过滤命令“F5 00 00 00 00 00 00 00 00 00”可以用来显示所有的控制指令。

        如果把“F5”改成“00”,那么就可以显示全部的指令,如下所示:
  

过滤出所有在游戏中自杀的控制信息,如下图所示例:


        看来玩家“03”,“01”都是在游戏中忍受不了被虐待而自杀的,悲哀!!

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (35)
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
2
看不太懂。支持一下!
2006-8-8 18:24
0
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
此贴一定要顶
2006-8-8 18:50
0
雪    币: 260
活跃值: (102)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
研究研究,幻想写个斗地主的计牌器,从网上找的带病毒,郁闷!
2006-8-8 20:20
0
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我也看不懂。

顶一下
2006-8-8 21:39
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
6
强贴必留名
2006-8-8 21:54
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个牛

PFPF
2006-8-8 22:16
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
看不懂!!
2006-8-8 22:33
0
雪    币: 179
活跃值: (131)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
9
嘛玩意别让北极星感兴趣,要不就会被肢解
2006-8-8 22:34
0
雪    币: 222
活跃值: (40)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
留名必强贴
2006-8-8 23:02
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
1:首先表示我对版主的无限崇拜,我一直梦想写一个程序,将我所有保存的复盘全部分析一遍,某一个复盘是由那三个人和我下的,他们的名字和QQ号码是多少,级别是什么,最后输赢情况。这样如果我开始一个新的对战时可以自动采集其他三家的QQ号码和数据库中比较,迅速定位出来他从前的布局和走棋思维,达到作弊的目的,前提是和很多很多人下过有很多很多的复盘,建立一个很大的数据库。
2:呵呵,当然作弊不是目的,因为我记性差,我主要想作一个计牌器,比如我38撞死了,肯定是39、40之一,我想能不能有个软件跟踪这个39或者40,他走到那里了就在计牌器中标识他的位置,前些日子搜索到了兄弟工作组的《联众四国军棋参谋1.216》,他就可以实现这些目的,但是对于QQ好像没有出来相应东东。其实就是想知道人家怎么做的,学习一下技术,作弊输赢2分实在没有意思,为了这两个目的,近日开始慢慢学习复盘文件的结构,没有想到版主这么快就搞定了,非常非常的佩服,我一定好好学习。
3:一直以来对于QQ软件比较关注论坛中的讨论,包括2005年3月的2005QQ本地密码破解,2005年4月的聊天记录读取器,我觉得无论别人怎么骂腾讯,QQ的程序还是由很多好的技术是值得我们学习的。在没有源代码的情况下,靠反编译读取别人的编程思路本身就是真正意义上黑客的正面形象,其实比较讨厌功利化的做法,纯粹的技术探索一直比较推崇。
再次感谢版主出手,没有想到你和我也有这么一个共同想法。同时希望版主闲暇时看看我的问题:SourceSafe中解决6.0d版本兼容问题,想必对你小意思。
声明:本人绝对菜鸟一个。
2006-8-9 13:46
0
雪    币: 249
活跃值: (10)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
12
看完了楼主文章才想到本菜鸟不会玩军旗
2006-8-9 15:43
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
13
最初由 weiwei 发布
1:首先表示我对版主的无限崇拜,我一直梦想写一个程序,将我所有保存的复盘全部分析一遍,某一个复盘是由那三个人和我下的,他们的名字和QQ号码是多少,级别是什么,最后输赢情况。这样如果我开始一个新的对战时可以自动采集其他三家的QQ号码和数据库中比较,迅速定位出来他从前的布局和走棋思维,达到作弊的目的,前提是和很多很多人下过有很多很多的复盘,建立一个很大的数据库。
2:呵呵,当然作弊不是目的,因为我记性差,我主要想作一个计牌器,比如我38撞死了,肯定是39、40之一,我想能不能有个软件跟踪这个39或者40,他走到那里了就在计牌器中标识他的位置,前些日子搜索到了兄弟工作组的《联众四国军棋参谋1.216》,他就可以实现这些目的,但是对于QQ好像没有出来相应东东。其实就是想知道人家怎么做的,学习一下技术,作弊输赢2分实在没有意思,为了这两个目的,近日开始慢慢学习复盘文件的结构,没有想到版主这么快就搞定了,非常非常的佩服,我一定好好学习。
3:一直以来对于QQ软件比较关注论坛中的讨论,包括2005年3月的2005QQ本地密码破解,2005年4月的聊天记录读取器,我觉得无论别人怎么骂腾讯,QQ的程序还是由很多好的技术是值得我们学习的。在没有源代码的情况下,靠反编译读取别人的编程思路本身就是真正意义上黑客的正面形象,其实比较讨厌功利化的做法,纯粹的技术探索一直比较推崇。
再次感谢版主出手,没有想到你和我也有这么一个共同想法。同时希望版主闲暇时看看我的问题:SourceSafe中解决6.0d版本兼容问题,想必对你小意思。
声明:本人绝对菜鸟一个。


计牌器之类的东西,是比较容易设计的,因为其中的 指令都已经清楚了

我不知道SourceSafe是什么东西,没研究过
2006-8-9 17:44
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
最初由 北极星2003 发布
计牌器之类的东西,是比较容易设计的,因为其中的 指令都已经清楚了

我不知道SourceSafe是什么东西,没研究过

因为自己功力很弱,还不会设计如何捕获对方棋子的移动,就是说棋子走动后计牌器能够自动获知位置并进行标识。刚刚研究了一下你的分析,非常精彩,但是不到保存复盘是无法得到该文件的,听《军旗参谋》中说QQ四国军旗每次传到客户端的只是一个截图而不是指令,对于截取数据包并进行分析还不会,呵呵,所以麻烦,希望老大继续深入下去,给菜鸟们一堂生动的学习课程。
SourceSafe是微软开发工具中用户代码配置管理的工具,一般单位开发用的多一些。
2006-8-9 18:26
0
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
15
顶一把;--
2006-8-9 18:33
0
雪    币: 260
活跃值: (259)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
16
好强悍啊
2006-8-9 20:06
0
雪    币: 333
活跃值: (11)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
17
你说,我不顶行吗?
2006-8-9 22:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ari
18
非常好,下载一下进行研究
2006-8-10 15:20
0
雪    币: 436
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
看了半天也看不懂!
不过还是觉得不错的!
怪只怪自己对计算机语言不懂!
2006-8-10 18:05
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
20
强,分析漂亮,文章也漂亮

没行5个,6行,共30。刚好对应30个字节。军营上没有妻子用0X00表示。

改二个字,一开始没有看懂,再就我怎么看见妻子了???把我逗乐的看不下去了,只好下载回去看了.
2006-8-10 18:13
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
21
最初由 hnhuqiong 发布
强,分析漂亮,文章也漂亮

没行5个,6行,共30。刚好对应30个字节。军营上没有妻子用0X00表示。


........


见笑了
2006-8-10 19:00
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
强人啊
我先下载学习一下
2006-8-10 20:25
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
23
北极星越来越牛,文章也越来越漂亮!佩服佩服!
2006-8-10 21:19
0
雪    币: 211
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
厉害的,下载了慢慢看。
2006-8-10 21:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
好东西!!!
2006-8-13 21:47
0
游客
登录 | 注册 方可回帖
返回
//