今天发现,四国的版本更新为18了.对应棋子内存起始值变为0x4979fc.全地址为:

//C#代码
private static readonly IntPtr baseAddresss = (IntPtr)(0x4979fc);

int address = baseAddresss.ToInt32();

for (int i = 0; i < 17; i++) {

for (int j = 0; j < 17; j++) {

land[i, j] = address;

address += 12;

Console.Write(land[i, j].ToString("x"));

Console.Write("\t");

}

Console.WriteLine();

}

是一个17×17的数组,元素长度12,前4字节为棋子,中间4个字节是棋子的颜色。有朋友问,确定在客户端验证?要是客户端验证就是开发作弊器而不是记牌器了。

接着前文讲,还在找CALL(前文的地址已经不适用,但是特征码还是可以使用的。)

上文说到,在MOV EAX,DWORD PTR DS:[EBX+110]和MOV EAX,DWORD PTR DS:[4976F4(更新为496754)]之间,应该有重要的数据分析段。那么整段代码就是:

0041155F    8B83 10010000   MOV EAX,DWORD PTR DS:[EBX+110]
00411565    85C0            TEST EAX,EAX

00411567    0F84 CA010000   JE JunQiRpg.00411737

0041156D    8B0D D89A4900   MOV ECX,DWORD PTR DS:[499AD8]

00411573    85C9            TEST ECX,ECX

00411575    75 06           JNZ SHORT JunQiRpg.0041157D

00411577    894C24 14       MOV DWORD PTR SS:[ESP+14],ECX

0041157B    EB 0E           JMP SHORT JunQiRpg.0041158B

0041157D    A1 DC9A4900     MOV EAX,DWORD PTR DS:[499ADC]

00411582    2BC1            SUB EAX,ECX

00411584    C1F8 02         SAR EAX,2

00411587    894424 14       MOV DWORD PTR SS:[ESP+14],EAX

0041158B    A1 54674900     MOV EAX,DWORD PTR DS:[496754]

但是进行详细跟踪以后,无法找到内存坐标(比如棋子从498638 走到 49856C这样的数据。)而里面也有有用的数据。关键是下面几句

0041156D    8B0D D89A4900   MOV ECX,DWORD PTR DS:[499AD8]

0041157D    A1 DC9A4900     MOV EAX,DWORD PTR DS:[499ADC]

00411582    2BC1            SUB EAX,ECX

00411584    C1F8 02         SAR EAX,2

发现了什么?499AD8内的值,始终不变(一个生命周期内),而499ADC内的值是其增量,可以理解为一个步进,步进大小是4字节。走一步,那就是增加8,走两步就是增加12.为什么?这个值应该是描绘其完整路径的,比如,从498638 走到 49856C,就走了一步,但是它要表示其原先的位置和现在的位置,虽然是一步,但是值明显是2.

拿到这个也没有用,但是对0041158B    A1 54674900     MOV EAX,DWORD PTR DS:[496754]下面的代码认真分析以后,也无法找到地址。这就说明一个问题,起始和结束标记不是用内存地址标记的。如果是用内存地址标记,在走路时候下断,在内存中必然有起始和结束地址。

换个思路,注意到文章开头讲的17维数组没?那么起始和结束也完全可能是用数组索引来实现。找一个索引为[6,15]的棋子,走到[6,14],断点后在数据段搜索 06 15或者15 06(字节高低位可能会倒过来,这是堆栈的一个特性。)没有!!!没有搜索到,贫道郁闷了....

再思考了一下整个步骤,发现漏了一个问题,搜索的时候需要搜索16进制,也就是说,需要搜索06 0F或者0F 06,一搜索,果然存在这个值的地址。通过这样的分析,发现,走路时,起始索引在00499ac6中(16字节),结束索引在00499ac8(16字节)。就在499AD8步进地址的上面,相差1行,却要分析好长时间啊。起始和结束的C++代码大体是:
typedef struct {

byte x,

byte y
} Node;

Node from;
Node to;

那么,如果需要这两个数据的话,就有两种处理方式了,就是第一篇文章讲到的,动态内存扫描或者是HOOK API.扫描的方式容易实现,但是出错的概率也高,要想不出错,最好是一直扫描,这样精度就高,但是也可能会出现数据不同步的问题,和数据库脏数据的原理一样。而 HOOK API技术难一点,程序稳定性会更好。

