首页
社区
课程
招聘
[讨论]windows是如何查找调试器的(已解决)
发表于: 2006-11-25 11:21 4666

[讨论]windows是如何查找调试器的(已解决)

2006-11-25 11:21
4666
我们编一个程序来调试目标程序(用debug方式createprocess),
即使我们修改目标进程PEB里面的调试标志,windows始终知道,
目标进程是被我们编的这个程序调试(例如目标进程发生异常,就会抛出异常到我们的调试器)
那这就说明不能从根本上隐藏调试器,除非不调试。
我想问一下,windows是如何知道的.

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
2
我发现开启HIDEOD插件所有功能的时候,会导致调试器无法收到某些错误信息。

例如你使用anti-rdtsc时,当程序执行到rdtsc,OD就收不到错误信息,反而是WINDOWS弹出错误对话框。也就是说隐藏OD是以一定功能的损失为前提的。

前几天学习调试API,翻到“绿盟安全月刊->第46期->技术专题”里的“Win32 调试接口设计与实现浅析<1>”。下面是引用其中几句,详细的你自己去看了。

DbgUiConnectToDbg函数(ntos\dll\dlluistb.c:27)尝试连接核心提供的调试子系统端口(名为"\DbgUiApiPort"),如果成功连接会获得一个端口对象(保存在DbgUiApiPort NtCurrentTeb()->DbgSsReserved[1]),和一个调试状态转换的信号灯句柄(保存在DbgStateChangeSemaphore NtCurrentTeb()->DbgSsReserved[0])用于等待调试事件。

此外我也建议你看看Debugging Applications这本书,英文的,邪恶八进制论坛有下载
2006-11-25 13:38
0
雪    币: 191
活跃值: (41)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
好像 EPROCESS 结构里面有一个 DebugPort 成员,不知道是不是和这个有点关系。
2006-11-25 13:46
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
谢谢楼上两位,我这就去看看win32结构化异常处理,相信对我有帮助
2006-11-25 14:11
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
5
中断向量处理后给了调试例程
2006-11-25 18:47
0
雪    币: 191
活跃值: (41)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
已经解决了就说一下解决办法三
2006-11-25 22:46
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
我问的是个概念问题,而不是操作性的问题,所以没有解决方法撒
2006-11-25 23:32
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
8
5楼的解释才是正路啊,不过简短得让不懂的人无法理解。昨天晚上在CVC论坛看到有人逆向分析了WINDBG和SOFTICE,才明白FORGOT的意思,楼主可以去看看

http://www.retcvc.com/cgi-bin/topic.cgi?forum=17&topic=1192&show=0

以R3的思维去看R0的东西似乎永远都不会有结果,还是努力学学R0的吧
2006-11-26 12:58
0
游客
登录 | 注册 方可回帖
返回
//