一丶前言
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 代码 + 成品)