科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道四国军旗数据分析

四国军旗数据分析

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

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

作者:黑客基地 来源:黑客基地 2008年6月13日

关键字: qq黑客 QQ 黑客 qq盗号 qq黑客软件

  • 评论
  • 分享微博
  • 分享邮件

最近在QQ游戏上玩了几次四国军旗,这是以前高中时经常玩的游戏。现在玩起来又别是一番滋味,不过跟以前不同的是,现在看到一个软件总是会想它是怎么实现,内部的存储结构是什么之类的问题,成习惯了。此次分析,纯粹是出于兴趣。主要的分析对象是棋谱文件(JQL)和复盘文件(JQS),前者是用来保存军旗布局的文件,后者是记录一局游戏的文件。

分以下几部分来介绍:
(1)JQL文件的存储结构
(2)棋盘的存储结构
(3)JQS文件的存储结构
(4)指令详解(重点)

一、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)控制指令详解

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章