要去看埃菲尔铁塔的顶
欢迎关注本人微博:t.cn/RGSLVUk
关 于 创 建 傀 儡 进 程。
先说傀儡进程创建的方法吧,大致是这样:
1,选定一个打算做为傀儡进程的EXE文件,
2,调用CreateProcess API 创建进程,传入1中的exe 路径,启动方式传入
CREATE_SUSPENDED ,挂起主线程
3,获取傀儡进程映像 基址(GetThreadContext)
程序入口点处, ebx 指向 PEB 块,[ebx+0x8]就是程序映像基址
4,动态获取 NtUnmapViewOfSection 函数地址( ntdll.dll),其原型是
ULONG NtUnmapViewOfSection (HANDLE ProcessHandle, PVOID BaseAddress)
参数一: ProcessHandle 进程句柄
参数二: 映像地址
作用 : 卸载 映像中各个 Section 块, 就是 抹掉程序各个段 ,使程序称为一个“傀儡”
调用该功能,卸载程序映像
5, 在“傀儡”进程的映像地址处,调用VirtualAllocEx在映像基址处申请 可读可写可执行 虚拟内存
6,调用WriteProcessMemory 写内存, 这里传入 FAKER EXE 的头部,
再次调用,替换各个区块
7 , 这里注意 替换 上下文中 [ebx + 0x8] 的值 ,需要替换为 当前 FAKER EXE 的 NT头部
OptionalHeader.ImageBase ( 程序加载映像地址)的值 , 还需要替换 eax 的值(eax 是程序入口点) , 替换完值后 SetThreadContext 设置当前 上下文
8, 万事具备 然后 ResumeThread 一下 程序就跑了
注: 其中FAKER EXE 是 你要打算执行的 “恶意程序”。