通过游戏外挂.学习逆向技术指超级马里奥.
2019-08-06

 

        通过游戏外挂.学习逆向技术指超级马里奥.

一丶前言

1.什么是逆向.

  逆向就是在没有源代码的情况下.通过汇编.反汇编来逆向一个成品的Exe(也可以是别的.举例是EXE)这样叫做逆向.

2.逆向的用途

   逆向技术可以用于 反病毒.反外挂. 破解. ...... 等等.当然反病毒反外挂的前提就是你要对外挂或者病毒写法了解. 才可以进行.所以逆向的高度取决于开发的水平.

3.这篇博客的作用.

  这篇博客不是教授外挂的.而是以外挂为切入点.讲解逆向技术.并了解逆向技术可以做什么.

二丶超级马里奥

想必超级玛丽大家都玩过.

那么我们可以对它做点什么.

1.血值.可以修改为无限血量

2.子弹个数.可以修改无限子弹.

3.生命个数.可以修改为无限生命

4.子弹状态. 使马里奥可以发送普通子弹. 登山镐子弹. 以及忍者飞镖子弹. CTRL+Z键还可以开启大招.

三丶逆向工具准备

我们要做外挂的前提需要有逆向工具.

Cheat_Engine 简称CE 一款可以搜索内存的工具. 也可以看反汇编.

那么我们可以用CE做切入点.

1.使用CE 附加超级马里奥进程.

2.搜索子弹个数. 依次减少.然后继续搜索.这样可以搜索到子弹的个数的基址.

3.基址就是保存信息的一个全局变量地址.就是不会变动的地址.这样超级马里奥重新启动也会是这个地址.

1.搜索子弹个数

2.子弹个数更改.点击再次扫描.

当我们再次扫描之后会发现还有两个地址.根据经验.绿色的是基地址.

当然我们可以关掉游戏.重新启动.然后看看地址还是不是这个.如果是这个.(0x00428292) 那么这个地址就是个静态地址.我们可以认为这个地址是不变的了.

3.下拉到下面.CTRL +B 键观察附近内存. 然后CTRL + 2 以字节的10进制显示.

观察附近内存. 可以看到92上面的82地址是个6. 而看我们当前的血值也是6 可以猜想这个变量存放的是血值.

我们可以减血看一下.

我们可以修改一下血值.看看是否是.

修改之后发现是.所以82就是血的基址.  然后通过我们马里奥不断的进行不同的操作.

可以看出这块内存会更改.

当然这个操作需要手动去做.步骤我就不做了.

所以我们可以得出.

0x00428282  =  血的基址

0x00428292 =   子弹个数基址.

0x004282A2 =   生命个数的基址.

 

 

四丶编程实现外挂编写.

C++  : 如果是C++ 我们需要熟悉几个API.  OpenProcess 打开进程句柄.        ReadProcessMemory(); 写内存.  WriteProcessMemory() 读内存.

易语言: 易语言可以使用模块. 我用的是超级模块.

要熟悉的易语言命令.

1.取进程ID(进程名)  返回进程ID  (跟OpenProcess 一样.只不过是封装的一个)

2.十六到十             在易语言当中.我们操作的地址需要转化成10进制.可以用这个命令.

3.写内存整数型     跟WriteProcessMemory一样的. 只不过封装了一下. 

具体代码可以在博客中下载. 一个是 VS2015 版本MFC的.  一个是易语言编写的. 附加模块.

成品图演示

MFC

易语言:

 

资料下载: 链接:https://pan.baidu.com/s/1AaRAuw7uUcxhxCL_nCrYMQ 密码:i2xt  (超级马里奥 + CE 工具 + 易语言.e代码文件 + 成品 + MFC 代码 + 成品)