能力值:
( LV3,RANK:20 )
|
-
-
2 楼
的确没平衡。。。代码后面加pop
|
能力值:
( LV6,RANK:90 )
|
-
-
3 楼
当然平衡了。
_declspec (naked)
mov edi,edi
push ebp
mov ebp,esp
这里的指令是原函数的开始5个字节的指令。
mov eax,ObReferenceObjectByHandle
add eax,5
jmp eax
这里可能改为
push ObReferenceObjectByHandle
ADD DWORD PTR SS:[ESP],5
retn
会好一点。
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
这个是ObReferenceObjectByHandle被替换的字节 由ObReferenceObjectByHandle函数自己去平衡 你没看后面是jmp过去的
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
to三楼的朋友,
你说平衡的主要原因是那个_declspec (naked)吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
4 楼的朋友,我不明白的是:ObReferenceObjectByHandle函数本身是平衡的,
但在函数体里有个push ebp,这样,在函数调用结束时pop,是不是少了一个?
但在人家竹君的程序,并没有蓝屏,说明是平衡的
但是,我不知道平衡的原因
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
自己调试,看堆栈,然后就知道结果了.一碰到问题就问人,那样学习效率很低的,尤其是自己能解决的问题.
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
ls的朋友,我的电脑用不了虚拟机
我电脑cpu 赛扬857,内存256m
调试不了啊
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
具体要看 ObReferenceObjectByHandle 这个函数前几条指令是什么了 如果前5个字节中有一条PUSH指令的话并且在ObReferenceObjectByHandle 这个函数体内堆栈本身是平衡的话,那么堆栈是平衡的!
没有仔细分析,不知道对不对。
|
能力值:
( LV9,RANK:610 )
|
-
-
10 楼
pop ebp在原始的ObReferenceObjectByHandle函数里。。。
楼主该升级下电脑了,虚拟机用不了,学驱动的路真的会很杯具~
而且,Inline Hook这东西,ring3和ring0根本没什么差别,楼主不如在ring3下练习好了,就算出错也最多是程序挂掉,不会蓝屏~~
|
能力值:
(RANK:170 )
|
-
-
11 楼
13: __declspec( naked ) void _stdcall PushDW( unsigned int nVal )
14: {
00401050 ret
15: __asm
16: {
17: ret
18: }
19: }
lkd> u ObReferenceObjectByHandle
nt!ObReferenceObjectByHandle:
805bc482 8bff mov edi,edi
805bc484 55 push ebp
805bc485 8bec mov ebp,esp
805bc487 51 push ecx
看完上面两个应该知道为什么了吧
大概是跳过ObReferenceObjectByHandle前5个字节hook,自己实现了前五个字节call ObReferenceObjectByHandle
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
楼上,和楼上的楼上,谢谢啦
我明白了,原来pop在后面。
再次感谢以上各位
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
同感,跟他说过了一次了。。。
建议LZ先学习下原理,别一直抄代码。
|
|
|