-
-
[分享]最简单的进程注入DEMO
-
发表于: 2008-12-19 17:17 4331
-
#include <stdio.h>
#include <windows.h>
#include <TLHELP32.H>
#pragma comment(linker, "/base:0xf00000")
DWORD inject(PVOID param)
{
MessageBox(NULL, "hello inject", "hello inject", 0);
return 0;
}
int main(int argc, char* argv[])
{
HANDLE hMoudle = GetModuleHandle(NULL);
PIMAGE_DOS_HEADER dosHead = (PIMAGE_DOS_HEADER)hMoudle;
PIMAGE_NT_HEADERS ntHead = (PIMAGE_NT_HEADERS)((PCHAR)dosHead + dosHead->e_lfanew);
int imgSize = ntHead->OptionalHeader.SizeOfImage;
printf("image %08x size %08x\n", hMoudle, imgSize);
//获取待注入线程的PID
PROCESSENTRY32 processEntry;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
processEntry.th32ProcessID = 0;
while (Process32Next(hSnapshot, &processEntry))
{
if (strnicmp(processEntry.szExeFile, "explorer", 8) == 0)
break;
}
CloseHandle(hSnapshot);
if (processEntry.th32ProcessID)
{
HANDLE hTarget = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processEntry.th32ProcessID);
if (hTarget)
{
//
//注意:这里将自身镜像直接映射到目标进程的内存空间,地址没有变化,故可以直接使用API
// 这里要确保修改默认镜像基地址->0xf00000,也确保直接映射成功
PVOID injectFunAddress = VirtualAllocEx(hTarget, hMoudle, imgSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (injectFunAddress)
{
HANDLE hRemoteThread = NULL;
DWORD writeSize = 0;
DWORD threadId = 0;
WriteProcessMemory(hTarget, injectFunAddress, hMoudle, imgSize, &writeSize);
hRemoteThread = CreateRemoteThread(hTarget, NULL, 0, (LPTHREAD_START_ROUTINE)inject, NULL, 0, &threadId);
CloseHandle(hRemoteThread);
CloseHandle(hTarget);
}
}
}
return 0;
}
#include <windows.h>
#include <TLHELP32.H>
#pragma comment(linker, "/base:0xf00000")
DWORD inject(PVOID param)
{
MessageBox(NULL, "hello inject", "hello inject", 0);
return 0;
}
int main(int argc, char* argv[])
{
HANDLE hMoudle = GetModuleHandle(NULL);
PIMAGE_DOS_HEADER dosHead = (PIMAGE_DOS_HEADER)hMoudle;
PIMAGE_NT_HEADERS ntHead = (PIMAGE_NT_HEADERS)((PCHAR)dosHead + dosHead->e_lfanew);
int imgSize = ntHead->OptionalHeader.SizeOfImage;
printf("image %08x size %08x\n", hMoudle, imgSize);
//获取待注入线程的PID
PROCESSENTRY32 processEntry;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
processEntry.th32ProcessID = 0;
while (Process32Next(hSnapshot, &processEntry))
{
if (strnicmp(processEntry.szExeFile, "explorer", 8) == 0)
break;
}
CloseHandle(hSnapshot);
if (processEntry.th32ProcessID)
{
HANDLE hTarget = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processEntry.th32ProcessID);
if (hTarget)
{
//
//注意:这里将自身镜像直接映射到目标进程的内存空间,地址没有变化,故可以直接使用API
// 这里要确保修改默认镜像基地址->0xf00000,也确保直接映射成功
PVOID injectFunAddress = VirtualAllocEx(hTarget, hMoudle, imgSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (injectFunAddress)
{
HANDLE hRemoteThread = NULL;
DWORD writeSize = 0;
DWORD threadId = 0;
WriteProcessMemory(hTarget, injectFunAddress, hMoudle, imgSize, &writeSize);
hRemoteThread = CreateRemoteThread(hTarget, NULL, 0, (LPTHREAD_START_ROUTINE)inject, NULL, 0, &threadId);
CloseHandle(hRemoteThread);
CloseHandle(hTarget);
}
}
}
return 0;
}
赞赏
他的文章
- [分享]FCN免公网IP远程接入局域网3.8版本发布 13322
- [原创]FCN远程连接局域网V3.0正式版发布 5432
- [原创]FCN一键接入工具 4876
- [原创]FCN一键接入私有网络工具 6159
- [原创]最近写的一个类C语言的解释编译器 7628
谁下载
sixfor
option
HuangZhiHua
progray
amdey
ttstation
newwalter
uheeyc
sudami
dtcser
muyi
lovebao
xiaoligogo
fullpolo
smnk
孙海鸥
liein
dsjHZAHfaf
rodherz
lancechung
baiyl
qwefgh
六月
wenyurs
khongninh
hacktrace
rst
shwsf
洪流
可见光
eping
jinjing
zm马萧
xcntime
linlovenan
angluca
linzizhong
raulsyp
yygkko
windsun
gpaul
忍忠
zllang
lylylylyly
ohdebug
zhaozhpo
zhangzdzzd
ntaryl
猎人猎枪
MRHuang
yindong
mmzoe
赞赏
雪币:
留言: