dll注入

注入工具

dllinject

注入流程

  1. 编写可注入动态库dll
__declspec(dllexport)
int go()
{
    //需要注入的程序代码
}
  1. 打开dllinject,选择需要注入的宿主程序,选择注入的dll,选择要执行的函数。

例子:植物大战僵尸修改阳光值

准备软件

  • 植物大战僵尸
  • dllinject
  • Cheat Engine

注入流程(以修改植物大战僵尸阳关值为例)

  1. 打开植物大战僵尸游戏
  2. 打开Cheat Engine软件,选择植物大战僵尸进程
    dll注入1
  3. 搜索内存中的值,这个值和阳光中的值相对应,点击首次扫描
    dll注入2
  4. 进入游戏,当阳关值改变的时候,再次扫描,点击Next Scan
    dll注入3
  5. 当再次扫描时候,出现唯一的数值,也就是唯一的内存地址,这个内存地址就是存储阳光值的内存地址
    dll注入4
  6. 编写注入程序(此处我将阳光值改为9000),生成dll动态库
__declspec(dllexport)
void go()
{
	//需要注入的程序代码
	int *p = (int *)0x2AED1BF0;
	*p = 9000;
}
  1. 打开dllinject,选择植物大战僵尸,找到生成的dll动态库,点击注入
    dll注入5
  2. 然后就可看到阳光值变为9000,注入成功
    dll注入6

从这个例子得出的启示

任何程序的要运行,都存在变量,而这个变量可以通过C语言去修改。

基本上的外挂都是C语言修的,其原理与上述例子相同。这个例子只是临时性的修改变量的值。长久的做法是利用反编译,找到此处的赋值语句,然后在汇编中修改。也就是破解中常说的内存定位,关于破解的知识,有时间的话再做整理。

变量都是存储在内存区域的,如果想要修改某个变量的值,那么修改其所在位置的值便可。这是C语言的精华所在,可以肆无忌惮的修改内存的值。这也是其他语言办不到的。从此就引出了一个C语言的强大之处:指针。

原文地址:https://www.cnblogs.com/cj5785/p/10664815.html