首页
论坛
课程
招聘
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝

[调试逆向] [原创]NT下的调试器并非需要Ntdll.ntcontinue跳板函数

2008-4-30 16:59 8464

[调试逆向] [原创]NT下的调试器并非需要Ntdll.ntcontinue跳板函数

2008-4-30 16:59
8464
标 题: NT下的调试器并非需要Ntdll.ntcontinue跳板函数
作 者: Zeal
时 间: 2008-04-30,16:43

    在看雪的软件加密技术内幕中的第三章(98页)中介绍到在nt系统下需要 Ntdll.ntcontinue 这个函数作为跳板才可以对程序入口地址进行设段,但是本人今天在测试的时候发现并不需要这样,本人的环境是xp sp2,顺便再说明一下,本人最近才细读此书,可能诸位大牛已经发现了本菜鸟的方法,但是,本人的确是自己发现的哈,请各位大虾多多指教!

1、首先我将要调试的程序设为调试模式,并挂起
CreateProcess(NULL,_TEXT(tchar),NULL,NULL,FALSE,DEBUG_ONLY_THIS_PROCESS|CREATE_SUSPENDED,0,0,&si,&pi)

1、将其上下文设为单步模式,然后恢复,这样就会在[COLOR="Red"]EXCEPTION_SINGLE_STEP[/COLOR]产生中断事件消息返回

GetThreadContext(pi.hThread,&Regs);
		Regs.EFlags|=0x100;
		SetThreadContext(pi.hThread,&Regs);
		ResumeThread(pi.hThread);


以下是摘取的一段关键代码
case EXCEPTION_SINGLE_STEP:
{
++dwSSCnt;
if(dwSSCnt==2)
{
GetThreadContext(pi.hThread,&Regs);

dwBreakAddr=Regs.Eax;
Regs.Dr0=dwBreakAddr;
Regs.Dr7=0x101;

SetThreadContext(pi.hThread,&Regs);


}
else if(dwSSCnt==3)
{
GetThreadContext(pi.hThread,&Regs);
Regs.Dr7=Regs.Dr0=0;
Regs.EFlags|=0x100;
SetThreadContext(pi.hThread,&Regs);
STOP=TRUE;
}
break;
}

大家会发现我并没有使用
Regs.Dr0=(DWORD)(GetProcAddress(GetModuleHandle(_T("ntdll.dll")),_T("NtContinue")));
而是直接在第2次中断后获取上下文的eax的值作为入口中断地址进行中断,感觉这个方法比书中提到的要方便多了


已添加示例代码到附件

[公告]看雪论坛2020激励机制上线了!多多参与讨论可以获得积分快速升级?

上传的附件:
最新回复 (8)
雪    币: 278
活跃值: 活跃值 (15)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
zhuwg 活跃值 11 2008-4-30 17:29
2
0
沙发支持lz
雪    币: 246
活跃值: 活跃值 (10)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
Isaiah 活跃值 10 2008-5-4 09:59
3
0
没有第三版。为什么不直接从PE头里面读取入口地址?
雪    币: 1200
活跃值: 活跃值 (12)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
elance 活跃值 6 2008-5-4 10:49
4
0
我当时也很疑惑,
雪    币: 210
活跃值: 活跃值 (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
救世猪 活跃值 1 2008-5-4 12:10
5
0
没看太懂~~~
为什么说第二次单步中断后,Eax的值就是EP呢??
雪    币: 105
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
YockW 活跃值 1 2008-5-4 21:06
6
0
虽然早知道了这个方法,但还是小小的支持一下。

PS:
貌似wulje在07年的一篇脱文中提到过这个方法。

当时留意了一下,所以很有印象。

并非冒犯楼主
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
zeal 活跃值 6 2008-5-7 21:07
7
0
呵呵,讨论技术而已,本人还在上学,所以很少看一些别人发表的文章,所以技术跟不上啊,呵呵
雪    币: 204
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuanchi 活跃值 2008-5-7 21:41
8
0
dddddddddddddddddddd
雪    币: 204
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuanchi 活跃值 2008-5-7 21:41
9
0
dddddddddddddddddddddd
游客
登录 | 注册 方可回帖
返回