代码注入
代码注入的核心就是注入可以独立运行的代码
什么叫可独立运行的代码?
就是代码与数据同时注入,且代码中并没有直接使用API,也不直接使用字符串,
而是以引用的方式使用API和字符串(意思就是说间接的先使用一个地址,然后这个地址里面放着数据),而不是直接硬编码数据(直接硬编码会造成在当前进程有效,但是换一个进程,数据地址就变了,那么直接硬编码就出引用错误的地址)
这样才能保证代码可以独立运行(也就是说这个代码放到任意一个进程中都可以运行)
DLL注入为什么可以直接调用API和数据?
因为DLL注入是将所用的代码与数据全部放在一个DLL文件中,代码与数据是共存的。
而代码注入是将代码与数据分开注入的
实例:
//code_inject.exe
#include "windows.h"
#include "stdio.h"
typedef struct _THREAD_PARAM
{
FARPROC pFunc[2];
char szBuf[4][128];
}THREAD_PARAM, *PTHREAD_PARAM;
typedef HMODULE(WINAPI* PLOADLIBRARYA)
(
LPCSTR lpLibFileName
);
typedef FARPROC(WINAPI* PGETPROCADDRESS)
(
HMODULE hMod,
LPCSTR lpProcName
);
typedef int (WINAPI* PMESSAGEBOXA)
(
HWND hWnd,
LPCSTR lpText,
LPCSTR lpCaption,
UINT uType
);
DWORD WINAPI ThreadProc(LPVOID lParam)
{
HMODULE hMod = NULL;
PTHREAD_PARAM pParam = (PTHREAD_PARAM)lParam;
FARPROC pFunc