qq四国军旗2.1 beat03 builde018记牌器开发思路(三)相关推荐

  1. qq四国军旗2.1 beat03 builde017记牌器开发思路(一)

    一.棋盘结构分析 首先,根据存档文件找到棋子 军旗:0x00000002 地雷:0x00000003 炸弹:0x00000004 司令:0x00000005 军长:0x00000006 师长:0x00 ...

  2. JJ斗地主记牌器java开发_【欢乐斗地主记牌器制作】遇到两个问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本菜笔准备用swing做个记牌器,但是遇到俩问题,求助大神. 先抛出最简单的问题:点击button1文本框textfield1中数字会减一,但是我怎么实现 ...

  3. 基于opencv2的斗地主记牌器(python)

    一.开发该系统软件环境及使用的技术说明 开发环境:JetBrains PyCharm Community Edition 2019.2.5 x64 远端仓库:GitHub 语言版本:python3.7 ...

  4. python 实现记牌器原理

    python 实现记牌器原理 方案一(减牌记牌) 方案二(增牌记牌) 字典Update更新初学者常见报错问题 方案一(减牌记牌) 假设与这"333445667788QQJ"十五张牌 ...

  5. 【弹子兵法】四国军棋棋盘、棋子与记谱【基础篇】

    http://hi.baidu.com/%B5%AF%D7%D3%B1%F8%B7%A8/blog/item/80fdea96fbadfd55d0135eb9.html 第二课      四国军棋棋盘 ...

  6. 四国军旗人工智能探析提纲20070301

    四国军旗人工智能探析提纲 2007.03.01 小面胡子   一.         一般棋类游戏的构成 a)         棋盘 b)        棋子 c)        规则定义 i.     ...

  7. 【181012】VC++ 四国军旗网络游戏源代码

    VC++ 四国军旗网络游戏+毕业论文,实现了一个具有小型网络游戏特征的四国军旗游戏,有一个完整的框架,数据库.服务器.客户端.大厅.游戏框架.玩家信息.游戏中的聊天.广告信息.以及防止了闪烁的画面,游 ...

  8. 四国军旗辅助记忆小工具

    最近迷上四国军旗,四国军旗需要记忆另外三方的棋子,虽然军旗软件本身可以做标记,但是,记忆空间有限,不方便,专门用c#开发了一个小工具,辅助记忆,比较简陋,共享给有需要的朋友. 链接:https://p ...

  9. 使用双标记写html代码时如何进行嵌套,【2020Python修炼记】前端开发之 前端基础和HTML入门...

    发表于:2020-11-12 18:21 阅读: 119次 这篇教程主要讲解了[2020Python修炼记]前端开发之 前端基础和HTML入门,并附有相关的代码样列,我觉得非常有帮助,现在分享出来大家 ...

最新文章

  1. 使用Hyperledger Ursa简化区块链安全性
  2. Java的异常:Error与Exception
  3. BGP、MPLS是怎么组合到一起的?
  4. Python 切片的简单讲解
  5. python好多模块和c相识_Python-Cext名称空间与常规Python子模块混合?
  6. Client Copy后的号码段重复
  7. 【转载】315M无线模块数据传输——深入研究
  8. 深入浅出FlatBuffers原理
  9. 「leetcode」39. 组合总和【回溯算法】详解!
  10. php本科毕设,基于php的新闻发布系统1本科毕设论文
  11. 地磅15针到9针数据线连接串口数据采集方法
  12. vue中使用leaflet加载地图影像并拾取坐标点
  13. python的struck.pack的用法:浮点转字节
  14. 各大硬核应用渠道开放平台SDK文档地址
  15. android网络诊断服务(ping网络的实现,判断网络是否可用)
  16. mysql中如何去除重复数据_mysql数据库如何去除重复数据
  17. 电脑固态硬盘接口分类
  18. Shortcuts快速入门
  19. Codeforces Beta Round #57 (Div. 2)E---Enemy is weak(树状数组+离散化)
  20. 决策树之CART 算法(回归树,分类树)

热门文章

  1. LeetCode每日一题——Day17
  2. PETS渗透测试标准总结
  3. 从Firefox升级说学习方法
  4. 厦门这个隐藏的高逼格智慧园区终于被扒出来了
  5. 人民日报:让中国大数据跑起来!
  6. 220多款H5的手机端小游戏源码下载 - html+javascript 开发网页小游戏开源源码大合集
  7. 如何用Visual C#来创建、修改注册信息
  8. vim的ex模式用法
  9. 推荐一个文本编辑器-PilotEdit
  10. 股票在不同阶段有哪些卖出技巧?