"扫雷外挂" 原理篇

0.扫雷效果图




1.我理解的外挂


其实我没有做过外挂,前阵子在玩"炉石传说",这游戏免费,每赢3局可以得到10金币,想做个外挂来挂着玩,无奈水平有限,只能从"扫雷外挂"做起了, =。=

外挂其实是不限语言的,当然用强大的C,C++比较好,图像分析有很多开源库,比如强大的OpenCV。C++又很容易调用Windows API,或者调用MFC封装过的函数。

外挂大致分两种:

  • 1.先截图或者进行简单像素分析,得到游戏状态,然后通过程序模拟鼠标,键盘或者触摸操作。PC平台比较有名的是"按键精灵",它已经封装了大量的外挂基础操作,使用者只需要编写简单脚本就能做一个外挂了。当然你自己也可以用MFC简单做一个外挂,底层的模拟外设操作都是通过Windows API。

有人会说这种不是"外挂",其实这种外挂偏向于"AI",它其实通过像素分析,想要模拟真实玩家眼睛看到的东西,然后进行程序分析。这样的外挂作者需要较高的数据结构和算法水平,完全理解游戏的逻辑和规则。

这种外挂的特点

优势:1.不容易被封!2.通用性强

劣势:1.比较怕验证码,2.可能需要大量时间,比如挂机打怪。


  • 2.修改内存,或者伪造数据。这种外挂就立竿见影了,一些单机游戏可以通过次方法,修改大量金币和人物等级。一些网络游戏也可以被客户端发送的假数据欺骗,但现在越来越成熟,基本很难了。

优势:1.立竿见影(会失去游戏可玩行)

扫描二维码关注公众号,回复: 768537 查看本文章

劣势:1.网络游戏难度较高,2.对汇编有点要求


2.分析扫雷图像


因为XP版的扫雷做的比较简单,每个数字都是用一种颜色来表示,而且扫雷程序的每个格子大小是一样的,所以我们可以轻易的得到每个格子上面的数字是多少。

可以先截图,通过PS等工具进行取色,我们最终得出下面的情况:

前面的表示RGB颜色。

{0,0,255}         1(扫雷中数字1的颜色)

{0,128,0}         2

{255,0,0}         3

{0,0,128}         4

{128,0,0}         5

{0,128,128}     6

{0,0,0}             7

{128,128,128} 8

当然我们这里取一个颜色还不够,因为有几种情况是一样的,所以在程序中每次取了一个格子的3个像素点来完全确定下来该格子是什么属性。总的格子属性比较多,1~8数字,未知,空白,插红旗,?,雷。


3.模拟鼠标操作


这里先略过,下篇程序篇再讲,非常简单。


4.分析扫雷游戏


 进入我们今天的正题了,我们打算通过像素分析,然后通过程序模拟鼠标点击来完成游戏。因为通过内存分析的,没什么意思。


4.1扫雷中最基础的两种情况





先来看下扫雷中最基础的两种模式。大部分情况可以通过这两种来完成扫雷游戏。

1.首先分析红框框的1,表示它周围只有一个雷,因为只有a这个格子是未知的,所以a就是雷

2.因为a是雷,又因为a的左边是1,所以b肯定不是雷。

当然我们可以知道,因为a是雷,而且绿框框的是1,所以绿框框的左边都不是雷,3个m都不是雷。


我们要推广出规则:

1.首先我们要得到当前格子周围总的未知格子数

2.然后还要计算出一个格子周围还剩下多少雷。(注意不是总共多少雷,有时候这个格子的周围某些雷会被确定下来)

   2.1如果"总的未知格子数" 跟 "剩下雷数"一样的话,我们就得出所有的未知格子都是雷

     2.2如果剩下雷数是0的话,表示我们已经发现了所有的雷,那么所有的未知格子都不是雷


再用数学模型解释下:

一个格子是雷我们表示1,不是雷表示0。

假设有3个未知格子,它们用x1,x2,x3来表示,剩下雷数假设是3.

那么 x1 + x2 + x3 = 3  因为所有的格子只有两种情况,是雷,和不是雷。所以x1, x2, x3 都是1是这个方程的解,即都是雷。  

或者 x1 + x2 + x3 = 0,所以x1, x2, x3 都是0是这个方程的解,即都不是雷。


4.2扫雷中较难的情况



这种较难情况下得出结果需要通过组合相减分析。

1.先分析左上角的红框框,我们得出a和b中肯定有个是雷,又因为分析蓝框框,所以c肯定不是雷。


用数学模型来表示就是:

a + b = 1

a + b + c = 1

所以c = 0,即c肯定不是雷。

因为分析两个单独子项我们知道都是有多个解的,但是通过两个子项相减,就可以确定一个解了。

类似的:假设

a + b = 1

a + b + c = 2

所以c = 1,即c肯定是雷。

再或者:

a + b = 1

a + b + c + d = 2

c + d + e = 1

通过前面两个子项分析我们得出c + d = 1,再跟第3项相减,我们就得出了 e = 0,即e肯定不是雷。


5.XP扫雷 + 外挂 exe程序下载


http://www.waitingfy.com/?attachment_id=1066

需要自己先点几个,因为程序是跟人类一样的判断。


下篇 "扫雷外挂" 之C++ 程序篇,有源码下载。


参考:

扫雷外挂

http://www.cnblogs.com/xiangism/archive/2012/10/27/2665130.html

http://download.csdn.net/detail/cox0902/267041


如果你觉得还不错,请顶下我的文章,谢谢!

猜你喜欢

转载自blog.csdn.net/fox64194167/article/details/22977087