你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:文章管理 / 本期精品文章
使用DLL远程注入对记事本换肤
 

摘 要 详细阐述了如何使用DLL远程注入技术对Windows 记事本进行换肤,讲解了DLL远程注入的概念和步骤。

关键词 DLL远程注入,换肤

 

一、概述
1. DLL远程注入原理
DLL远程注入就是使用远程线程来插入DLL,就是要求目标进程中的线程调用LoadLibrary函数来加载必要的DLL。由于除了自己进程中的线程外,无法方便地控制其他进程中的线程,因此这种解决方案要求在目标进程中创建一个新线程。由于是自己创建这个线程,因此能够控制它执行什么样的代码。
Windows提供了一个称为CreaeRemoteThread的函数,使我们能够非常容易地在另一个进程中创建线程:
HANDLE CreateRemoteThread(HANDLE hProcess,PSECURITY_ARRTRIBUTES psa,DWORD dwStackSize,
PTHREAD_START_ROUTINE pfnStartAddr,PVOID pvParam,DWORD fdwCreate,PDOWRD pdwThreadId);
如何才能让该线程加载我们的DLL呢?那就需要该线程调用LoadLibrary函数:
HINSTANCE LoadLibraryA (LPCSTR pszLibFileName);?????????????????? //ANSI 版本
HINSTANCE LoadLibraryW (LPCWSTR pszLibFileName);???????????? //Unicode版本
现在要做的事情是创建一个新线程,并使线程函数的地址成为LoadLibraryA或LoadLibraryW函数的地址。
PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)
GetProcAddress(GetModuleHandle(TEXT(“kernel32”)),”LoadLibraryA”);
HANDLE hThread = CreateRemoteThread(hProcessRemote,NULL,0,pfnThreadRtn,”C:\\MyLib.dll”,0,NULL);
细心的读者应该注意到一个问题:就是字符串“C:\\MyLib.dll”是在调用进程的地址空间中,会导致远程进程的线程可能引发访问违规。所以必须将DLL的路径名字符串放入远程进程的地址空间中。

// 向目标进程地址空间写入DLL名称
DWORD dwSize, dwWritten;
dwSize = lstrlenA( lpszDll ) + 1;
LPVOID lpBuf = VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE );
WriteProcessMemory( hProcess, lpBuf, (LPVOID)lpszDll, dwSize, &dwWritten );

Skin++ For VS.Net完整测试程序请到Skin++ 主页上去下载:www.uipower.com

  推荐精品文章

·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 
·2023年7月目录
·2023年6月目录 
·2023年5月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089