【安全报告】揭秘创建进程时ebx为什么指向peb的答案

本文深入探讨了在Windows系统中创建进程时,为何eax指向新OEP,ebx指向新PEB的原因。通过分析XP和Win7下的CreateProcessInternalW流程,揭示了进程创建和线程上下文初始化的过程,涉及Ring3和Ring0的交互,以及PE文件结构解析。
摘要由CSDN通过智能技术生成

在这里插入图片描述

一、背景

为了确保被替换后的进程能顺利执行不崩溃,需要获取原进程各种上下文,并修改被替换后的新进程上下文,其中在原进程被挂起还没开始执行的时候,需要将eax指向新oep,而ebx指向新peb,而为什么这样设置的原因却很少有人提及。为此,在经过查阅了一定的资料与简单的分析后,我们可以找到答案。

二、具体分析

先抛出结论,这里的eax与ebx属于线程上下文信息,在一个PE文件开始被运行的过程中,主线程上下文初始化过程是在进程已经创建完成,而主线程还没创建的阶段发生的,下面是具体更详细的分析:

首先我们需要对进程的创建有一个大概的认识,在ring3下创建进程API无非是CreateProcessA/W,但是无论调用哪一个,最终都会将相关参数转化为Unicode字符串,并最终调用CreateProcessInternalW,因此以下将主要分析CreateProcessInternalW,而在xp和win7下,它具体实现又有一些不一样的地方。

2.1 XP下执行流程
在xp下,它大概分为四个部分,分别是ring3下创建进程,ring0下创建进程,ring3下创建线程,ring0下创建线程,以NtCreateProcessEx为分界线,NtCreateProcessEx之前为ring3下创建进程主要流程。

2.1.1 Ring3下创建进程

  1. 判断处理dwCreationFlag各种标志位,包括是否包含不合法标记组合,判断优先级。
    在这里插入图片描述
  2. 判断lpEnvironment是否为空,不为空则调用RtlAnsiStringToUnicodeString将其转为UniCode字符串。
    在这里插入图片描述
  3. 判断lpApplicationName、lpCommandLine是否为空。
    在这里插入图片描述
    如果lpApplicationName不为空直接调用RtlDosPathNameToNtPathName_U函数将DOS路径(C:\WINDOWS\XXX)转换为NT路径(\Device\HarddiskVolume1\WINDOWS\XXX),为空则会解析lpCommandLine,主要按照’”’引号,’ ’空格,’\t’制表符作为分隔符进行解析并获取相应的PE文件,然后将DOS路径转换为NT路径。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值