原创 通过PEB获得进程路径 (附完整工程)

完整工程:http://files.cnblogs.com/files/Gotogoo/%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86%E5%99%A8%28x86%26%26x64%29.zip

 

PEB(Process Environment Block,进程环境块)存放进程信息,每个进程都有自己的PEB信息。位于用户地址空间。

PEB地址可以通过函数PsGetProcessPeb(EPROCESS)来获得,也可以通过EPROCESS基地址加偏移0x1b0(x86)来获得。

 

PEB结构

 typedef struct _PEB { // Size: 0x1D8/*000*/ UCHAR InheritedAddressSpace;/*001*/ UCHAR ReadImageFileExecOptions;/*002*/ UCHAR BeingDebugged;/*003*/ UCHAR SpareBool;/*004*/ HANDLE Mutant;/*008*/ HINSTANCE ImageBaseAddress; /*00C*/ VOID *DllList;/*010*/ PPROCESS_PARAMETERS *ProcessParameters;    //进程参数块
/*014*/ ULONG SubSystemData;/*018*/ HANDLE DefaultHeap;/*01C*/ KSPIN_LOCK FastPebLock;/*020*/ ULONG FastPebLockRoutine;/*024*/ ULONG FastPebUnlockRoutine;/*028*/ ULONG EnvironmentUpdateCount;/*02C*/ ULONG KernelCallbackTable;/*030*/ LARGE_INTEGER SystemReserved;/*038*/ ULONG FreeList;/*03C*/ ULONG TlsExpansionCounter;/*040*/ ULONG TlsBitmap;/*044*/ LARGE_INTEGER TlsBitmapBits;/*04C*/ ULONG ReadOnlySharedMemoryBase;/*050*/ ULONG ReadOnlySharedMemoryHeap;/*054*/ ULONG ReadOnlyStaticServerData;/*058*/ ULONG AnsiCodePageData;/*05C*/ ULONG OemCodePageData;/*060*/ ULONG UnicodeCaseTableData;/*064*/ ULONG NumberOfProcessors;/*068*/ LARGE_INTEGER NtGlobalFlag; /*070*/ LARGE_INTEGER CriticalSectionTimeout;/*078*/ ULONG HeapSegmentReserve;/*07C*/ ULONG HeapSegmentCommit;/*080*/ ULONG HeapDeCommitTotalFreeThreshold;/*084*/ ULONG HeapDeCommitFreeBlockThreshold;/*088*/ ULONG NumberOfHeaps;/*08C*/ ULONG MaximumNumberOfHeaps;/*090*/ ULONG ProcessHeaps;/*094*/ ULONG GdiSharedHandleTable;/*098*/ ULONG ProcessStarterHelper;/*09C*/ ULONG GdiDCAttributeList;/*0A0*/ KSPIN_LOCK LoaderLock;/*0A4*/ ULONG OSMajorVersion;/*0A8*/ ULONG OSMinorVersion;/*0AC*/ USHORT OSBuildNumber;/*0AE*/ USHORT OSCSDVersion;/*0B0*/ ULONG OSPlatformId;/*0B4*/ ULONG ImageSubsystem;/*0B8*/ ULONG ImageSubsystemMajorVersion;/*0BC*/ ULONG ImageSubsystemMinorVersion;/*0C0*/ ULONG ImageProcessAffinityMask;/*0C4*/ ULONG GdiHandleBuffer[0x22];/*14C*/ ULONG PostProcessInitRoutine;/*150*/ ULONG TlsExpansionBitmap;/*154*/ UCHAR TlsExpansionBitmapBits[0x80];/*1D4*/ ULONG SessionId;} PEB, *PPEB;

 

PEB偏移0x10处还有个指针ProcessParameters,指向一个进程参数块PPB、即RTL_USER_PROCESS_PARAMETERS数据结构。

这PPB也是在用户空间的,虽然是个独立存在的数据结构,逻辑上却可以看作是PEB的一部分。

 

进程参数块RTL_USER_PROCESS_PARAMETERS结构

typedef struct _RTL_USER_PROCESS_PARAMETERS
{ULONG MaximumLength;ULONG Length;ULONG Flags;ULONG DebugFlags;PVOID ConsoleHandle;ULONG ConsoleFlags;PVOID StandardInput;PVOID StandardOutput;PVOID StandardError;CURDIR CurrentDirectory;UNICODE_STRING DllPath;UNICODE_STRING ImagePathName;     //进程完整路径UNICODE_STRING CommandLine;PVOID Environment;ULONG StartingX;ULONG StartingY;ULONG CountX;ULONG CountY;ULONG CountCharsX;ULONG CountCharsY;ULONG FillAttribute;ULONG WindowFlags;ULONG ShowWindowFlags;UNICODE_STRING WindowTitle;UNICODE_STRING DesktopInfo;UNICODE_STRING ShellInfo;UNICODE_STRING RuntimeData;RTL_DRIVE_LETTER_CURDIR CurrentDirectores[32];ULONG EnvironmentSize;
} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;

 

