HOOK API技术

HOOK学习笔记与心得

奇技淫巧之调试被远程线程注入的DLL

windows核心编程_系统消息与自定义钩子hook使用

[Windows Dll Injection、Process Injection、API Hook、DLL后门/恶意程序入侵技术]

Hook :Microsoft Detours 2.1简介

detours3.0文档

Hook简单实用

detours hook其它进程的api

逆向神器IDA

一. 什么是HOOK(钩子)

对于Window系统,它是建立在事件驱动机制上.整个系统都是通过消息传递实现的.

hook(钩子)是一种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往目标窗口的消息并进行处理.

二.HOOK分类

  • 线程钩子监视指定线程的事件消息
  • 系统钩子监视系统中的所有线程的事件消息。因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL)中。这是系统钩子和线程钩子很大的不同之处。

三.HOOK工作原理

在正确使用钩子函数前,先讲解工作钩子函数的工作原理.

当你创建一个钩子时,WINDOWS会先在内存中创建一个数据结构,该数据结构包含了钩子的相关信息,然后把该结构体加到已经存在的钩子链表中去.新的钩子将加到老的前面.当一个事件发生时,如果您安装的是一个线程钩子,您进程中的钩子函数将被调用.如果是一个系统钩子,系统就必须把钩子函数插入到其它进程的地址空间,要做到这一点要求钩子函数必须在一个动态链接库中,所以如果您想要使用系统钩子,就必须把该钩子函数放到动态链接库中去.

四.HOOK API技术

本文主要介绍的就是HOOK API的技术.

Windows系统API函数都是被封装到DLL中,在某个应用程序要调用一个API函数的时候,如果这个函数所在的DLL没有被加载到本进程中则加载它,然后保存当前环境(各个寄存器和函数调用完后的返回地址等).

接着程序会跳转到这个API函数的入口地址去执行此处的指令.

由此看来,想在调用真正的API之前先调用我们的函数,那么可以修改这个API函数的入口处的代码,使他先跳转到我们的函数地址,然后在我们的函数最后再调用原来的API函数.

HOOK API 可以理解成对程序将要执行系统函数的一个拦截, 拦截后执行自己写的代码以达到完成某种特定的目的,再恢复程序继续执行,很多PJ中的Patch 机器码,盗号木马等都是用这个方法.

五.Detours

5.1 Detours介绍

Detours 是Microsoft开发一个库.

它具有两方面的功能:

  • 拦截x86机器上的任意的win32 API函数;
  • 插入任意的数据段到PE文件中,修改DDL文件的导入表;

Detours是一个用来在二进制级别上对程序中的函数(Function)或者过程(Procedure)进行修改的工具库.

一般我们将这种技术称为"Hook".

Detours的实现原理是将目标函数的前几个字节改为jmp指令跳转到自己的函数地址,以此接管对目标函数的调用,并插入自己的处理代码.

在现实中,这种技术可以应用在很多场景下.比如Hook某些Windows API,在实际调用到系统函数前进行一些过滤工作;软件中使用到了一些没有源代码的第三方库,但是又想增强其中某些函数的功能,等等.

5.2 Detours库x86 x64编译

参考 Detour hook库x86 x64编译

5.3 Detours的简单使用

注意点:

  1. 导入Detour时,需要导入头文件和库文件。
#include "../Detours/include/detours.h"
#pragma comment (lib,"../Detours/lib.X86/detours.lib")
  1. 要对挂钩函数进行保存。先定义一个函数指针保存要挂钩的函数,目的是为了最后的还原。

  2. 挂钩的函数一定要与原函数的原型一模一样(除函数名外)。包含返回值、参数类型。

  3. 挂钩的思路:

    • 找到要挂钩的函数.并提取出来;
    • 定义一个与函数原型一样的新函数.
    • 进行挂钩
// 进行挂钩
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach();
DetourTransactionCommit();//----// 解除钩子
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach();
DetourTransactionCommit();

为什么使用DLL

1.扩展了应用程序的特性
2.简化了项目管理
3.节省内存
4.促进资源共享
5.促进本地化 本地有一个DLL不需要重复下载
6.解决各版本的差异

注意:

DLL与应用程序共享一个进程空间
在DLL中分配的内存必须由DLL来进行释放
应用程序不会因为DLL的卸载而释放空间

DLL与EXE的不同点:
1.生成的程序属性不同。
2.入口函数不同。DLL是DllMain()

简单使用DEMO

源代码:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>//包含Detour的头文件和库文件
#include "../Detours/include/detours.h"
#pragma comment (lib,"../Detours/lib.X86/detours.lib")//保存函数原型
static int (WINAPI *OldMesssageBoxW)(
_In_opt_ HWND hWnd,
_In_opt_ LPCWSTR lpText,
_In_opt_ LPCWSTR lpCaption,
_In_ UINT uType)=MessageBoxW;//改写函数
static int WINAPI NewMessageBoxW(_In_opt_ HWND hWnd,_In_opt_ LPCWSTR lpText,_In_opt_ LPCWSTR lpCaption,_In_ UINT uType)
{return OldMesssageBoxW(NULL, L"new MessageBox", L"Please", MB_OK);}
//开始下钩子
void StartHook()
{//开始事务DetourTransactionBegin();//更新线程信息  DetourUpdateThread(GetCurrentThread());//将拦截的函数附加到原函数的地址上DetourDatach(&(PVOID&)OldMesssageBoxW, NewMessageBoxW);//结束事务DetourTransactionCommit();
}//解除钩子
void EndHook()
{    //开始事务DetourTransactionBegin();//更新线程信息 DetourUpdateThread(GetCurrentThread());//将拦截的函数从原函数的地址上解除DetourDetach(&(PVOID&)OldMesssageBoxW, NewMessageBoxW);//结束事务DetourTransactionCommit();
}int _tmain(int argc, _TCHAR* argv[])
{//应原样输出MessageBoxW(NULL, L"old MessageBox", L"Please", MB_OK);//应改变输出StartHook();MessageBoxW(NULL, L"old MessageBox", L"Please", MB_OK);//应原样输出EndHook();MessageBoxW(NULL, L"old MessageBox", L"Please", MB_OK);system("pause");return 0;
}

