最近在学习Windows API,觉得其中的一些函数比较有意思,就把它记录下来了。
DLL注入指的是向运行中的其他进程强制插入特定的DLL文件,从而使之运行特定代码。
DLL注入基本过程:运行程序使其他进程调用LoadLibrary()API,调用用户指定的DLL文件,从而在LoadLibrary()完成后,调用DLL文件中的DllMain()函数。
(DLL注入是使远程进程调用LoadLibrary(),而非自身进程,编写DLL注入程序的时候需要注意这一点)
(DLL加载到进程后会自动运行DllMain()函数,用户可以把想要执行的代码放到DllMain()函数里,每当该DLL被加载时,添加的代码就会被执行。利用该过程可以修复程序bug,编写恶意DLL等)
DllMain()函数示例
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpvRevered) {
switch( dwReason ) {
case DLL_PROCESS_ATTACH:
// 被进程加载时运行的代码
break;
case DLL_PROCESS_DETACH:
// 被进程卸载时运行的代码
break;
case DLL_THREAD_ATTACH:
// 被线程加载时运行的代码
break;
case DLL_THREAD_DETACH:
// 被线程卸载时运行的代码
break;
}
return TRUE;
}
被注入的DLL拥有目标进程内存的访问权限,所以我们可以通过该技术向目标程序增加或修改某些功能。
向某个进程注入DLL时