思路:如何跳过CreateProcess调用底层创建进程函数

论坛近日有人在问如何跳过CreateProcess调用底层的NtCreateProcess。

我想说的是不能单纯看这个问题,首先不同NT内核版本CreateProcess进入

底层的路径是不同的:


2k ->NtCreateProcess
xp ->NtCreateProcessEx
vista/win7/2008 ->NtCreateUserProcess


(另可参考 kernel32.dll CreateProcessAsUserW

kernel32.dll CreateProcessAsInternalW   

ntdll.32 NtCreateUserProcess


拿windows7 x64来说吧,在ntdll32!NtCreateUserProcess设置断点,中断后,查看stack内容,结合该函数原型来看:


NTSTATUS NtCreateUserProcess(PHANDLE ProcessHandle,
  PHANDLE ThreadHandle,
  PVOID Parameter2,
  PVOID Parameter3,
  PVOID ProcessSecurityDescriptor,
  PVOID ThreadSecurityDescriptor,
  PVOID Parameter6,
  PVOID Parameter7,
  PRTL_USER_PROCESS_PARAMETERS ProcessParameters,
  PVOID Parameter9,
  PVOID pProcessUnKnow);

vals in stack :
0028f5dc 760b4338 kernel32!CreateProcessInternalW+0xe75 (ret)
0028f5e0 0028f920
0028f5e4 0028f900
0028f5e8 02000000
0028f5ec 02000000
0028f5f0 00000000
0028f5f4 00000000
0028f5f8 00000000
0028f5fc 00000001
0028f600 00755c38
0028f604 0028f7a4
0028f608 0028fb20
0028f60c d0c89b5d
0028f610 0028fcdc
0028f614 00000001

可知其最关键的ProcessParameters地址在755c38,分析其内容则有:

ntdll!_RTL_USER_PROCESS_PARAMETERS
  +0x000 MaximumLength : 0x94c
  +0x004 Length : 0x94c
  +0x008 Flags : 1
  +0x00c DebugFlags : 0
  +0x010 ConsoleHandle : 0x00001480 Void
  +0x018 ConsoleFlags : 3
  +0x020 StandardInput : 0x0000000b Void
  +0x028 StandardOutput : 0x00755ed0 Void
  +0x030 StandardError : 0x03ee03ec Void
  +0x038 CurrentDirectory : _CURDIR
  +0x000 DosPath : _UNICODE_STRING "C:\Windows\system32\notepad.exe"
  +0x000 Length : 0x3e
  +0x002 MaximumLength : 0x40
  +0x008 Buffer : 0x00180016 "--- memory read error at address 0x00180016 ---"
  +0x010 Handle : 0x00756584 Void
  +0x050 DllPath : _UNICODE_STRING ""
  +0x000 Length : 0
  +0x002 MaximumLength : 0
  +0x008 Buffer : (null)  
  +0x060 ImagePathName : _UNICODE_STRING ""
  +0x000 Length : 0
  +0x002 MaximumLength : 0
  +0x008 Buffer : (null)  
  +0x070 CommandLine : _UNICODE_STRING "C:\Windows\system32\notepad.exe"
  +0x000 Length : 0x3e
  +0x002 MaximumLength : 0x40
  +0x008 Buffer : 0x0020001e "--- memory read error at address 0x0020001e ---"
  +0x080 Environment : 0x00020000 Void
  +0x088 StartingX : 0
  +0x08c StartingY : 0
  +0x090 CountX : 0
  +0x094 CountY : 0
  +0x098 CountCharsX : 0
  +0x09c CountCharsY : 0
  +0x0a0 FillAttribute : 0
  +0x0a4 WindowFlags : 0
  +0x0a8 ShowWindowFlags : 0
  +0x0b0 WindowTitle : _UNICODE_STRING ""
  +0x000 Length : 0
  +0x002 MaximumLength : 0
  +0x008 Buffer : (null)  
  +0x0c0 DesktopInfo : _UNICODE_STRING ""
  +0x000 Length : 0
  +0x002 MaximumLength : 0
  +0x008 Buffer : (null)  
  +0x0d0 ShellInfo : _UNICODE_STRING ""
  +0x000 Length : 0
  +0x002 MaximumLength : 0
  +0x008 Buffer : (null)  
  +0x0e0 RuntimeData : _UNICODE_STRING ""
  +0x000 Length : 0
  +0x002 MaximumLength : 0
  +0x008 Buffer : (null)  
  +0x0f0 CurrentDirectores : [32] _RTL_DRIVE_LETTER_CURDIR
  +0x000 Flags : 0
  +0x002 Length : 0
  +0x004 TimeStamp : 0
  +0x008 DosPath : _STRING ""
  +0x000 Length : 0
  +0x002 MaximumLength : 0
  +0x008 Buffer : (null)  
  +0x3f0 EnvironmentSize : 0
  +0x3f8 EnvironmentVersion : 0

接下来就可以操作鸟:

1 找出 NtCreateUserProcess 地址
2 构建及填充 ProcessParameters 内容
3 调用并处理好返回值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
上册共分为10部分,这是第1部分 Windows内核情景分析(上册).part01.rar 基本信息 作者: 毛德操 出版社:电子工业出版社 ISBN:9787121081149 上架时间:2009-5-25 出版日期:2009 年5月 开本:16开 页码:1465 版次:1-1 所属分类:计算机 > 操作系统 > Windows 内容简介回到顶部↑ 本书通过分析ReactOS的源代码介绍了Windows内核各个方面的结构、功能、算法与具体实现。全书从“内存管理”、“进程”、“进程间通信”、“设备驱动”等多个方面进行分析介绍,所有的分析都有ReactOS的源代码(以及部分由微软公开的源代码)作为依据,使读者能深入理解Windows内核的方方面面,也可以使读者的软件开发能力和水平得到提高。. 本书可供大学有关专业的高年级学生和研究生用做教学参考,也可供广大的软件工程师,特别是从事系统软件研发的工程师用于工作参考或用做进修教材。... 目录回到顶部↑ 上 册. 第1章 概述 1 1.1 Windows操作系统发展简史 1 1.2 用户空间和系统空间 3 1.3 Windows内核 4 1.4 开源项目ReactOS及其代码 9 1.5 Windows内核函数的命名 10 第2章 系统调用 12 2.1 内核与系统调用 12 2.2 系统调用的内核入口KiSystemService() 22 2.3 系统调用函数跳转 29 2.4 系统调用的返回 32 2.5 快速系统调用 35 2.6 从内核中发起系统调用 42 第3章 内存管理 44 3.1 内存区间的动态分配 47 3.1.1 内核对用户空间的管理 48 3.1.2 内核对于物理页面的管理 60 3.1.3 虚存页面的映射 67 3.1.4 Hyperspace的临时映射 78 .3.1.5 系统空间的映射 86 3.1.6 系统调用NtAllocateVirtualMemory() 90 3.2 页面异常 97 3.3 页面的换出 107 3.4 共享映射区(Section) 115 3.5 系统空间的缓冲区管理 133 第4章 对象管理 136 4.1 对象与对象目录 136 4.2 对象类型 148 4.3 句柄和句柄表 162 4.4 对象的创建 169 4.5 几个常用的内核函数 179 4.5.1 ObReferenceObjectByHandle() 179 4.5.2 ObReferenceObjectByPointer() 187 4.5.3 ObpLookupEntryDirectory() 188 4.5.4 ObpLookupObjectName() 192 4.5.5 ObOpenObjectByName() 209 4.5.6 ObReferenceObjectByName() 213 4.5.7 ObDereferenceObject() 214 4.6 对象的访问控制 218 4.7 句柄的遗传和继承 218 4.8 系统调用NtDuplicateObject() 223 4.9 系统调用NtClose() 233 第5章 进程与线程 241 5.1 概述 241 5.2 Windows进程的用户空间 253 5.3 系统调用NtCreateProcess() 273 5.4 系统调用NtCreateThread() 284 5.5 Windows的可执行程序映像 300 5.6 Windows的进程创建和映像装入 305 5.7 Windows DLL的装入和连接 329 5.8 Windows的APC机制 358 5.9 Windows线程的调度和切换 381 5.9.1 x86系统结构与线程切换 382 5.9.2 几个重要的数据结构 385 5.9.3 线程的切换 388 5.9.4 线程的调度 395 5.10 线程和进程的优先级 409 5.11 线程本地存储TLS 421 5.12 进程挂靠 434 5.13 Windows的跨进程操作 442 5.14 Windows线程间的相互作用 450 第6章 进程间通信 467 6.1 概述 467 6.2 共享内存区(Section).. 469 6.3 线程的等待/唤醒机制 470 6.4 信号量(Semaphore) 499 6.5 互斥门(Mutant) 505 6.6 事件(Event) 512 6.7 命名管道(Named Pipe)和信插(Mailslot) 516 6.8 本地过程调用(LPC) 521 6.9 视窗报文
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值