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

原创 2012年02月11日 00:24:16
 

在学习内核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
       
     }
}

Push, Pop, call, leave 和 Ret 指令图解

帧栈结构图:最近在研究如何在程序crash定位出错函数,补充的计算机系统基础知识。此篇主要是介绍IA32中帧栈结构(frame stack)....
  • striver1205
  • striver1205
  • 2014年05月14日 14:32
  • 21423

C++ 用户层下的用Push+Ret API HOOK

说道API HOOK ,这已经是老掉牙的技术了,但是它的实用性却是不能忽视的。虽然在网上这类的文章很多,但大多数的实现方法是将一个函数的前5字节直接改为 jmp XXXX 。这种方法虽然简单可行,但是...
  • clubthree
  • clubthree
  • 2015年03月19日 18:33
  • 361

控制git push的用户的合法性

由于公司机器比较多,有时候团队用GIT开发的时候,比较随意,随便一台机器上就check,随便设置一个用户,更改之后就提交,搞的提交的记录没有任何可参考性。 而git正常情况没法去检查用户的合法性,gi...
  • osala
  • osala
  • 2015年01月13日 16:37
  • 648

hook模板x86/x64通用版(2)--中转函数的shellcode编写

这个模板的思路是这样的: 1.破坏原地址的指令(至少5字节,此处如果含有跳转会报失败),写一个跳转,被破坏的指令迁移到别的地方; 2.跳转到中转函数,中转函数中会调用用户定义的功能函数; 3.执行原地...
  • yes2
  • yes2
  • 2016年01月27日 22:00
  • 659

HOOK api ret address

 include 'win32ax.inc' use32 entry start section '.text' code readable executable start: inv...
  • qq_18942885
  • qq_18942885
  • 2015年04月27日 16:08
  • 296

iOS从当前隐藏导航界面push到下一个显示导航界面出现闪一下的问题

如果有朋友遇到从当前隐藏导航界面push到下一个显示导航界面出现闪一下的问题, 下面是我写的一种方案,也就是在load...
  • woaifen3344
  • woaifen3344
  • 2014年11月19日 16:57
  • 13662

微软100题40题-设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)。

/** * File:Test_40.java * Title: * Description: 40.百度研发笔试题(栈、算法) 引用自:zp155334877 1)设计一个栈结构,满足一下...
  • hxpjava1
  • hxpjava1
  • 2015年07月09日 13:52
  • 993

iOS在pushViewController的过程中闪动,卡顿

造成的原因: 1.跳转的控制器在主线程做了过多了消耗动作。 2.跳转的控制器透明度和颜色是空, 给人的一种重叠的视觉效果 决解办法: 1.耗时操作放到异步线程 2.跳转时设置下跳转控制器的背景色 ...
  • sdsd13212
  • sdsd13212
  • 2016年10月22日 15:50
  • 757

关于ios push转场的时候一级界面一些控件会有短暂停留的问题

今天遇到一个问题,这里记录一下,问题描述如标题。一级页面如下图所示: 二级页面如下图所示: 跳转过去以后,下面的按钮会有一个短暂的停留,然后才会消失。后面发现是因为设置self.view的默认位置...
  • u010101051
  • u010101051
  • 2017年08月01日 19:24
  • 254

一周随记

来到UCL,正式开课第二周了吧,交换生活已经过去了不少了。随便说说这周吧。 前几天想起了自己买的那个域名,然后才想起来自己自从买了就没了下文,我也不知道要怎么办了。今天试了下,万网的域名解析,要是直接...
  • t9410
  • t9410
  • 2015年10月17日 07:25
  • 237
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个关于push ret HOOK的问题随记一下。
举报原因:
原因补充:

(最多只允许输入30个字)