- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
在学习内核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
-
- }
- }
复制代码 |
|