代码注入心得

来源:互联网 发布:软件开发项目进度表 编辑:程序博客网 时间:2024/04/30 15:53

完整的注入方法,请参考: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是一步中返回的地址



原创粉丝点击