下面以x86为例,在Windbg中可以具体实验感受一下:

1.先随便找个进程

 

 

2.注意PEB是在用户空间,从他的地址也可以看出来,因为7ffdf000<80000000,

所以在查看PEB时要先使用命令 .process 899ac958 切入我们我们所找的SogouExe.exe进程的地址空间中,这个很重要

然后我们查看进程SogouExe.exe的PEB

 

 

 

 

3.在偏移0x10处看到了结构体RTL_USER_PROCESS_PARAMETERS,从图中可以看出,它位于地址0x20000处

继续查看它

 

 

 

 

4,在偏移0x38处就存放着进程完整路径。OK,成功找到,这样就可以进入具体的代码实现了

 

 1 BOOLEAN GetProcessPathByEProcess(PEPROCESS EProcess,WCHAR* wzProcessPath)
 2 {
 3     PPEB  Peb = NULL;
 4     KAPC_STATE ApcState;
 5     ULONG_PTR  ProcessParameters = NULL;
 6      
 7 
 8     if (EProcess==NULL||!MmIsAddressValid(EProcess))
 9     {
10         return FALSE;
11     }
12     Peb = PsGetProcessPeb(EProcess);
13     if (Peb==NULL)
14     {
15         return FALSE;
16     }
17     
18     KeStackAttachProcess(EProcess, &ApcState);   //切入进程地址空间,很重要
19 
20 
21     ProcessParameters = *(ULONG_PTR*)((ULONG_PTR)Peb+ProcessParametersOfPeb);
22 
23     memcpy(wzProcessPath,((PUNICODE_STRING)((ULONG_PTR)ProcessParameters+ImagePathNameOfProcessParameters))->Buffer,
24         ((PUNICODE_STRING)((ULONG_PTR)ProcessParameters+ImagePathNameOfProcessParameters))->Length);
25 
26 
27 
28     KeUnstackDetachProcess(&ApcState);      //切出进程,很重要
29 
30 
31 
32     return TRUE;
33 }

 

转载于:https://www.cnblogs.com/Gotogoo/p/5259047.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windbg SOS and CLR版本不一致的解决方案

由于测试服务环境与Windbg运行环境的差异&#xff0c;这就可能出现Windbg在分析dump文件时.net sos.dll和mscordacwks.dll版本不一致问题&#xff0c;从而导致windbg调试器的扩展命令无法正常使用&#xff0c;具体的解决方法如下&#xff1a;1.首先定义Windgb symbols路径&…

[DIV/CSS] 【译】60个有用CSS代码片段

2019独角兽企业重金招聘Python工程师标准>>> 1、垂直对齐 如果你用CSS&#xff0c;则你会有困惑&#xff1a;我该怎么垂直对齐容器中的元素&#xff1f;现在&#xff0c;利用CSS3的Transform&#xff0c;可以很优雅的解决这个困惑&#xff1a; .verticalcenter{posi…

java 类数组_Java常用类-字符串、日期类、算法及数组工具类等

大家好&#xff0c;乐字节的小乐又和大家见面了。这次要给大家讲述的是Java常用类。主要有以下知识点&#xff1a; 字符串相关类&#xff08;String 、StringBuffer、StringBuilder&#xff09; 算法及数组工具类(Arrays) 日期类 基本数据类型包装类 Math类 File类 枚举类一、 …

IOS之Foundation之探究学习Swift实用基础整理一

2019独角兽企业重金招聘Python工程师标准>>> 1 import Foundation2 3 //加载网络数据&#xff0c;查找数据的字符串4 let dataurl "http://api.k780.com:88/?appweather.city&&appkey10003&signb59bc3ef6191eb9f747dd4e83c99f2a4&formatjson…

sql 时间 没有日期_SQL-补充:日期和时间戳互转

补充&#xff1a;日期和时间戳互转1. 日期转时间戳-- 转十位select UNIX_TIMESTAMP(2018-12-25 12:25:00);结果&#xff1a;1545711900-- 转十三位SELECT REPLACE(unix_timestamp(current_timestamp(3)),.,);结果&#xff1a;15457119000212. 时间戳转日期 FROM_UNIXTIME(unix_…

vue那个生命周期函数操作dom_vue生命周期实例小结

本文实例分析了vue生命周期。分享给大家供大家参考&#xff0c;具体如下&#xff1a;每个Vue实例都存在完整的生命周期&#xff0c;经历从创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、销毁等一系列过程。如下图所示vue的完整生命周期可分为三个阶段&#xff1a;初…

不求很多,够用就好

Hi&#xff0c;我是一名在校学生&#xff0c;目前大三&#xff0c;希望在前端方向上发展&#xff0c;最好以后是一个真全栈 曾经也会搜索一堆的工具&#xff0c;后面发现 只有正确的使用合理数量的工具&#xff0c;才能加快开发步伐 下面简单推荐几个实用工具&#xff0c;强大并…

java连接mysql2008_在Java中如何使用jdbc连接Sql2008数据库(转)

