代码注入心得

本文详细介绍了一种函数代码注入方法,包括使用WriteProcessMemory将函数参数和代码写入目标进程,以及利用CreateRemoteThread创建远程线程来调用这些函数。文章还提供了具体的代码示例,演示如何传递函数地址和参数。

完整的注入方法,请参考:http://www.cppblog.com/besterChen/archive/2009/02/15/73831.html

我的心得:

函数代码注入方法关键步骤:

一、WriteProcessMemeory将函数参数写入目标进程

二、WriteProcessMemeory将函数代码写入目标进程

三、CreateRemoteThread创建远程线程,在目标进程中调用寒素

下面是要注意的地方:

如果要注入一段函数代码,如

void func()

{

MessageBox(); //(1)
}

那么MessageBox必须要通过取得地址传给函数,及(1)位置应该是个确定的函数地址值,

如果函数有参数,必须同样的传入的是地址,如MessageBox要有参数字符串,func中不能出现字符串,即不能再func中有这样的句子:MessageBox(“错误的方法”)。

--------------------------------------------------------------------

传递参数和函数地址的方法:

struct param

{

DWORD addr; //在func中要调用的函数地址

char szText[MAX_PATH];   //在func中要调用的函数的参数
}

填充参数

param pa;

pa.addr = (DWORD)GetProcAddress(hUser32, "MessageBoxA");
strcat(pa.szText[, "Hello\0");

pa即是一步骤中的参数

函数实现方法:

void func(param* pa)

{

typedef int (WINAPI *MESSAGEBOXA) (DWORD, LPCSTR, LPCSTR, UINT);

MESSAGEBOXA MessageBoxA;
MessageBoxA = (MESSAGEBOXA)pa->addr;

addr(NULL, pa->szText, NULL, NULL);
}

最后,

CreateRemoteProcess(hProcess, NULL, 0, func_addr, pa_addr, 0, NULL);

//hProcess是目标进程句柄,func_addr是二步中返回的地址,pa_addr是一步中返回的地址



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值