首页
社区
课程
招聘
[求助]关于PEB结构的一点疑问!
发表于: 2007-11-21 16:55 10432

[求助]关于PEB结构的一点疑问!

2007-11-21 16:55
10432
在WinDbg中查看PEB的结构,前面几个字节如下:
PEB at 7ffd5000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            Yes
    ImageBaseAddress:         00400000 ;偏移量到底是??
    Ldr                       00241ea0

在《脱壳的艺术》中,用IsDebugPresent方法检测时,获取BeingDebugged的方法如下:
Mov        eax,dword [fs:0x30]   ;EAX =  TEB.ProcessEnvironmentBlock
movzx        eax,byte [eax+0x02]   ;AL  =  PEB.BeingDebugged
用[fs:0x30]取得peb的地址
后面一句,movzx eax,byte [eax+0x02]  说明BeingDebugged占一位
那BeingDebugged的偏移量为02,则ImageBaseAddress的偏移应该为03吧

但是在gzgzlxg大侠发表的【原创】笑解 API 函数 -- API 绝密档案系列之一(http://bbs.pediy.com/showthread.php?t=21959)中,有如下代码:
77E80B23           mov   eax, large fs:18h       ; TEB.NT_TIB.Self
77E80B29           mov   eax, [eax+30h]          ; TEB.Peb
77E80B2C           mov   eax, [eax+8]            ; PEB.ImageBaseAddress
上面的代码通过eax+8获取ImageBaseAddress
这我就不明白了,这个地方怎么说明ImageBaseAddress的偏移量为8呀?

前后不致呀,还是我理解有误?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 462
活跃值: (53)
能力值: ( LV9,RANK:460 )
在线值:
发帖
回帖
粉丝
2
!peb命令只显示PEB中重要的成员,ImageBaseAddress的偏移确实是8。希望楼主在提问前最好先仔细看看帮助文档。唉!
2007-11-21 17:07
0
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
我晕,再往后看,看到了如下的东东:
+002 byte     BeingDebugged                   //Debug运行标志
+003 byte     SpareBool
+004 void     *Mutant

+008 void     *ImageBaseAddress               //这里就是程序加载的基地址了

怎么多出了两行?
我在WinDbg中用!peb为啥看不到??
2007-11-21 17:08
0
雪    币: 462
活跃值: (53)
能力值: ( LV9,RANK:460 )
在线值:
发帖
回帖
粉丝
4
这次看到的才是完整的
2007-11-21 17:11
0
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
谢谢zhzhtst
看哪个帮助文档?
对了,查看一般的数据结构用什么命令?
dt Symbol???
还是!**dll.strct symbol
还是其他的什么命令?
现在刚接触windbg还不熟

还有一个问题就是,我下载了完整的symbol,安装到了d:\windows\symbols
Ctrl+S设置符号表路径的时候应该怎么设?
就设为:d:\windows\symbols吗?
为什么设这个的时候,好多东西都找不到,如果查找东西的话,它还是到网上去下载好多东西
下载后的文件夹好像与安装的文件夹的组织方式不太一样呀
2007-11-21 17:21
0
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
我用gzgzlxg的那个方法,用如下命令
!kdex2x86.strct peb

却出现如下的提示:
0:000> !kdex2x86.strct peb
The call to LoadLibrary(kdex2x86) failed, Win32 error 0n2
    "系统找不到指定的文件。"
Please check your debugger configuration and/or network access.

估计还是我的符号表的路径设置问题吧
2007-11-21 17:25
0
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
刚才试了一下
dt _PEB可以显示出所有的结构
2007-11-21 17:41
0
雪    币: 462
活跃值: (53)
能力值: ( LV9,RANK:460 )
在线值:
发帖
回帖
粉丝
8
设置成d:\windows就行了
2007-11-21 17:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
换成d:\windows试试看呢?
2007-11-22 16:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
新手上路,多多关照!!
2007-11-22 18:46
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
11
我在用Windbg的时候也有符号包的设置问题,现在还没有搞定...
2008-4-9 19:54
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
12
PEB结构:

  BOOLEAN                 InheritedAddressSpace;
  BOOLEAN                 ReadImageFileExecOptions;
  BOOLEAN                 BeingDebugged;
  BOOLEAN                 Spare;
  HANDLE                  Mutant;
  PVOID                   ImageBaseAddress;
  PPEB_LDR_DATA           LoaderData;
  PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
  PVOID                   SubSystemData;
  PVOID                   ProcessHeap;
  PVOID                   FastPebLock;
  PPEBLOCKROUTINE         FastPebLockRoutine;
  PPEBLOCKROUTINE         FastPebUnlockRoutine;
  ULONG                   EnvironmentUpdateCount;
  PPVOID                  KernelCallbackTable;
  PVOID                   EventLogSection;
  PVOID                   EventLog;
  PPEB_FREE_BLOCK         FreeList;
  ULONG                   TlsExpansionCounter;
  PVOID                   TlsBitmap;
  ULONG                   TlsBitmapBits[0x2];
  PVOID                   ReadOnlySharedMemoryBase;
  PVOID                   ReadOnlySharedMemoryHeap;
  PPVOID                  ReadOnlyStaticServerData;
  PVOID                   AnsiCodePageData;
  PVOID                   OemCodePageData;
  PVOID                   UnicodeCaseTableData;
  ULONG                   NumberOfProcessors;
  ULONG                   NtGlobalFlag;
  BYTE                    Spare2[0x4];
  LARGE_INTEGER           CriticalSectionTimeout;
  ULONG                   HeapSegmentReserve;
  ULONG                   HeapSegmentCommit;
  ULONG                   HeapDeCommitTotalFreeThreshold;
  ULONG                   HeapDeCommitFreeBlockThreshold;
  ULONG                   NumberOfHeaps;
  ULONG                   MaximumNumberOfHeaps;
  PPVOID                  *ProcessHeaps;
  PVOID                   GdiSharedHandleTable;
  PVOID                   ProcessStarterHelper;
  PVOID                   GdiDCAttributeList;
  PVOID                   LoaderLock;
  ULONG                   OSMajorVersion;
  ULONG                   OSMinorVersion;
  ULONG                   OSBuildNumber;
  ULONG                   OSPlatformId;
  ULONG                   ImageSubSystem;
  ULONG                   ImageSubSystemMajorVersion;
  ULONG                   ImageSubSystemMinorVersion;
  ULONG                   GdiHandleBuffer[0x22];
  ULONG                   PostProcessInitRoutine;
  ULONG                   TlsExpansionBitmap;
  BYTE                    TlsExpansionBitmapBits[0x80];
  ULONG                   SessionId;
2008-4-9 21:55
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
symbol用 
SRV*f:\localsymbols*http://msdl.microsoft.com/download/symbols
不就好了吗
.reload一读就什么都出来了
2008-4-10 09:40
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
14
你下载的完整的symbol是从微软网站上下的?那只是某个版本系统最初的pdb。由于打了N次补丁,你下载的那份完整的symbol里面的pdb已经与你系统上的文件不对应了。
一般情况下,按楼上的,设置 symbol server,让windbg自动下载正确的pdb
2008-4-10 17:43
0
游客
登录 | 注册 方可回帖
返回
//