180918(代码注入)

代码注入(Code Injection)

一、代码注入

代码注入是一种向目标进程插入独立运行代码并使之运行的技术。一般调用CreateRemoteThread()API以远程线程形式运行插入的代码,所以也被称为线程注入。
这个API在DLL注入的时候曾经用来调用自己写的DLL,它的函数原型如下
HANDLE WINAPI CreateRemoteThread(
in HANDLE hProcess, in LPSECURITY_ATTRIBUTES lpThreadAttributes,
in SIZE_T dwStackSize, in LPTHREAD_START_ROUTINE lpStartAddress,
in LPVOID lpParameter, in DWORD dwCreationFlags,
__out LPDWORD lpThreadId
);
Dll注入处就曾说ThreadProc()和LoadLibrary()都有一个4字节的参数,并返回一个4字节的值。通过CreateRemoteThread()驱使目标进程调用LoadLibrary()函数可以加载指定的DLL文件
代码注入相比DLL注入要更方便,考虑的事情更少,而且几乎不会留下任何痕迹。

二、练习

XySher
跟着书上做的实验notepad的pid是C4
XySher
又一个没跑成的实验==行吧 跟着源码走一遍
XySher
main()函数调用了传入dwPID的InjectCode函数。
XySher
直接注入ThreadProc()进程会导致代码引用地址的内容并不存在于目标进程而出现错误。所以必须同时注入相关字符串以及API地址。(所以本程序中用了THREAD_PARAM结构体接收数据)
在InjectCode()函数中,设置好THREAD_PARAM结构体,然后调用api为data与code分配内存,并将它们注入目标进程,最后调用CreateRemoteThread()API,执行远程线程。

三、代码注入调试练习

XySher
Debugging option是这里的
勾选过后打开
代码注入还是失败,跟着书上找。