9-纯C++构建CALL代码

纯C++构建CALL代码

思路:

原有汇编的本质是一个成员函数的调用,如果能够完全使用C++模仿这个成员函数的调用,则无需使用汇编指令来写

方法1:假设一个类,并且创建一个这种类的指针,将其地址设为thiscall的this地址,将其call的函数的实际内容设为目标程序里的函数地址,最后使用thiscall模仿,得到自动编译好的汇编代码并自动植入

方法2:修改类的虚函数表,将虚函数指向改为目标程序里的函数地址,再修改当前类对象指针的指向为目标函数里的类地址,最后使用thiscall编译出同样的汇编代码。

1.创建一个类

class Role
{
}

2.创建一个指向这个类的成员函数指针

typedef void (Role::* BeActer)(int damage,int num);
//BeActer变量即为这种函数指针

3.定义一个函数指针变量,并将实际执行的函数地址赋给它

注意:以下代码都被放在函数内部,等待被编译后根据函数指针将编译后的指令传入目标进程

BeActer bA = NULL;	//定义并初始化为NULL
int *nWrite = (int*)&bA; //使用一个中间int*变量绕过编译器不允许的强转
nWrite[0] = dcall; //将实际的函数的地址使用指针指向
Role* role = (Role*)4CEF08; //假装这个类的this地址为4CEF08
(role->*bA)(damage,index); //模仿类thiscall代码