PEB结构体
在fs寄存器所指的地址再偏移0x30就是该程序的PEB地址。其结构为
typedef struct _PEB { BYTE Reserved1[2]; BYTE BeingDebugged; //被调试状态 BYTE Reserved2[1]; PVOID Reserved3[2]; PPEB_LDR_DATA Ldr; PRTL_USER_PROCESS_PARAMETERS ProcessParameters; BYTE Reserved4[104]; PVOID Reserved5[52]; PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine; BYTE Reserved6[128]; PVOID Reserved7[1]; ULONG SessionId; } PEB, *PPEB;
1、用OD附加记事本,然后查看记事本进程的PEB的BeingDebugged成员的值(注意:OD不要使用插件)
先查看器fs所指的位置
偏移为0x30处,所指地址为0x7ffdf000,这就是PEB
为True说明正在被调试
2、写程序获取PEB中的模块链表,找到kernel32.dll的基址(win7 xp通用)
3、用OD附加记事本,下断点,然后在windbg中清空EPROCESS中的DebugPort中的值,然后单步调试,观察结果.
4、使用windbg对EPROCESS中的ActiveProcessLinks断链,然后在任务管理器中查找该进程。