QQ新中国象棋棋盘基址--寻找过程

一、分析

分析棋盘结构,猜测棋盘的数据是一个二维数组,棋盘是一个9*10或者是一个10*9的数组,先朝这个方向去尝试分析

 

程序内部可能是定义了一个这样的二位数组char[10][9]或者char[9][10]

也可能是int[10][9]或者int[9][10],还有可能是一个结构体的数组,腾迅开发人员具体用什么类型我们无从得知只能通过不断去尝试,试错来分析。

 

char   chessArray[10][9];

int    chessArray[10][9]

Chess  chessArray[10][9]    

 

继续猜测分析:二维数组的每个元素是描述一个棋子的,是什么颜色什么棋,总共有32个棋子,猜测描述这些的棋子的属性用255种足可以描述完毕。

例如:红车是1,红马是2,红象是3等。

`

 

二、试错

通过CheatEngine工具,可以扫描进程的内存数据,不断调整棋子的位置,找到棋盘的大概位置

加载QQ象棋进程:如下图所示。

 

QQ新中国象棋棋盘基址--寻找过程

新扫描类型选择“值介于...两者之间”,数值为0到255之间,数值类型先选择4字节,点击首次扫描。

QQ新中国象棋棋盘基址--寻找过程

 

初次扫描,满足条件的内存有500多万条,如下图

QQ新中国象棋棋盘基址--寻找过程

修改扫描类型:为变动的数值,我们尝试来回重复移动一个棋子,每次搜索都搜索变动的数值,这样就可以迅速过滤掉大量的数据。

 

本例中是尝试车1进1,搜索一次,

QQ新中国象棋棋盘基址--寻找过程

                                                                          

车一退一搜索一次。

QQ新中国象棋棋盘基址--寻找过程

 

多次之后最后过滤到少量内存如下图

QQ新中国象棋棋盘基址--寻找过程

这三个地址相隔比较近,可以打开一起查看,

选择其中一个绿色地址打开继续分析,如下图:

QQ新中国象棋棋盘基址--寻找过程

将界面最大化后,每当我们移动棋子时,我们可以观察到,界面上面有颜色闪动变化,如下图所示,我们可以推断这些变化就是棋子的变化

QQ新中国象棋棋盘基址--寻找过程

 

不断地移动棋子,可以推算出每个棋子的值,而且可以算出棋盘的数组范围

QQ新中国象棋棋盘基址--寻找过程