Ring3下注入Dll模块之远线程

作者: admin 日期: 2015-06-07 10:09:28 人气: - 评论: 0

windows提供了一个机制使得你可以在另外一个进程的地址空间内启动线程,简称远线程,如果在另外一个进程的地址空间内启动远线程,并让这个线程调用Loadlibrary自然就可以注入我们想要的模块了。

XP以下使用代码:


复制代码
BOOL WINAPI RemoteLoadLibrary(LPCTSTR pszDllName, DWORD dwProcessId)
{
//打开目标进程
HANDLE hProcess = ::OpenProcess(
PROCESS_VM_WRITE|PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION, FALSE, dwProcessId);
if(hProcess == NULL)
returnFALSE;


//在目标进程申请空间,存放字符串pszDllName,作为远程线程的参数
intcbSize = (::lstrlen(pszDllName) +1);
LPVOID lpRemoteDllName = ::VirtualAllocEx(hProcess, NULL, cbSize, MEM_COMMIT, PAGE_READWRITE);
::WriteProcessMemory(hProcess, lpRemoteDllName, pszDllName, cbSize, NULL);

//取得LoadLibraryA函数的地址,我们将以它作为远程线程函数启动
HMODULE hModule=::GetModuleHandle (_T("kernel32.dll"));
LPTHREAD_START_ROUTINE pfnStartRoutine =
(LPTHREAD_START_ROUTINE)::GetProcAddress(hModule,"LoadLibraryA");


//启动远程线程
HANDLE hRemoteThread = ::CreateRemoteThread(hProcess, NULL,0, pfnStartRoutine, lpRemoteDllName,0, NULL);
if(hRemoteThread == NULL)
{
::CloseHandle(hProcess);
returnFALSE;


}

::CloseHandle(hRemoteThread);
::CloseHandle(hProcess);

returnTRUE;
}
复制代码

这段代码在vista,win7下不能成功,需要改进。

相关内容

发表评论
更多 网友评论0 条评论)
暂无评论

Copyright © 2012-2014 我的代码板 Inc. 保留所有权利。

页面耗时0.0214秒, 内存占用1.86 MB, 访问数据库15次

闽ICP备15009223号-1