YLLEN

要去看埃菲尔铁塔的顶

欢迎关注本人微博: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 是 你要打算执行的 “恶意程序”。


评论

© YLLEN | Powered by LOFTER