首页
社区
课程
招聘
[求助]请问DbgObject在何时建立?
发表于: 2013-6-3 13:16 4384

[求助]请问DbgObject在何时建立?

2013-6-3 13:16
4384
DbgActiviteProcess-> DbgUiDebugActiveProcess
int __stdcall DbgUiDebugActiveProcess(int a1)
{
  int v1; // esi@1

  v1 = NtDebugActiveProcess(a1, *(_DWORD *)(__readfsdword(0x18u) + 0xF24));
  if ( v1 >= 0 )
  {
    v1 = DbgUiIssueRemoteBreakin(a1);
    if ( v1 < 0 )
      DbgUiStopDebugging(a1);
  }
  return v1;
}

似乎直接从fs:[18]+f24得出debugobject的handle。
请问这个handle是由哪个函数写入的?
是否是每一个进程都有一个调试对象,只有该进程需要调试其它进程的时候就会对这个调试对象的各个成员进行初始化,并且把调试对象的内核地址写进目标进程的debugport?

[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
应该是调试进程和被调试进程的关系
调试器一次只能调试一个进程
而这个数据与FS什么的有关系
个人认为并不是句柄
2013-6-3 13:32
0
雪    币: 116
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
BOOL
WINAPI
DebugActiveProcess(IN DWORD dwProcessId)
{
    NTSTATUS Status, Status1;
    HANDLE Handle;

    /* Connect to the debugger */
    Status = DbgUiConnectToDbg();  // 这个函数里
    if (!NT_SUCCESS(Status))
    {
        BaseSetLastNTError(Status);
        return FALSE;
    }
  ...
}

NTSTATUS
NTAPI
DbgUiConnectToDbg(VOID)
{
    OBJECT_ATTRIBUTES ObjectAttributes;

    /* Don't connect twice */
    if (NtCurrentTeb()->DbgSsReserved[1]) return STATUS_SUCCESS;

    /* Setup the Attributes */
    InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, 0);

    /* Create the object */
    return ZwCreateDebugObject(&NtCurrentTeb()->DbgSsReserved[1],  // 这个
                               DEBUG_OBJECT_ALL_ACCESS,
                               &ObjectAttributes,
                               DBGK_KILL_PROCESS_ON_EXIT);

猜测楼主可能问的是这个,代码来源于ReactOs
2013-6-3 13:37
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
NtDebugActiveProcess
DbgkpSetProcessDebugObject
2013-6-3 13:38
0
游客
登录 | 注册 方可回帖
返回
//