`
mmdev
  • 浏览: 12921247 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Windows 反消息钩子(2)

 
阅读更多
Windows消息钩子一般都很熟悉了。它的用处很多,耳熟能详的就有——利用键盘钩子获取目标进程的键盘输入,从而获得各类密码以达到不可告人的目的。朋友想让他的软件不被别人的全局钩子监视,有没有办法实现呢?答案是肯定的,不过缺陷也是有的。

一、全局钩子如何注入别的进程

消息钩子是由Win32子系统提供,其核心部分通过NtUserSetWindowsHookEx为用户提供了设置消息钩子的系统服务,用户通过它注册全局钩子。当系统获取某些事件,比如用户按键,键盘driver将扫描码等传入win32k的KeyEvent处理函数,处理函数判断有无相应hook,有则callhook。此时,系统取得Hook对象信息,若目标进程没有装载对应的Dll,则装载之(利用KeUserModeCallback“调用”用户例程,它与Apc调用不同,它是仿制中断返回环境,其调用是“立即”性质的)。
进入用户态的KiUserCallbackDispatcher后,KiUserCallbackDispatcher根据传递的数据获取所需调用的函数、参数等,随后调用。针对上面的例子,为装载hook dll,得到调用的是LoadLibraryExW,随后进入LdrLoadDll,装载完毕后返回,后面的步骤就不叙述了。

从上面的讨论我们可以得出一个最简单的防侵入方案:在加载hook dll之前hook相应api使得加载失败,不过有一个缺陷:系统并不会因为一次的失败而放弃,每次有消息产生欲call hook时系统都会试图在你的进程加载dll,这对于性能有些微影响,不过应该感觉不到。剩下一个问题就是不是所有的LoadLibraryExW都应拦截,这个容易解决,比如判断返回地址。下面给出一个例子片断,可以添加一些判断使得某些允许加载的hook dll被加载。

这里hook api使用了微软的detours库,可自行修改。


以下内容为程序代码
:
  typedef   HMODULE   (__stdcall   *LOADLIB)(  
          LPCWSTR   lpwLibFileName,  
          HANDLE   hFile,  
          DWORD   dwFlags);  
   
  extern   "C"   {  
                  DETOUR_TRAMPOLINE(HMODULE   __stdcall   Real_LoadLibraryExW(  
                                                                                                                    LPCWSTR   lpwLibFileName,  
                                                                                                                    HANDLE   hFile,  
                                                                                                                    DWORD   dwFlags),  
                                                                                                                  LoadLibraryExW);  
  }  
   
  ULONG   user32   =   0;  
   
  HMODULE   __stdcall   Mine_LoadLibraryExW(  
                                                      LPCWSTR   lpwLibFileName,  
                                                      HANDLE   hFile,  
                                                      DWORD   dwFlags)  
  {  
                  ULONG   addr;  
   
                  _asm   mov   eax,   [ebp+4]  
                  _asm   mov   addr,   eax  
   
                  if   ((user32   &   0xFFFF0000)   ==   (addr   &   0xFFFF0000))  
                  {  
                                  return   0;  
                  }  
   
                  HMODULE   res   =   (LOADLIB(Real_LoadLibraryExW))   (  
                                                                                                  lpwLibFileName,  
                                                                                                  hFile,  
                                                                                                  dwFlags);  
   
                  return   res;  
  }  
   
  BOOL   ProcessAttach()  
  {  
                  DetourFunctionWithTrampoline((PBYTE)Real_LoadLibraryExW,  
                                                                    (PBYTE)Mine_LoadLibraryExW);  
                  return   TRUE;  
  }  
   
  BOOL   ProcessDetach()  
  {  
                  DetourRemove((PBYTE)Real_LoadLibraryExW,  
                                                                      (PBYTE)Mine_LoadLibraryExW);  
                  return   TRUE;  
  }  
   
  CAnti_HookApp::CAnti_HookApp()     //在使用用户界面服务前调用ProcessAttach  
  {  
                  user32   =   (ULONG)GetModuleHandle("User32.dll");  
                  ProcessAttach();  
  }   

WINDOWS核心编程里的用IAT的APIHOOK是不全面的。

 ::GetProcAddress(::GetModuleHandle("kernel32.dll"),   "SetWindowsHookA");   
就可以绕过。
APIHOOK最好的方法还是直接修改API入口点的代码。

同时HOOK GetProcAddress 不就行了,但是要是对方使用搜索PE函数导出表的话就没用

防止IAT型的钩子我要是对PE文件的IAT加密,调用时解密调用,就可以了吧(极其复杂)
防止jmp型的钩子我没想到好办法

防止调试我可以判断api入口处是否有int3中断代码就可以了吧(简单)

消息钩子的反拦截其实核心是利用API拦截,来取消钩子拦截.
如果API拦截被破解也就是说消息钩子反拦截没有成功.



分享到:
评论

相关推荐

    ff.rar_钩子_钩子 消息

    消息钩子在Windows编程中有着非常广泛的应用,它可以任意拦截Windows系统,这个以消息为驱动的系统中的绝大多数消息类型。一方面这给编程者带来了巨大的灵活性,另一方面也埋下了巨大隐患,大多数窃密软件都使用这种...

    键盘钩子-windows消息机制-抓取用户按下的每一个按键

    用于抓取用户输入的键盘消息,已封装好类。无反钩子功能

    Secure-Desktop, 反键盘记录器/抗干扰技术在 Windows 中的应用.zip

    Secure-Desktop, 反键盘记录器/抗干扰技术在 Windows 中的应用 安全桌面安全桌面是 Windows 在安全区域打开程序的工具,它的中的控制台和远程管理工具无法访问。通过设置一个 /Windows 钩子来工作,它告诉 Windows ...

    Windows编程循序渐进.part2

    19.4 反注入技术 372 19.4.1 实例:使用调试钩子屏蔽全局钩子 372 19.4.2 实例:检测注入模块 374 19.4.3 实例:使用DLL_THREAD_ATTACH阻止远程线程 377 19.4.4 实例:使用挂钩LoadLibraryExW屏蔽全局钩子 379 ...

    ColdHide是适用于Windows的迷你,简单的开源用户模式反反调试库x86 / x64-C/C++开发

    ColdHide是适用于Windows的小型,简单的开源用户模式反反调试库x86 / x64。 要注入此库,请尝试使用ColdMDLoader。 ColdHide ColdHide是适用于Windows的小型,简单的开源用户模式反反调试库x86 / x64。 要注入此库,...

    Windows应用程序捆绑核心编程光盘代码

    9.5.2 替换Windows消息处理函数实现挂钩的实例 210 9.6 钩子DLL文件的装载 214 9.7 本章小结 216 参考文献 216 第10章 数据的编码和解码实例 217 10.1 引言 217 10.2 游程编码 218 10.2.1 CX游程压缩方法 218...

    Windows编程循序渐进.part3

    19.4 反注入技术 372 19.4.1 实例:使用调试钩子屏蔽全局钩子 372 19.4.2 实例:检测注入模块 374 19.4.3 实例:使用DLL_THREAD_ATTACH阻止远程线程 377 19.4.4 实例:使用挂钩LoadLibraryExW屏蔽全局钩子 379 ...

    windows编程资料大全

    当用户移动鼠标或按下键盘键时,Windows调用其中的一个钩子并且钩子函数开始记录时间: LRESULT CALLBACK MyMouseHook(int code,WPARAM wp,LPARAM lp) { if (code==HC_ACTION) { // note the tick count g_...

    bank_mitigations:反键盘记录器,反屏幕记录器...通过钩子进行保护或通过间谍软件检测来改善沙盒的策略...-演示

    bank_mitigations 防键盘记录器,防屏幕记录器...使用钩子进行保护的策略。 您可以将沙盒与恶意软件一起使用,请在以下位置阅读演示文稿: 视频PoC第1部分-阻止键盘记录程序: ...视频PoC第2部分-阻止屏幕记录器:

    VfpDecoder反编译软件

    V1.5使用的钩子与V1.1不同, 提高了切入VFP程序的成功率,但缺点是无法判断出VFP程序的主文件,所以FileList.TXT中没有MainFile一项,另外对系统资源(主要是CPU)的占用率也有所增大。 3.V1.5比V1.1增加了一个...

    精通MFC (光盘) 源代码

    7.11.3 安装和解除消息钩子 7.11.4 使用线程范围和钩子实例 7.11.5 使用全局钩子实例 7.12 小结 第8章 对话框 8.1 对话框的生存期 8.1.1 对话框的创建 8.1.2 对话框的初始化 8.1.3 对话框的消息处理 8.1.4...

    反键盘记录软件SpyShelter Premium9.7中文注册版.rar

    SpyShelter Premium是一款专业的反键盘记录软件,可以保护你的输入安全。可以加密所有进程或指定进程的击键,让任意进程都无法获取键盘的键入。受限程序,受限程序功能允许您自定义一份运行于低权限级别的应用程序...

    Bytecode Viewer:逆向工程套件(反编译器、编辑器、调试器等)-开源

    与 Dex2Jar 集成的 Android APK。 通过 EZ-Injection 安全地启动 Java 应用程序并插入钩子。 使用 Malicious Code Scanner 插件扫描恶意代码。 导出为 DEX、Jar、Class、Zip 或 Java 源文件。 打开 Android APK、...

    xuetr0.36——狙剑的手动杀毒利器

    2.超越冰刃的反隐藏和反删除能力,使隐藏进程无所遁形。3.强力文件删除能力并且可以阻止被删除文件再生。 XueTr具体功能介绍: 1.进程、线程、进程模块、进程窗口信息查看,杀进程、杀线程、卸载模块等功能 2.内核...

    软件破解入门教程.txt

    第二十四课 WINDOWS钩子函数 第二十五课:位图初步 第二十七课 工具提示控件 第二十八课 Win32调试API 第一部分 第二十六课 启动画面 第二十九课 Win32调试API 第二部分 第三十课 Win32调试API 第三部分 第三...

    冰刃 IceSword

    消息钩子:枚举系统中所注册的消息钩子(通过SetWindowsHookEx等),若钩子函数在exe模块中则是实际的地址,若在dll模块中则是相对于dll基址的偏移,具体请自行判断吧(一般地址值小于0x400000的就是全局钩子)。...

    RVDbg:RVDbg是Windows进程的debuggerexception处理程序,具有规避反调试技术的功能。 (正在以下文件中工作的更清洁,有记录的代码库:核心分支)

    这意味着议程还将​​不包括注册矢量化异常处理程序和结构化异常处理程序,而是从KiUserExceptionDispatcher中的钩子手动制作我们自己的异常处理程序,该异常处理程序可以优雅地丢弃与调试器无关的异常,并将它们...

    python灰帽子包含高清扫描和可复制两个版本.zip

     第2章 调试器原理和设计  2.1 通用寄存器  2.2 栈  2.3 调试事件  2.4 断点  2.4.1 软断点  2.4.2 硬件断点  2.4.3 内存断点  第3? 构建自己的Windows调试器  3.1 Debugee,敢问你在何处  3.2 获取...

    手工杀毒利器 系统维护 PC Hunter v1.5.4

    它是功能最强大的Windows系统信息分析查看及维护工具,同时也是强大的手工杀毒利刃,用它可以查看各类系统信息,例如:进程管理、驱动模块、内核钩子、网络管理,注册表、文件管理、启动项等,通过这些系统信息揪出...

Global site tag (gtag.js) - Google Analytics