阅读:2713回复:0
来鸟从PEPROCESS 到 进程id的过程(欢迎批评)
对于nt系统,知道了进程的id后,可以通过
PsLookupProcessByProcessId获得进程的PEPROCESS,现在的问题是如果知道了PEPROCESS,如何获得进程的id呢?当然,如果知道了相应的EPROCESS结构,就可以获取了(PEPROCESS->UniqueProcessId ),关于这个结构,驱动网上有,但是不全。而我也不爱找,昨天看了skymartin写的soft-ice的使用手册,突然想到了一个方法(自己对softice的使用也是来鸟级别的),下面说说。 其实非常简单,就是找UniqueProcessId在PEPROCESS的偏移量,方法是: (1)softice呼出 (2)执行proc,注意kpeb是PEPROCESS的第一成员(这个看驱动网文章) 结果你会看到很多行,我选择的是:foxmail(你也可以选择别的) system 81661520 8 .... ....................... foxmail 82bc0020 25c .... MSDEV FF2CE020 4D0 .... 下面就用到了softice的两个命令:s (搜索)和d(显示) s 82bc0020 l 120 5c 02 00 00 显示:Pattern found at 0010:82bc00bc(0000009c) 结果说明:82bc0020 是foxmail进程的kpeb地址,l是120长度,在我W2K PROFESSIONAL中,pid =25c,注意类型是ULONG,所以实际值为0000025c,内存存储方式是:先低字,再高字,对于每个字(2个字节),先低字节,再高字节,所以25c再内存的存放是 : 5c 02 00 00 。结果中(9c)就是偏移量了。为了测试是否正确,执行命令db ff2ce020 + 9c,内存为: 0010:FF2CE0BC D0 04 00 00 ..... 0010:....;. 看见D0 04 00 00 了吗,再给还原,看看上面的存储方式,先低字,再高字,所以D0 04是低字,0000是高字,你应该再心里记住(0000)(D0 04),然后是对每个字,先低字节,再高字节,所以(oo00)=》(00 oo),(DO O4)=>(04 d0),所以结果为:000004d0=4d0。当然了你也可以通过system来找。 :D :D听高兴的,终于会用softice的命令了,大侠别笑话我啊 |
|
最新喜欢:![]()
|