进程的创建过程

进程

  1. 进程的定义
  2. 进程只负责给程序提供资源:代码、数据、虚拟内存空间
  3. 进程是空间概念,不负责执行代码;真正执行代码的是线程
  4. 程序是磁盘上静态文件;运行起来之后才变成进程
  5. 查看运行中的进程
    ● 所有进程都由别的进程创建;Windows 第一个进程(explorer.exe)由内核创建
    ● 双击 exe,explorer.exe调用CreateProcess()生成新进程;任务管理器可以观察进程
    x86 Windows 4GB 虚拟地址空间划分
区域地址范围说明
空指针赋值区0x00000000 ~ 0x0000FFFF前64KB,禁止访问,捕获空指针异常
用户模式区0x00010000 ~ 0x7FFEFFFF用户程序、exe、dll全部在这里,低2GB
64KB禁入区0x7FFF0000 ~ 0x7FFFFFFF用户空间末尾保留隔离区域,禁止访问
内核区0x80000000 ~ 0xFFFFFFFF高2GB,所有进程共享,存放内核、驱动、kernel32.dll等

重点:每个进程独立用户空间;内核空间全部进程共用
调试工具(如 x64dbg/DTDebug)附加进程,就可以查看虚拟内存视图
在这里插入图片描述
3. 模块化视图(PE 模块角度看进程)
进程内存由若干 PE 模块组成:.exe、.dll
● 示例:cxstudy.exe默认加载基址 0x00400000
● 每个 PE 包含多个节:
.text:代码段,可执行 .data:数据段,读写
.rsrc:资源段(图标、对话框等)
● 模块分类:
a. 主模块:exe 本身
b. 系统模块:ntdll.dll、kernel32.dll,一般加载到高地址
c. 第三方 dll
4. Windows 进程创建完整 5 步(CreateProcess 内部)

  1. 映射 EXE 文件到虚拟内存 将磁盘 exe 映射到进程虚拟地址,按照 PE 可选头的 ImageBase 加载,避开前后 64KB 保护区域
  2. 创建内核对象 EPROCESS 内核结构体,操作系统管理进程的核心,保存 PID、权限、内存描述等信息,用户态不能直接访问
  3. 映射系统 DLL 强制载入ntdll.dll;根据 PE 导入表,递归加载所有依赖 DLL
  4. 创建主线程内核对象 ETHREAD 进程至少要有 1 个线程,没有线程的进程无法运行 ETHREAD记录线程上下文、栈、寄存器等
  5. 线程开始执行:ntdll!LdrInitializeThunk 主线程真正跑起来,在这里完成全部 DLL 加载、导入表重定位,之后才跳转到 exe 入口点
    ⚡关键漏洞时机:第 5 步,LdrInitializeThunk 执行期间,还没跑用户代码、安全检测 DLL 还未初始化,这是注入的经典时机
    狸猫换太子原理
  6. 使用 CreateProcess 创建进程 A,挂起主线程
  7. 在 Ldr 初始化完成前,把内存里 A 的代码覆盖成 B 程序
  8. 恢复线程执行,执行 B 逻辑
  9. 任务管理器显示进程 A,实现伪装,恶意软件常用该思路

安全对抗要点

  1. 用户双击程序,本质explorer.exe调用CreateProcessA/W生成子进程
  2. 进程伪装:修改 EPROCESS 里进程名字,伪装成系统进程,如services.exe;但线程数量、模块列表会暴露异常
  3. 防护:不能只看进程名,要校验模块列表、线程数量、原始磁盘文件哈希

总结

  1. 进程提供资源,线程执行代码;进程本身不会跑指令
  2. 用户空间每个进程互相隔离;内核空间全部进程共享
  3. ntdll.dll是每个 Windows 用户进程必加载的底层 dll
  4. LdrInitializeThunk是进程真正完成 DLL 加载的入口,注入常用时机
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值