C++劫持注入(适用于大部分dll)

导出函数使用depends查看


新建win32 dll 带导出符号
1.用depends查看原dll中所有的调用函数


#pragma comment(linker,"/EXPORT:导出函数名=自写函数名,@导出序号")


2.获取原函数的地址
DWORD oldCall[x];//原dll中调用了多少函数定义多少 +1
void initCall(void){
HMODULE hdll  = LoadLibraryA("d3d8thk");//加载原dll获取句柄
for(int i = 1;i<x;i++){
//FARPROC GetProcAddress(HMODULE hModule, // DLL模块句柄 LPCSTR lpProcName // 函数名或函数编号);
//如果函数调用成功,返回值是DLL中的输出函数地址。如果函数调用失败,返回值是NULL。
oldCall[i] = (DWORD)GetProcAdress(hdll,(char*)i//通过序号获取方法名);
}
}


3.定义所有函数及原函数
#pragma comment(linker,"/EXPORT:导出函数名=自写函数名,@导出序号")
实例:
#pragma comment(linker,"/EXPORT:Direct3DShaderValidatorCreate9=_fun1,@1")

DWORD dwRet[x];
//方法目的:找到原有的函数入口开始执行  然后跳转到函数返回地址执行下一句代码
 C语言语法 纯汇编 所有参数从右到左依次入栈
extern "C" __declspec(naked) void __cdecl fun1(void){
__asm{
//保存返回地址
//pop DWORD ptr ds:[dwRet]
pop dwRet[4*1];


//调用原函数
//call DWORD ptr ds : [dwoldCall]
call dwoldCall[4*1]


//跳转到原函数的返回地址
//jmp DWORD ptr ds : [dwRet]
jmp dwRet[4*1]
}
//跳转到原有函数执行  并返回结果
}

4.程序被加载时执行
dllmain中找到DLL_PROCESS_ATTACH
添加代码(自己需要添加的内容);
break;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值