HOOK API技术
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的简单使用
注意点:
- 导入Detour时,需要导入头文件和库文件。
#include "../Detours/include/detours.h"
#pragma comment (lib,"../Detours/lib.X86/detours.lib")
要对挂钩函数进行保存。先定义一个函数指针保存要挂钩的函数,目的是为了最后的还原。
挂钩的函数一定要与原函数的原型一模一样(除函数名外)。包含返回值、参数类型。
挂钩的思路:
- 找到要挂钩的函数.并提取出来;
- 定义一个与函数原型一样的新函数.
- 进行挂钩
// 进行挂钩
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技术相关推荐
- Windows下Hook API技术
Windows下Hook API技术 什么叫Hook API?所谓Hook就是钩子的意思,而API是指Windows开放给程序员的编程接口,使得在用户级别下可以对操作系统进行控制,也就是一般的应用程序 ...
- Windows下Hook API技术小结 (转)
1.基本概念 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理函数之前 ...
- 没有HOOK就没有病毒?详谈HOOK API技术(转)
HOOK API是一个永恒的话题,如果没有HOOK,许多技术将很难实现,也许根本不能实现.这里所说的API,是广义上的API,它包括DOS下的中断,WINDOWS里的API.中断服务.IFS和NDIS ...
- 详细说说hook Api技术
HOOK API是一个永恒的话题,如果没有HOOK,许多技术将很难实现,也许根本不能实现.这里所说的API,是广义上的API,它包括DOS下的中断,WINDOWS里的API.中断服务.IFS和NDIS ...
- 古典黑客技术之HOOK API
古典黑客技术之HOOK API HOOK API技术可以拦截.控制某些API函数的调用.当一个API函数被拦截之后,用户可以让目标程序执行事先准备好的代码.(比如说,构造的代码是过滤此API函数传入的 ...
- 从龙之谷双开领悟出的——HOOK API
第一部分--限制程序多开方法 这里有一篇文章讲得很详细了,http://wenku.baidu.com/view/ac9d0215a2161479171128af.html 龙之谷使用的是互斥体方法, ...
- Hook API 原理 解析
1 什么是Hook API 简单的说,一个应用程序要调用一个API函数,例如CreateFileW,那么应用程序必须要知道函数的地址,才能调用它,我对Hook API的理解是,把这个函数地址替换为另一 ...
- 实现32位和64位系统的Inline Hook API
背景 API HOOK技术是一种用于改变API执行结果的技术,Microsoft 自身也在 Windows 操作系统里面使用了这个技术,如Windows兼容模式等. API HOOK 技术并不是计算机 ...
- 9.3 挂钩API技术(HOOK API)
HOOK API HOOK API是指截获特定进程或系统对某个API函数的调用,使得API的执行流程转向指定的代码.例如,在挂钩了系统对User32.dll模块中MessageBoxA函数的调用以后, ...
最新文章
- python编程软件例子-软件开发|10 个 Python 图像编辑工具
- 浙江金华暂时停用“智能头箍”,专家:监测学生脑电违反伦理
- 学会JavaScript函数式编程(第1部分)
- wxWidgets:wxTaskBarButton 示例
- 大叔手记(12):我的一次面试经历(谈大叔如何应对面试官)
- 信息学奥赛一本通(1266:【例9.10】机器分配)
- 数字图像处理与机器视觉光盘资料_机器视觉——数字图像处理知识点总结
- python3.6安装步骤-Ubuntu16.04安装python3.6详细教程
- 二十五、JAVA多线程(二、吃苹果案例)
- 重装机兵3 完美攻略修正版
- 调出cmd输入时的光标
- 高职计算机应用与信息检索,信息检索论文,关于高职院校图书馆对学生信息检索的教育相关参考文献资料-免费论文范文...
- canvas制作钟表小案例
- php正则表达式懒惰匹配,正则表达式-贪婪与懒惰
- Could not find a package; ld returned 1 exit status;error while loading shared libraries
- “十四五”规划强调交通强国,Apollo智能交通快步走
- Vue学习-常用属性(一)
- 电脑壁纸2K+Win10实用快捷键
- MHDD使用教程图解二
- 超实用!精选34个Python自动化库!