能力值:
( LV2,RANK:10 )
2 楼
不错 可以绕过IDT了
能力值:
( LV4,RANK:50 )
3 楼
LZ不要异想天开了
不过VT虚拟化指令监控可以拦截任何指令,包括int 3
能力值:
( LV4,RANK:50 )
4 楼
另外,LZ的代码纯粹是Ring0层的int 3而不是Ring3层的
所以ss和cs不需要push
能力值:
( LV2,RANK:10 )
5 楼
不错,算是绕过了int3
能力值:
( LV2,RANK:10 )
6 楼
LZ的思路不错。。。。。赞一个
能力值:
( LV2,RANK:10 )
7 楼
楼主写得很详细,非常不错的思路
能力值:
( LV6,RANK:80 )
8 楼
吓死我了,我还以为是ring3的int3
能力值:
( LV6,RANK:80 )
9 楼
iret指令本身就有恢复堆栈的功能吧。不知道Add Esp在这里起到什么作用。
能力值:
( LV2,RANK:10 )
10 楼
是不是因为声明的函数是纯汇编的?编译器没有生成那些调整堆栈的代码 要自己来调整吧
能力值:
( LV7,RANK:100 )
11 楼
这个问题我也很纳闷,但是如果不加这句指令,栈有错乱,所以加上只是为了让程序正确,至于在KiTrap03例程中,是什么地方把这个几个字节拿去了就不知道了,
能力值:
( LV7,RANK:100 )
12 楼
SS可以忽略,但是去掉 push CS 程序段下来后会出错,环境有问题,
能力值:
( LV2,RANK:10 )
13 楼
_declspec( naked ) void interrupt3( void )
{
__asm{
//iretd //return
cmp [DebuggedProcessID],0 //there's currently no debugging gong on so quit
je Original
PUSHAD //32
push ds //4
push es //4
push gs //4
push fs //4
mov ax,0x23
mov ds,ax
mov es,ax
mov gs,ax
mov ax,0x30
mov fs,ax
mov eax,esp
add eax,48
push eax //the location of the original stack
PUSH 3 //int 3 identifier
CALL GeneralHandler //call my regular int handler
cmp eax,1 //if 1 then do no handle the original handler
je Exit
pop fs
pop gs
pop es
pop ds
POPAD
Original:
JMP [Int3Address]
Exit:
pop fs
pop gs
pop es
pop ds
POPAD
IRETD
};
}
能力值:
( LV4,RANK:50 )
14 楼
那要改CPU的MicroCode,即微码
据说指令译码器这东西,不过太底层了,几乎没有这方面的资料
能力值:
( LV2,RANK:10 )
15 楼
mark.
能力值:
( LV6,RANK:80 )
16 楼
以前就看到某人说自己能hook MicroCode,当时吓尿了
能力值:
( LV4,RANK:50 )
17 楼
MicroCode从BIOS加载到CPU,要hook也得从BIOS下手
系统引导阶段不是那么容易控制的,看看国外论坛应该有,再对照CPU手册
能力值:
( LV2,RANK:10 )
18 楼
mark.
能力值:
( LV7,RANK:110 )
19 楼
楼主把pushf换成pushfd,就不用push esp 也不用add esp,2了。
能力值:
( LV4,RANK:50 )
20 楼
只能膜拜。。。