六. Detours实现的第三方Dll钩子测试代码

实现了一个Demo. 实现了将DLL注入EXE. 实现API的替换.
代码提交至GithubDetoursDemo

HOOK API技术相关推荐

  1. Windows下Hook API技术

    Windows下Hook API技术 什么叫Hook API?所谓Hook就是钩子的意思,而API是指Windows开放给程序员的编程接口,使得在用户级别下可以对操作系统进行控制,也就是一般的应用程序 ...

  2. Windows下Hook API技术小结 (转)

    1.基本概念 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理函数之前 ...

  3. 没有HOOK就没有病毒?详谈HOOK API技术(转)

    HOOK API是一个永恒的话题,如果没有HOOK,许多技术将很难实现,也许根本不能实现.这里所说的API,是广义上的API,它包括DOS下的中断,WINDOWS里的API.中断服务.IFS和NDIS ...

  4. 详细说说hook Api技术

    HOOK API是一个永恒的话题,如果没有HOOK,许多技术将很难实现,也许根本不能实现.这里所说的API,是广义上的API,它包括DOS下的中断,WINDOWS里的API.中断服务.IFS和NDIS ...

  5. 古典黑客技术之HOOK API

    古典黑客技术之HOOK API HOOK API技术可以拦截.控制某些API函数的调用.当一个API函数被拦截之后,用户可以让目标程序执行事先准备好的代码.(比如说,构造的代码是过滤此API函数传入的 ...

  6. 从龙之谷双开领悟出的——HOOK API

    第一部分--限制程序多开方法 这里有一篇文章讲得很详细了,http://wenku.baidu.com/view/ac9d0215a2161479171128af.html 龙之谷使用的是互斥体方法, ...

  7. Hook API 原理 解析

    1 什么是Hook API 简单的说,一个应用程序要调用一个API函数,例如CreateFileW,那么应用程序必须要知道函数的地址,才能调用它,我对Hook API的理解是,把这个函数地址替换为另一 ...

  8. 实现32位和64位系统的Inline Hook API

    背景 API HOOK技术是一种用于改变API执行结果的技术,Microsoft 自身也在 Windows 操作系统里面使用了这个技术,如Windows兼容模式等. API HOOK 技术并不是计算机 ...

  9. 9.3 挂钩API技术(HOOK API)

    HOOK API HOOK API是指截获特定进程或系统对某个API函数的调用,使得API的执行流程转向指定的代码.例如,在挂钩了系统对User32.dll模块中MessageBoxA函数的调用以后, ...

最新文章

  1. python编程软件例子-软件开发|10 个 Python 图像编辑工具
  2. 浙江金华暂时停用“智能头箍”,专家:监测学生脑电违反伦理
  3. 学会JavaScript函数式编程(第1部分)
  4. wxWidgets:wxTaskBarButton 示例
  5. 大叔手记(12):我的一次面试经历(谈大叔如何应对面试官)
  6. 信息学奥赛一本通(1266:【例9.10】机器分配)
  7. 数字图像处理与机器视觉光盘资料_机器视觉——数字图像处理知识点总结
  8. python3.6安装步骤-Ubuntu16.04安装python3.6详细教程
  9. 二十五、JAVA多线程(二、吃苹果案例)
  10. 重装机兵3 完美攻略修正版
  11. 调出cmd输入时的光标
  12. 高职计算机应用与信息检索,信息检索论文,关于高职院校图书馆对学生信息检索的教育相关参考文献资料-免费论文范文...
  13. canvas制作钟表小案例
  14. php正则表达式懒惰匹配,正则表达式-贪婪与懒惰
  15. Could not find a package; ld returned 1 exit status;error while loading shared libraries
  16. “十四五”规划强调交通强国,Apollo智能交通快步走
  17. Vue学习-常用属性(一)
  18. 电脑壁纸2K+Win10实用快捷键
  19. MHDD使用教程图解二
  20. 超实用!精选34个Python自动化库!

热门文章

  1. SQL查询两列合并一列
  2. 【Windows】Antimalware Service Executable cpu占用过高
  3. 如何选择漏电保护器规格型号_漏电保护器规格型号有几种?
  4. R700指令集架构参考手册第二章——2.5 程序状态
  5. TPCH生成数据导入Postgres数据库
  6. mysql tpch_mysql tpch
  7. Python获取《姜子牙》和《哪吒》的票房对比和评价分析
  8. Python使用Pandas导入数据库sql
  9. 软件推荐1-mac后端(java)开发常用软件
  10. 在简单粗暴中堕落的广告行业