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拦截被破解也就是说消息钩子反拦截没有成功.
分享到:
相关推荐
消息钩子在Windows编程中有着非常广泛的应用,它可以任意拦截Windows系统,这个以消息为驱动的系统中的绝大多数消息类型。一方面这给编程者带来了巨大的灵活性,另一方面也埋下了巨大隐患,大多数窃密软件都使用这种...
用于抓取用户输入的键盘消息,已封装好类。无反钩子功能
Secure-Desktop, 反键盘记录器/抗干扰技术在 Windows 中的应用 安全桌面安全桌面是 Windows 在安全区域打开程序的工具,它的中的控制台和远程管理工具无法访问。通过设置一个 /Windows 钩子来工作,它告诉 Windows ...
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。 要注入此库,请尝试使用ColdMDLoader。 ColdHide ColdHide是适用于Windows的小型,简单的开源用户模式反反调试库x86 / x64。 要注入此库,...
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...
19.4 反注入技术 372 19.4.1 实例:使用调试钩子屏蔽全局钩子 372 19.4.2 实例:检测注入模块 374 19.4.3 实例:使用DLL_THREAD_ATTACH阻止远程线程 377 19.4.4 实例:使用挂钩LoadLibraryExW屏蔽全局钩子 379 ...
当用户移动鼠标或按下键盘键时,Windows调用其中的一个钩子并且钩子函数开始记录时间: LRESULT CALLBACK MyMouseHook(int code,WPARAM wp,LPARAM lp) { if (code==HC_ACTION) { // note the tick count g_...
bank_mitigations 防键盘记录器,防屏幕记录器...使用钩子进行保护的策略。 您可以将沙盒与恶意软件一起使用,请在以下位置阅读演示文稿: 视频PoC第1部分-阻止键盘记录程序: ...视频PoC第2部分-阻止屏幕记录器:
V1.5使用的钩子与V1.1不同, 提高了切入VFP程序的成功率,但缺点是无法判断出VFP程序的主文件,所以FileList.TXT中没有MainFile一项,另外对系统资源(主要是CPU)的占用率也有所增大。 3.V1.5比V1.1增加了一个...
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 Premium是一款专业的反键盘记录软件,可以保护你的输入安全。可以加密所有进程或指定进程的击键,让任意进程都无法获取键盘的键入。受限程序,受限程序功能允许您自定义一份运行于低权限级别的应用程序...
与 Dex2Jar 集成的 Android APK。 通过 EZ-Injection 安全地启动 Java 应用程序并插入钩子。 使用 Malicious Code Scanner 插件扫描恶意代码。 导出为 DEX、Jar、Class、Zip 或 Java 源文件。 打开 Android APK、...
2.超越冰刃的反隐藏和反删除能力,使隐藏进程无所遁形。3.强力文件删除能力并且可以阻止被删除文件再生。 XueTr具体功能介绍: 1.进程、线程、进程模块、进程窗口信息查看,杀进程、杀线程、卸载模块等功能 2.内核...
第二十四课 WINDOWS钩子函数 第二十五课:位图初步 第二十七课 工具提示控件 第二十八课 Win32调试API 第一部分 第二十六课 启动画面 第二十九课 Win32调试API 第二部分 第三十课 Win32调试API 第三部分 第三...
消息钩子:枚举系统中所注册的消息钩子(通过SetWindowsHookEx等),若钩子函数在exe模块中则是实际的地址,若在dll模块中则是相对于dll基址的偏移,具体请自行判断吧(一般地址值小于0x400000的就是全局钩子)。...
这意味着议程还将不包括注册矢量化异常处理程序和结构化异常处理程序,而是从KiUserExceptionDispatcher中的钩子手动制作我们自己的异常处理程序,该异常处理程序可以优雅地丢弃与调试器无关的异常,并将它们...
第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 获取...
它是功能最强大的Windows系统信息分析查看及维护工具,同时也是强大的手工杀毒利刃,用它可以查看各类系统信息,例如:进程管理、驱动模块、内核钩子、网络管理,注册表、文件管理、启动项等,通过这些系统信息揪出...