上一遍介绍了DLL远程注入的基本原理,在这篇文章中,就来看看另一个DLL注入的方法,注册表DLL注入。
其实注册表注入相对远程DLL注入来说更简单、更方便一点,只需在注册表中修改AppInit_DLLs和LoadAppInit_DLLs的键值即可。
(User32.dll被加载到进程时,会获取AppInit_DLLs注册表项,若有值,则调用LoadLibrary() API加载用户DLL。所有,DLL注册表注入,并不会影响所有进程,只会影响加载了user32.dll的进程)
(下面示例过程在windows 32位下测试成功)
下面给出测试的DLL文件源码
MessageBox.cpp
// MessageBox.cpp
#include <windows.h>
#include <tchar.h>
#define DEF_PROCESS_NAME "cmd.exe" // 目标进程 cmd.exe
BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD dwReason, LPVOID lpvRevered) {
char szPath[MAX_PATH] = {0, };
char *p = NULL;
GetModuleFileNameA(NULL, szPath, MAX_PATH);
p = strrchr(szPath, '\\');
switch( dwReason ) {
case DLL_PROCESS_ATTACH:
if( !_stricmp(p + 1, DEF_PROCESS_NAME) )
MessageBox(NULL, TEXT("Hello cmd!!!&#