注入工具
dllinject
注入流程
- 编写可注入动态库dll
__declspec(dllexport)
int go()
{
//需要注入的程序代码
}
- 打开dllinject,选择需要注入的宿主程序,选择注入的dll,选择要执行的函数。
例子:植物大战僵尸修改阳光值
准备软件
- 植物大战僵尸
- dllinject
- Cheat Engine
注入流程(以修改植物大战僵尸阳关值为例)
- 打开植物大战僵尸游戏
- 打开Cheat Engine软件,选择植物大战僵尸进程
- 搜索内存中的值,这个值和阳光中的值相对应,点击首次扫描
- 进入游戏,当阳关值改变的时候,再次扫描,点击Next Scan
- 当再次扫描时候,出现唯一的数值,也就是唯一的内存地址,这个内存地址就是存储阳光值的内存地址
- 编写注入程序(此处我将阳光值改为9000),生成dll动态库
__declspec(dllexport)
void go()
{
//需要注入的程序代码
int *p = (int *)0x2AED1BF0;
*p = 9000;
}
- 打开dllinject,选择植物大战僵尸,找到生成的dll动态库,点击注入
- 然后就可看到阳光值变为9000,注入成功
从这个例子得出的启示
任何程序的要运行,都存在变量,而这个变量可以通过C语言去修改。
基本上的外挂都是C语言修的,其原理与上述例子相同。这个例子只是临时性的修改变量的值。长久的做法是利用反编译,找到此处的赋值语句,然后在汇编中修改。也就是破解中常说的内存定位,关于破解的知识,有时间的话再做整理。
变量都是存储在内存区域的,如果想要修改某个变量的值,那么修改其所在位置的值便可。这是C语言的精华所在,可以肆无忌惮的修改内存的值。这也是其他语言办不到的。从此就引出了一个C语言的强大之处:指针。