`
m635674608
  • 浏览: 5042907 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

拦截聊天记录--Hook技巧简介【原创】

 
阅读更多

一、    战场环境

[兵工场]: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-2.3.0-hbase-hook.tar.gz Apache Atlas 框架是一组可扩展的核心基础治理服务,使企业能够有效且高效地满足 Hadoop 内的合规性要求,并允许与整个企业数据生态系统集成。这将通过使用规范和取证模型、...

    apache-atlas-2.1.0-hive-hook.tar.gz

    1. **解压文件**:首先,你需要将 "apache-atlas-hive-hook-2.1.0" 解压到一个合适的位置。 2. **配置 Atlas**:在 Atlas 的配置文件(如 `atlas-env.sh` 或 `atlas.conf`)中,添加 Hive Hook 的类路径和配置信息。...

    atlas hive hook 编译依赖 apache-atlas-1.2.0-hive-hook.tar.gz

    在实际使用中,你需要解压 "apache-atlas-hive-hook-1.2.0" 压缩包,然后按照官方文档的指引进行安装和配置。这可能包括编译源代码、添加依赖、修改 Hive 配置以及启动服务。通过正确配置和使用 Atlas Hive Hook,你...

    apache-atlas-2.1.0-kafka-hook.tar.gz

    在"apache-atlas-kafka-hook-2.1.0"这个子目录中,你可能会找到以下关键组件和文件: 1. **配置文件**:通常包括`atlas-application.properties`,这是Atlas的主要配置文件,你可以在这里设置Kafka Hook的相关参数...

    apache-atlas-2.0.0-hive-hook.tar.gz

    2. **Hive集成**:在Apache Atlas中,Hive Hook是一个关键组件,它允许在Hive操作(如创建表、插入数据、更新数据等)发生时自动捕获元数据并将其记录到Atlas中。这确保了元数据的实时性和完整性,便于数据分析师和...

    nvidia-container-runtime-hook-1.4.0-2.x86_64.rpm

    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

    NVIDIA-DOCKER-18.06版本 nvidia-container-runtime-hook_1.4.0-1_amd64.deb

    apache-atlas-2.2.0-hook.tar

    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-2.1.0-hbase-hook.tar.gz

    压缩包内的“apache-atlas-hbase-hook-2.1.0”文件包含了实现上述功能所需的全部组件和配置文件。安装和配置此Hook通常包括以下步骤: 1. **解压文件**:首先,你需要解压“apache-atlas-2.1.0-hbase-hook.tar.gz”...

    apache-atlas-2.0.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-2.3.0-hive-hook.tar.gz Apache Atlas 框架是一组可扩展的核心基础治理服务,使企业能够有效且高效地满足 Hadoop 内的合规性要求,并允许与整个企业数据生态系统集成。这将通过使用规范和取证模型、...

    apache-atlas-2.2.0-falcon-hook.tar.gz

    具体到 "apache-atlas-hive-hook-2.2.0" 这个子目录,它表示 Atlas 提供了一个针对 Hive 的钩子(hook)。Hive Hook 是 Atlas 与 Hive 交互的一种方式,当用户在 Hive 中执行 DDL(数据定义语言)操作时,如创建表、...

    apache-atlas-2.2.0-sqoop-hook.tar.gz

    在解压`apache-atlas-sqoop-hook-2.2.0`后,通常会包含一系列配置文件、Java类库和文档,这些内容用于安装和配置Sqoop Hook,使其能与Apache Atlas无缝对接。用户需要根据自己的环境设置这些参数,如Atlas服务器的...

    oci-systemd-hook-0.2.0-1.git05e6923.el7_6.x86_64.rpm

    离线安装包,亲测可用

    apache-atlas-2.2.0-kafka-hook.tar.gz

    3. **安装 Kafka Hook**:将 `apache-atlas-kafka-hook-2.2.0` 解压后,将其 JAR 包添加到 Atlas 的类路径中。 4. **配置 Kafka Hook**:在 Atlas 的配置文件中(如 `atlas-application.properties`),配置 Kafka ...

    react-reacttypewriterhook用reacthooks来实现打字机的效果

    `useState` Hook用于添加状态到函数组件中,而`useEffect` Hook则用于处理副作用,如数据获取、订阅或者在组件更新后执行某些操作。 在`react-typewriter-hook`中,我们可以看到如何巧妙地结合这些Hooks来实现打字...

    apache-atlas-2.1.0-falcon-hook.tar.gz

    Apache Atlas 是一个元数据管理框架,专为大数据环境设计,用于提供数据治理、安全和合规性...这个压缩包中的 "apache-atlas-falcon-hook-2.1.0" 文件可能是实际的集成组件,用于部署和配置在相应的 Hadoop 集群上。

    Laravel开发-laravel-git-hook

    要在Laravel项目中启用这些Git钩子,你需要将`laravel-git-hook-master`中的脚本复制到你的项目`.git/hooks`目录下,并根据你的项目需求进行适当的修改。通常,这些脚本需要赋予执行权限,使用命令`chmod +x .git/...

    apache-atlas-2.0.0-hive-hook ,亲测有用!

    4. **审计日志记录**:Hive Hook 会记录所有的元数据变更,这有助于进行操作审计和合规性检查。 5. **性能优化**:由于Hive Hook 实现了与Atlas 的无缝集成,因此可以优化查询性能,因为元数据的管理和查询都更加...

Global site tag (gtag.js) - Google Analytics