一、 战场环境
[兵工场]:VC6.0
[兵器谱]: Detours Express 2.1、Windbg6.11、OllyDBG
二、 战术分析
Hook从字面上理解就是钩子的意思,当然这个钩子不是用来钓鱼的。它是用来挂钩程序用的,程序一但被挂钩就可以改变程序原有的流程。例如Hook之前的流程如下:
Hook后的流程如下:
拦截XX聊天信息的基本原理就是挂钩XX的聊天记录函数,使得我们可以中途处理聊天记录。
要改变程序的流程有很多汇编指令可以使用,常用的有两种:JMP、CALL
下面是用OllyDBG反汇编MessageBox得到的头部代码:
77D5050B > 8BFF MOV EDI,EDI
77D5050D /. 55 PUSH EBP
77D5050E |. 8BEC MOV EBP,ESP
这五个字节的指令是保护堆栈用的。我们要攻击的地方就是这5个字节。
Hook后那5个字节是怎么样的呢?在调试过程中发现Hook后OD不稳定,Hook的5个字节变成了下面的样子:
77D5050B >- E9 FA0A2B98 JMP HookDll.1000100A
77D50510 833D 1C04D777 0>CMP DWORD PTR DS:[77D7041C],0
77D50517 74 24 JE SHORT USER32.77D5053D
77D50519 64:A1 18000000 MOV EAX,DWORD PTR FS:[18]
跟进跳转看看做了什么……
一个很大的跳转,继续跟进跳转到下面,我们自己写的代码
100010C0 55 PUSH EBP
100010C1 8BEC MOV EBP,ESP
100010C3 83EC 44 SUB ESP,44
100010C6 53 PUSH EBX
100010C7 56 PUSH ESI
100010C8 57 PUSH EDI
100010C9 8D7D BC LEA EDI,DWORD PTR SS:[EBP-44]
100010CC B9 11000000 MOV ECX,11
100010D1 B8 CCCCCCCC MOV EAX,CCCCCCCC
100010D6 F3:AB REP STOS DWORD PTR ES:[EDI]
100010D8 8BF4 MOV ESI,ESP
100010DA 8B45 14 MOV EAX,DWORD PTR SS:[EBP+14]
100010DD 50 PUSH EAX
100010DE 68 30E00210 PUSH HookDll.1002E030
100010E3 68 1CE00210 PUSH HookDll.1002E01C
100010E8 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
100010EB 51 PUSH ECX
100010EC FF15 306C0310 CALL DWORD PTR DS:[10036C30]
100010F2 3BF4 CMP ESI,ESP
100010F4 E8 971D0000 CALL HookDll.10002E90
100010F9 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
100010FC 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
100010FF 5F POP EDI
10001100 5E POP ESI
10001101 5B POP EBX
10001102 83C4 44 ADD ESP,44
10001105 3BEC CMP EBP,ESP
10001107 E8 841D0000 CALL HookDll.10002E90
1000110C 8BE5 MOV ESP,EBP
1000110E 5D POP EBP
1000110F C2 1000 RETN 10
看到红色那句没?执行后后回到了原调用MessageBox后面的代码,也就是上面的代码段B
这里提下windbg调试器,掌握了它,windows的秘密再也就是秘密了
下面是对程序的分析结果:
看到没有加载了两个DLL,Hook要成功的一个重要前提是能够读写进程的内存,否则没办法写任何字节。通常的方法是写一个DLL注意的进程的空间。网上有一大堆这种DLL注入器,这里就不一一介绍了。
一、 实弹演练
我八成猜到看到这的人已经云里雾里了,放心微软放出了Detours Express 2.1(XX聊天拦截我没用这玩意,根据原理自己实现的)专门干这事的。由于我国有明确的法律规定,不能发行恶意代码,所以XX聊天记录拦截代码就不放出来了。下面以我写的一个Demo为例来介绍。DEMO的功能是通过加载HookDll.dll实例挂钩USER32.DLL里的MessageBox. HookDll里实现所有的挂钩操作。
1.加载DLL前,弹框内容如下:
2。加载DLL后,弹框内容如下:
MessageBox弹框内容已经被修改。
3.卸载DLL后,弹框内容如下:
下面讲解一下Detours Express 2.1库的使用:
Detours的几个核心API如下:
用到的几个API简要说明下:
DetourTransactionBegin: 开始一个新的detours事务。
DetourUpdateThread:一个线程入队等待更新
DetourAttach:将目标进程(MessageBox)和替换它的函数NEW_MessageBox绑定。第一个参数是一个指针,这个指针指向目标函数的指针(有点绕…)。
DetourTransactionCommit: 事务提交,如果不提交之前的更改是不会生效的。这个函数会返回一个值,如果是NO_ERROR 表明是成功,如果是其他的表示失败。
DetourDetach:解除目标进程和替换函数的绑定,参数和DetourDetach一摸一样。
下面是Hook代码:
VOID Hook()
{
DetourRestoreAfterWith();
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
//这里可以连续多次调用DetourAttach,表明HOOK多个函数
DetourAttach(&(PVOID&)TrueMessageBox,NEW_MessageBoxA);
DetourTransactionCommit();
OutputDebugString("Hook Success!\n");
}
原始函数MessageBoxA由windows.h声名了,直接用下面的方式使用
static int (WINAPI* TrueMessageBox)(HWND hWnd , LPCSTR lpText, LPCSTR lpCaption, UINT uType)=MessageBoxA;
我们定义的新MessageBoxA如下:
int WINAPI NEW_MessageBoxA(HWND hWnd,LPCWSTR lpText,LPCWSTR lpCaption,UINT uType)
{
//修改输入参数,调用原函数
int ret=TrueMessageBox(hWnd,"该函数已经被Hook","[测试]",uType);
return ret;
}
在完成了任务之后一定要把钩子摘掉:
VOID UnHook()
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
//这里可以连续多次调用DetourDetach,表明撤销多个函数HOOK
DetourDetach(&(PVOID&)TrueMessageBox,NEW_MessageBoxA);
DetourTransactionCommit();
OutputDebugString("UnHook Success!\n");
}
注意:我们如果要拦截非windows API的话,通常用下面两个函数实现原有函数地址的导出:
LoadLibrary()
GetProcAddress()
程序下载地址:
http://pan.baidu.com/netdisk/singlepublic?fid=434312_4232810461
http://blog.csdn.net/liujiayu2/article/details/50625337
相关推荐
apache-atlas-2.3.0-hbase-hook.tar.gz Apache Atlas 框架是一组可扩展的核心基础治理服务,使企业能够有效且高效地满足 Hadoop 内的合规性要求,并允许与整个企业数据生态系统集成。这将通过使用规范和取证模型、...
1. **解压文件**:首先,你需要将 "apache-atlas-hive-hook-2.1.0" 解压到一个合适的位置。 2. **配置 Atlas**:在 Atlas 的配置文件(如 `atlas-env.sh` 或 `atlas.conf`)中,添加 Hive Hook 的类路径和配置信息。...
在实际使用中,你需要解压 "apache-atlas-hive-hook-1.2.0" 压缩包,然后按照官方文档的指引进行安装和配置。这可能包括编译源代码、添加依赖、修改 Hive 配置以及启动服务。通过正确配置和使用 Atlas Hive Hook,你...
在"apache-atlas-kafka-hook-2.1.0"这个子目录中,你可能会找到以下关键组件和文件: 1. **配置文件**:通常包括`atlas-application.properties`,这是Atlas的主要配置文件,你可以在这里设置Kafka Hook的相关参数...
2. **Hive集成**:在Apache Atlas中,Hive Hook是一个关键组件,它允许在Hive操作(如创建表、插入数据、更新数据等)发生时自动捕获元数据并将其记录到Atlas中。这确保了元数据的实时性和完整性,便于数据分析师和...
centos7.4+ nvidia-docker2 安装所需要的必备包之一 libnvidia-container-tools-1.0.2-1.x86_64.rpm ...nvidia-container-runtime-hook-1.4.0-2.x86_64.rpm nvidia-docker2-2.0.3-3.docker18.09.6.ce.noarch.rpm
NVIDIA-DOCKER-18.06版本 nvidia-container-runtime-hook_1.4.0-1_amd64.deb
hook-tar/apache-atlas-2.2.0-falcon-hook.tar.gz hook-tar/apache-atlas-2.2.0-hbase-hook.tar.gz hook-tar/apache-atlas-2.2.0-hive-hook.tar.gz hook-tar/apache-atlas-2.2.0-impala-hook.tar.gz hook-tar/apache...
压缩包内的“apache-atlas-hbase-hook-2.1.0”文件包含了实现上述功能所需的全部组件和配置文件。安装和配置此Hook通常包括以下步骤: 1. **解压文件**:首先,你需要解压“apache-atlas-2.1.0-hbase-hook.tar.gz”...
1. **下载和解压**:首先,你需要下载提供的"apache-atlas-hbase-hook-2.0.0"压缩文件,然后将其解压到一个适当的目录。这将包含所有必要的库和配置文件。 2. **配置Apache Atlas**:在Apache Atlas的配置文件(如...
apache-atlas-2.3.0-hive-hook.tar.gz Apache Atlas 框架是一组可扩展的核心基础治理服务,使企业能够有效且高效地满足 Hadoop 内的合规性要求,并允许与整个企业数据生态系统集成。这将通过使用规范和取证模型、...
具体到 "apache-atlas-hive-hook-2.2.0" 这个子目录,它表示 Atlas 提供了一个针对 Hive 的钩子(hook)。Hive Hook 是 Atlas 与 Hive 交互的一种方式,当用户在 Hive 中执行 DDL(数据定义语言)操作时,如创建表、...
在解压`apache-atlas-sqoop-hook-2.2.0`后,通常会包含一系列配置文件、Java类库和文档,这些内容用于安装和配置Sqoop Hook,使其能与Apache Atlas无缝对接。用户需要根据自己的环境设置这些参数,如Atlas服务器的...
离线安装包,亲测可用
3. **安装 Kafka Hook**:将 `apache-atlas-kafka-hook-2.2.0` 解压后,将其 JAR 包添加到 Atlas 的类路径中。 4. **配置 Kafka Hook**:在 Atlas 的配置文件中(如 `atlas-application.properties`),配置 Kafka ...
`useState` Hook用于添加状态到函数组件中,而`useEffect` Hook则用于处理副作用,如数据获取、订阅或者在组件更新后执行某些操作。 在`react-typewriter-hook`中,我们可以看到如何巧妙地结合这些Hooks来实现打字...
Apache Atlas 是一个元数据管理框架,专为大数据环境设计,用于提供数据治理、安全和合规性...这个压缩包中的 "apache-atlas-falcon-hook-2.1.0" 文件可能是实际的集成组件,用于部署和配置在相应的 Hadoop 集群上。
要在Laravel项目中启用这些Git钩子,你需要将`laravel-git-hook-master`中的脚本复制到你的项目`.git/hooks`目录下,并根据你的项目需求进行适当的修改。通常,这些脚本需要赋予执行权限,使用命令`chmod +x .git/...
4. **审计日志记录**:Hive Hook 会记录所有的元数据变更,这有助于进行操作审计和合规性检查。 5. **性能优化**:由于Hive Hook 实现了与Atlas 的无缝集成,因此可以优化查询性能,因为元数据的管理和查询都更加...