首页
社区
课程
招聘
[求助]请问OD调试失效!
发表于: 2008-2-19 23:17 6659

[求助]请问OD调试失效!

2008-2-19 23:17
6659
今天尝试调试某程序,遇到了一个很难理解的情况,请指点迷津。过程如下:
程序正常运行,OD无法附加调试。
这个程序使用AdjustTokenPrivileges提升DEBUG与LoadDriver特权,并在提权后验证提权。这样导致程序运行后OD无法附加。
解决方法:在LoadLibrayA下断,加载AdvAPI32后修改AdjustTokenPrivileges的代码,直接retn 18。在最后一次程序经过AdjustTokenPrivileges时返回,修改函数返回值eax=1。解决了程序提权与验证提权成功的问题。
这个程序必须用参数启动,但是得知参数为非打印字符。所以解决方法是,在GetCommandLineA下断,直接修改内存,把参数填进去。
程序成功在OD下被运行起来,界面与所有功能都与正常情况下无异。
问题是:程序成功运行后,OD就再也无法取得这个进程的相关信息了,CPU窗口全空白。数据区全空白,模块全空白,线程全空白。
我试着OD暂停,结果界面是暂停了,但暂停下来光看见高位的地址信息,代码一个看不见。
请问,这是什么情况,真是奇怪。试了多次,均是如此。反正是无法调试了。。。
请高手指点我迷津。谢谢!!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 66
活跃值: (15)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
2
先搞定读取程序内存
2008-2-20 11:13
0
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
3
??“先搞定读取程序内存”??不明白。
一开始是能读取的啊,用OD加载的。否则我也无法在那些地方下断,修改内存了。就是在程序完全跑起来之后,所有的东西全空了。
2008-2-20 12:07
0
雪    币: 66
活跃值: (15)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
4
程序跑起来以后让od不能读取他的内存, 所以od显示的都是空的
2008-2-20 14:34
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
5
ThreadHideFromDebugger
2008-2-20 17:24
0
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
6
ZwSetInformationThread与ZwSetInformationProcess要怎么过?
搜索了一下论坛,有贴子说:“ZwSetInformationThread(GetCurrentThread( ), ThreadHideFromDebugger, NULL, 0))
是不是这个?要过它太简单了

入口代码用patch过的od就可以断下来,那也太简单了。。”

我直接下断retn 10好像不行,仍然全空白。这两个函数在进程中被调用>3次。请高手指教。
2008-2-21 11:20
0
雪    币: 4802
活跃值: (3797)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
7
你搜的是啥关键字。看这个吧

(4) NtSetInformationThread
ntdll!NtSetInformationThread is a wrapper around the
ZwSetInformationThread syscall. Its prototype is the following:
NTSYSAPI NTSTATUS NTAPI NtSetInformationThread(
IN HANDLE ThreadHandle,
IN THREAD_INFORMATION_CLASS ThreadInformationClass,
IN PVOID ThreadInformation,
IN ULONG ThreadInformationLength
);

When called with ThreadInformationClass set to 0x11
(ThreadHideFromDebugger constant), the thread will be detached from
the debugger.

Similarly to ZwQueryInformationProcess, circumventing this anti-debug
requires either modifying ZwSetInformationThread parameters before
it's called, or hooking the syscall directly with the use of a kernel
driver.

Example:
push 0
push 0
push 11h ;ThreadHideFromDebugger
push -2
call NtSetInformationThread
;thread detached if debugged
;...
2008-3-3 15:37
0
游客
登录 | 注册 方可回帖
返回
//