能力值:
( LV2,RANK:10 )
|
-
-
2 楼
我的天啊...
|
能力值:
( LV5,RANK:70 )
|
-
-
3 楼
push 804DB4C0 //原始NtOpenProcess开头7字节
PUSH XXXXX 跳回去的地址
ret;
|
能力值:
( LV9,RANK:370 )
|
-
-
4 楼
没有平衡堆栈吧
|
能力值:
( LV9,RANK:370 )
|
-
-
5 楼
【引用楼主】这个是hook代码,hook后的头7字节变为call+nop+nop,我已经代码删成这么短了
push C4
push 804DB4C0 //原始NtOpenProcess开头7字节
这2句是10个字节。
替换成 call+nop+nop ,7个字节。
|
能力值:
( LV4,RANK:40 )
|
-
-
6 楼
天大的糊涂啊,记得用户层下NT开头的push共占7字节,就以为R0的也是
我用push eax+5改好了,奇怪的是为什么只改7字节也不会bsod呢
|
能力值:
( LV9,RANK:370 )
|
-
-
7 楼
push 语句占多少字节,是看操作数大小来确定的。2个字节,或5个字节。
push eax+5(这时的eax是你HookCall的返回地址,HookCall本身5个字节,你又+5,恰好10个字节,指令对齐。)
|
能力值:
( LV4,RANK:40 )
|
-
-
8 楼
push 34 //2字节,0x34h=52d,刚开始以为这个和push 0C4h长度相等
push 0C4h //5字节,0xC4h=196d,这里都没超出字节范围,为什么就用到了4字节呢
|
能力值:
( LV4,RANK:40 )
|
-
-
9 楼
void _declspec (naked) MyOpenProcess(){
_asm{
pop ecx
mov eax,[esp+8]
cmp eax,1 //我这个新手对二进制的比较命令不熟,还是用cmp吧
jz pass
mov eax,[esp+0x10]
test eax,eax
jz pass
mov eax,[eax]
cmp eax,MyProtecProcess //这里有其他更好的方法进行比较吗?cmp效率不高
jnz pass
push [esp]
mov eax,0xC0000030
ret 4*5;
pass:
push 0C4h;
push 0804DB4C0h; //懒了点这里写死了,如果原来已经被hook了就比较难处理
add ecx,5
push ecx;
ret;
}
}
我把弄好的代码发上来,一是让各位指导改进;二是与其他同级一起学习,毕竟jmp hook的例程多,call hook较少。
另外这样是否需要防止该函数调用时被hook引发异常呢,又该如何处理
|
|
|