自实现API, 过所有用户层HOOK

来源:互联网 发布:GTA5无法连接网络 编辑:程序博客网 时间:2024/04/28 11:44
本文转载自:http://blog.csdn.net/u012410612/article/details/17174155
//绕过用户层HOOK,自实现API函数  //学习了郁金香驱动教学视频 043_绕过所有用户层HOOK(郁金香绕过的是FindWindow)  //用相同的原理我实现了绕过SendMessageA()  //实现过程中有一些感想一并记录  //win xp x86  //__declspec(naked)作用: 生成纯汇编  #include <windows.h>  #include <stdio.h>    //7C92E4F0 >  8BD4             mov edx,esp  //7C92E4F2    0F34             sysenter  //7C92E4F4 >  C3               retn  __declspec(naked) void sysFastCall()  {      _asm      {          mov edx,esp;    //到达这里时会有堆栈顶是两个返回地址,然后才是参数,貌似每个api都是                          //所以定义sysFastCall和SendMyMessageA来模拟堆栈          __emit 0x0f;    //sysenter硬编码          __emit 0x34;      }  }    //_stdcall 规定参数从右往左依次压栈  __declspec (naked) LRESULT __stdcall SendMyMessageA(HWND h, UINT Msg, WPARAM wParam, LPARAM lParam)  {      _asm      {          mov eax,0x11cc;     //内核函数功能号          call sysFastCall;          retn 0x1c;          //这个必须和API对应相同,也就是说传入内核的参数必须一样,                              //内核会严格检验参数个数与有效性      }  }    int main(void)  {      HWND h = FindWindowA(NULL, "计算器");      _asm{          push 0x01;          //这三个是API调用过程中传入的固定数字          push 0x2b0;         //不用WM_CLOSE,用WM_DESTROY也是一样的,所以应该都是一样的吧。。没有每个测试          push 0;             //刚好和压入参数个数组成7个参数(retn 0x1c)      }      SendMyMessageA(h, WM_CLOSE, NULL, NULL);      return 0;  }  


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 狗重度中暑昏迷怎么办 孩子中暑了呕吐怎么办 一岁宝宝中暑怎么办 骑摩托车下雨了怎么办 棉袄脏了不想洗怎么办 棉袄袖口特别脏怎么办 没有扣眼的腰带怎么办 消防部队改革士兵怎么办 84洗衣服手剥皮怎么办 羊毛裤水洗了怎么办 小公司开支亏损怎么办 带上耳塞后耳鸣怎么办 鞋子拉链磨脚怎么办 科目三系统误判怎么办 遇到障碍物老熄火怎么办 高速上遇到动物怎么办 高速上有障碍物怎么办 雨刮器工作遇到障碍物怎么办 高速路上遇到障碍物怎么办 开车撞到柱子怎么办 喝酒撞了护栏怎么办 漏电保护器过载怎么办 不停有国外电话怎么办 身体铅含量高怎么办 洗衣机买大了怎么办 三角插头坏了怎么办 移动硬盘读不出来怎么办 高压线断落地面怎么办 水冷螺杆机制热怎么办 施工升降机突然停电怎么办 高压锅煮饭响了怎么办 美的高压锅漏气怎么办 电压力锅盖漏气怎么办 电饭锅焦粘锅底怎么办 电饭锅煮焦了怎么办 九阳压力锅漏气怎么办 高压锅排气阀漏气怎么办 电锅漏电麻手怎么办 美的pss5032漏气怎么办 九阳电饭煲坏了怎么办 电饭煲外壳坏了怎么办