利用远程线程进行DLL的注入
2015-04-02 10:41
274 查看
通过为另一个进程,创建线程,线程在初始化时候会调用线程函数。将线程函数更改为LoadLibrary()就行,但是此处要注意的是,LoadLibrary()的地址需要是在被注入进程的进程地址空间内的地址。而且保存Unicode字符串的地址也是要在被注入进程的地址空间内部的地址。具体的操作可以翻阅Windows核心编程第五版P587。以下是源代码。
注意此处是不需要提升进程权限的。
#include <iostream>
#include <Windows.h>
#include <tchar.h>
using namespace std;
int main(){
cout << "请输入注入的进程ID:";
DWORD dwPID;
cin >> dwPID;
//打开进程句柄,此处先不进行权限提升
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
if (hProcess == NULL){
cout << "打开进程句柄失败!";
return 0;
}//if
//物理内存分配
HANDLE hMem = VirtualAllocEx(hProcess, NULL, 1024, MEM_COMMIT, PAGE_READWRITE);
SIZE_T size;
//写入内存
//空格符号
if (NULL == WriteProcessMemory(hProcess, hMem, L"D:\\test.dll", _tcslen(L"C:\\test.dll") * 2 + 2, &size)){
cout << "写入内存出错";
return 0;
}//if
cout << "写入字节数: " << size << endl;
TCHAR buf[200];
ReadProcessMemory(hProcess, hMem, buf, 200, &size);
//MessageBox(NULL, buf, L"测试", MB_OK);
wcout << buf << endl;
PTHREAD_START_ROUTINE pfnStart = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(L"kernel32"), "LoadLibraryW");
if (NULL == CreateRemoteThread(hProcess, NULL, 0, pfnStart, hMem, NULL, NULL)){
cout << "创建远程线程失败!";
return 0;
}//if
cout << "创建远程线程注入DLL成功!";
system("pause > 0");
return 0;
}
注意此处是不需要提升进程权限的。
#include <iostream>
#include <Windows.h>
#include <tchar.h>
using namespace std;
int main(){
cout << "请输入注入的进程ID:";
DWORD dwPID;
cin >> dwPID;
//打开进程句柄,此处先不进行权限提升
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
if (hProcess == NULL){
cout << "打开进程句柄失败!";
return 0;
}//if
//物理内存分配
HANDLE hMem = VirtualAllocEx(hProcess, NULL, 1024, MEM_COMMIT, PAGE_READWRITE);
SIZE_T size;
//写入内存
//空格符号
if (NULL == WriteProcessMemory(hProcess, hMem, L"D:\\test.dll", _tcslen(L"C:\\test.dll") * 2 + 2, &size)){
cout << "写入内存出错";
return 0;
}//if
cout << "写入字节数: " << size << endl;
TCHAR buf[200];
ReadProcessMemory(hProcess, hMem, buf, 200, &size);
//MessageBox(NULL, buf, L"测试", MB_OK);
wcout << buf << endl;
PTHREAD_START_ROUTINE pfnStart = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(L"kernel32"), "LoadLibraryW");
if (NULL == CreateRemoteThread(hProcess, NULL, 0, pfnStart, hMem, NULL, NULL)){
cout << "创建远程线程失败!";
return 0;
}//if
cout << "创建远程线程注入DLL成功!";
system("pause > 0");
return 0;
}
相关文章推荐
- 将注入进行到底--------远程线程实现 Dll 注入 汇编实现
- 利用远程线程实现dll的注入
- 利用远程线程无DLL直接注入
- 转:DLL注入大法—之利用特洛伊DLL进行注入
- 利用远程线程将代码注入到目标进程中执行
- 利用HOOK技术实现DLL远程进程注入
- 《windows核心编程系列》谈谈使用远程线程来注入DLL。
- 使用远程线程来注入DLL
- 进程注入DLL实现(APC和远程线程创建)
- 利用VB远线程注入技术实现键盘拦截的例子(无DLL)
- 《windows核心编程系列》十九谈谈使用远程线程来注入DLL。
- 利用远程线程将代码注入到目标进程中执行
- 谨慎使用DLL_THREAD_ATTACH,以及利用DLL_THREAD_ATTACH来阻止远程线程的创建执行
- 转贴:利用VB远线程注入技术实现键盘拦截的例子(无DLL)
- 使用远程线程来注入DLL
- 《windows核心编程系列》十九谈谈使用远程线程来注入DLL。
- 利用远程线程直接注入
- 利用CreateRemoteThread进行远程代码注入的技术在64位机上可能遇到的问题
- 外挂或病毒注入DLL到宿主进程,然后远程启动线程方式
- 转载:病毒编程奥秘:DLL的远程注入技术详解