一个关于push ret HOOK的问题随记一下。

 

在学习内核HOOK的问题,发现自已的基础就是XX,记录一下!

曾经的问题:

//加入pushad 及popad 这样会不会影响到JMP地址各个寄存器,
//因为以上代码和JMP到的地址代码为同一个函数。会吗?
//以上汇编代码处理后蓝屏,应该是堆栈不平问题。
问题:如何保证破坏后堆栈平衡?

 

//正常
lkd> u ObCheckObjectAccess l10
nt!ObCheckObjectAccess:
805c119c 8bff            mov     edi,edi
805c119e 55              push    ebp
805c119f 8bec            mov     ebp,esp
805c11a1 83ec10          sub     esp,10h
805c11a4 8b4508          mov     eax,dword ptr [ebp+8]
805c11a7 56              push    esi
805c11a8 57              push    edi
805c11a9 ff7514          push    dword ptr [ebp+14h]
805c11ac 8b78f0          mov     edi,dword ptr [eax-10h]
805c11af 8d4df0          lea     ecx,[ebp-10h]
805c11b2 51              push    ecx
805c11b3 8d4dfc          lea     ecx,[ebp-4]
805c11b6 33f6            xor     esi,esi
805c11b8 51              push    ecx
805c11b9 50              push    eax
805c11ba 8975f4          mov     dword ptr [ebp-0Ch],esi

//HOOK后
push    0AB248D18h       //我修改此地址进入我的函数后,直接JMP 805c11a9 以达到目地。
RET
in      al,dx
adc     byte ptr [ebx+57560845h],cl
805c11a9 push    dword ptr [ebp+14h]
805c11ac mov     edi,dword ptr [eax-10h]
805c11af lea     ecx,[ebp-10h]
805c11b2  push    ecx



__declspec(naked) void myhook()
{
__asm
{
 //模拟ObCheckObjectAccess函数头如下
 pushad
 mov     edi,edi
 push    ebp
 mov     ebp,esp
 sub     esp,10h
 mov     eax,dword ptr [ebp+8]
 push    esi
 push    edi
 popad
 //跳转到JMP 805c11a9 
 mov ebx,ObCheckObjectAccess
       add ebx,0xd
 jmp ebx
       
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值