我们在javaEE的开发中&#xff0c;肯定是要用到数据库的&#xff0c;那么在javaEE的开发中&#xff0c;是如何使用代码实现和SQL2008的连接的呢&#xff1f;在这一篇文章中&#xff0c;我将讲解如何最简单的使用jdbc进行SQL2008的数据库的连接的。首先我们看下我们的数据库的一…

java搭建博客系统_Spring boot 搭建个人博客系统(一)——整体思路

Spring boot 搭建个人博客系统(一)——整体思路一直想用Spring boot 搭建一个属于自己的博客系统&#xff0c;刚好前段时间学习了叶神的牛客项目课受益匪浅&#xff0c;乘热打铁也主要是学习&#xff0c;好让自己熟悉这类项目开发的基本流程。0. 思路博客的基本作用就是博主写文…

在SQL Server中为什么不建议使用Not In子查询

原文:在SQL Server中为什么不建议使用Not In子查询在SQL Server中&#xff0c;子查询可以分为相关子查询和无关子查询&#xff0c;对于无关子查询来说&#xff0c;Not In子句比较常见&#xff0c;但Not In潜在会带来下面两种问题&#xff1a; 结果不准确 查询性能低下 下面我们…

结组项目-四则运算3

团队成员&#xff1a;苗堃&#xff08;http://www.cnblogs.com/brucekun/p/5294368.html&#xff09;、罗毅&#xff08;http://www.cnblogs.com/ly199553/p/5294779.html&#xff09; PSP总结http://www.cnblogs.com/ly199553/p/5295545.html 本次软件工程老师提出了新任务&a…

jsp 嵌入java_关于JSP里的Java语句嵌入问题

是这样的,我用的是Intellij 导入了一个MyEclipse的包(该包已部署在服务器上&#xff0c;所以是没有大错误的)。然后在一个jsp文件出现了个问题&#xff1a;莫名奇妙地println变成了红色&#xff0c;执行的时候就直接抛出异常了。今天刚接触JavaWeb不太懂&#xff0c;到底是怎么…

【three.js】库

2019独角兽企业重金招聘Python工程师标准>>> three.js 一个轻量级的webgl库&#xff0c;但是十分强大。 下载地址https://github.com/mrdoob/three.js OrbitControls.js 控制视口的平移、缩放、旋转。 GridHelper.js 生成视口的网格。 转载于:https://my.oschina.…

域名发散--前端优化(三)

话说天下大势&#xff0c;分久必合&#xff0c;合久必分其实域名也是一样&#xff0c;分分合合&#xff0c; 不管是域名收敛还是域名发散&#xff0c;都有着自己独特的应用场景。目前, 在webs top 30,000 URLS 里面&#xff0c; 平均每个域名承担了50个资源的请求&#xff0c;所…

java就_GitHub - IammyselfYBX/This_is_how_Java_should_be_learned: 《Java就应该这样学》

Java就该这么学说明这里使用 centos7 的openjdk&#xff0c;不是Oracle的JDKyum search java|grep jdkyum install java-1.8.0-openjdk#set Java environmentexport JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64export CALSSPATH.:$JAVA_HOME/jre/l…

win7变成xp风格了怎么改回_XP退役了,如何把Win7变成XP风格

展开全部方法如下&#xff1a;【步骤62616964757a686964616fe78988e69d8331333365653265①】&#xff1a;在电脑桌面空白处&#xff0c;点击鼠标右键&#xff0c;子菜单选择点击“个性化”【步骤②】&#xff1a;直接选择“基本和高对比主题”里的“Windows经典”模式整理风格发…

org.apache.catalina.LifecycleException: Failed to

2019独角兽企业重金招聘Python工程师标准>>> 文章原创地址&#xff1a;org.apache.catalina.LifecycleException: Failed to start component今天来了个新同事&#xff0c;让他先熟悉一下我们的工程项目&#xff0c;从svn下载下来以后&#xff0c;配置完成却怎么都无…

objective-C CollectionView 加深(添加注册头部View)

2019独角兽企业重金招聘Python工程师标准>>> #pragma marc 添加Collection -(void)addConllectionView{//collection的布局方案UICollectionViewFlowLayout *collectionViewLayout[[UICollectionViewFlowLayout alloc]init];//设置位置大小以及布局方案_myCollectio…

Javascript中Base64编码解码的使用实例

Javascript为我们提供了一个简单的方法来实现字符串的Base64编码和解码&#xff0c;分别是window.btoa()函数和window.atob()函数。 1 var encodedStr window.btoa(“Hello world”); //字符串编码 2 var decodedStr window.atob(encodedStr); //字符串解码看下面的实例代…

mysql安装前的系统准备工作(转)

一、系统环境总结&#xff1a; 二、安装yum源&#xff1a; 1、安装磁盘yum源&#xff1a; 一、安装xfs文件系统&#xff1a;1、配置yum源&#xff1a;&#xff08;光盘&#xff09;vi /etc/yum.repos.d/yum.repo[Server]nameserverbaseurlfile:///tmp/cddir/Server/enabled1gpg…