|
[求助]通过INLINEHOOK恢复IDT表导致蓝屏(现在能写了不过本世纪最奇怪的就是这个代码了)
呵呵,你还在呀,太谢谢你了,我先回复了,再慢慢消化 |
|
[求助]通过INLINEHOOK恢复IDT表导致蓝屏(现在能写了不过本世纪最奇怪的就是这个代码了)
我想不明白为什么要HOOK KeDelayXXX和KeWaitFor 这些函数都是延时的函数,难道是让他无限时的等待下去? 哈哈,本人太菜了,想不明白先不去想了。 CVCVXK大大说注册一个DPC,就会获得LIST_ENTRY链表, 我用WINDBG看了下 KeInitializeDpc的代码 nt!KeInitializeDpc: 804e6a12 8bff mov edi,edi 804e6a14 55 push ebp 804e6a15 8bec mov ebp,esp 804e6a17 8b4508 mov eax,[ebp+0x8]//DPC地址 804e6a1a 8b4d0c mov ecx,[ebp+0xc]//DeferredRoutine参数 804e6a1d 83601c00 and dword ptr [eax+0x1c],0x0//Dpc->Lock &0x0 804e6a21 89480c mov [eax+0xc],ecx 804e6a24 8b4d10 mov ecx,[ebp+0x10] 804e6a27 66c7001300 mov word ptr [eax],0x13 804e6a2c c6400200 mov byte ptr [eax+0x2],0x0 804e6a30 c6400301 mov byte ptr [eax+0x3],0x1 804e6a34 894810 mov [eax+0x10],ecx 804e6a37 5d pop ebp 804e6a38 c20c00 ret 0xc lkd> dt _KDPC +0x000 Type : Int2B +0x002 Number : UChar +0x003 Importance : UChar +0x004 DpcListEntry : _LIST_ENTRY +0x00c DeferredRoutine : Ptr32 +0x010 DeferredContext : Ptr32 Void +0x014 SystemArgument1 : Ptr32 Void +0x018 SystemArgument2 : Ptr32 Void +0x01c Lock : Ptr32 Uint4B 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 那KeInitializeDpc函数的C源码就是 NTKERNELAPI VOID KeInitializeDpc ( IN PRKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext ) { Dpc->Lock &= 0; Dpc->DeferredRoutine= DeferredRoutine; Dpc->DeferredContext = DeferredContext; Dpc->Type = 0x13; Dpc->Number = 0x0; Dpc->Importance = 0x1; } 短短的代码,怎么获得DPC的链表。。。。 |
|
[求助]通过INLINEHOOK恢复IDT表导致蓝屏(现在能写了不过本世纪最奇怪的就是这个代码了)
cvcvxk,我HOOK的线程我根本没有给他启动,他怎么能注册DPC呢,我想应该是驱动加载时候注册的(我还不确定他是DPC定时检测还是,IO定时检测) 还有我现在HOOK了那个XX驱动创建的线程,根据判断是不是他驱动加载的地址,再加上前面YAS获得的2个线程,现在发现一共成功HOOK了3个线程, 还有就是我HOOK了线程后,就算不修改INT1,INT3计算机1分钟后还是会重启! 最后谢谢CVCVXK提供的方法,虽然还是不知云里雾里,但是给我路子! |
|
[求助]通过INLINEHOOK恢复IDT表导致蓝屏(现在能写了不过本世纪最奇怪的就是这个代码了)
通过YAS看见两个可以的ETHREAD,我HOOK了这两个线程,然后再修改INT1,INT3,这回好点了,居然不蓝,抽根烟.....2分钟左右,自动重启。 郁闷。。。。心情从天上坠落地狱。 看来还有线程检测,是否修改了INT1,INT3。或者是定时器 但是问题有出来了,YAS检测出的线程地址不是游戏保护的地址,如果检测驱动内的地址可以办到,如果检测的线程不是驱动内的地址,那有应该如何检测? 另一个问题: 如果是定时器检测,分为I0定时器,DPC定时器,那又当如何检测? |
|
[求助]通过INLINEHOOK恢复IDT表导致蓝屏(现在能写了不过本世纪最奇怪的就是这个代码了)
我怎么知道是哪个线程控制它呢? |
|
[求助]通过INLINEHOOK恢复IDT表导致蓝屏(现在能写了不过本世纪最奇怪的就是这个代码了)
我先前保存了INT1原来的地址,和INT3原来的地址,然后再它修改后的函数头JMP回原来的函数,证明会HOOK同一个Routine呢,本人很菜,请大牛说详细点。 |
|
[求助]通过INLINEHOOK恢复IDT表导致蓝屏(现在能写了不过本世纪最奇怪的就是这个代码了)
谢谢,cvcvxk 和 vfer 的指导 接下来,我就只改了INT1和INT3中的函数 因为那驱动改了这两个IDT处理函数, 然后我发现了,如果我只改一个就正常,如果是改两个就蓝了,到底是什么原因呢? |
|
[求助]通过INLINEHOOK恢复IDT表导致蓝屏(现在能写了不过本世纪最奇怪的就是这个代码了)
实时证明是这样的,比如说 A,B两个中断历程我只修改了一个,那么没有问题,如果修改了两个就会蓝屏!郁闷ING |
|
[原创]软件保护壳专题 - 代码乱序引擎的构建
玩命的,果然强大! |
|
[求助]通过INLINEHOOK恢复IDT表导致蓝屏(现在能写了不过本世纪最奇怪的就是这个代码了)
能写了,不过这代码和上面蓝屏的代码没有差别,我也看不出差别,哈哈,奇怪的事年年有,这个特别奇怪! 看这个能写成功的代码! void TestWriteIdt() { unsigned long count; IDT_INFO idt_info; IDT_ENTRY *idt_entries; unsigned long ul_Fution; unsigned long addr=0x804e089d; IDT_ENTRY *i; __asm sidt idt_info //取得idt_info中的函数地址 idt_entries = (IDT_ENTRY*)MAKELONG(idt_info.IdtLow,idt_info.IdtHigh); i = &idt_entries[0x03]; ul_Fution=MAKELONG(i->LowOffset,i->HiOffset); _asm { push eax CLI //dissable interrupt MOV EAX, CR0 //move CR0 register into EAX AND EAX, 0FFFEFFFFh //disable WP bit MOV CR0, EAX //write register back pop eax } addr = addr - ul_Fution - 5; *( (char *)(&((unsigned char *)ul_Fution)[0]) )=0xe9; *( (unsigned long *)(&((unsigned char *)ul_Fution)[1]) ) = addr; _asm { push eax MOV EAX, CR0 //move CR0 register into EAX OR eax,10000H //enable WP bit MOV CR0, EAX //write register back pop eax STI //enable interrupt } DbgPrint("writed %08x sucessful!\n",ul_Fution); } |
|
|
|
|
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值