当前位置:首页 > 教育 >

dll文件怎么注入(简单的dll注入教程)

来源:原点资讯(www.yd166.com)时间:2023-11-03 12:58:47作者:YD166手机阅读>>

dll文件怎么注入,简单的dll注入教程(1)

何为dll注入

DLL注入技术,一般来讲是向一个正在运行的进程插入/注入代码的过程。我们注入的代码以动态链接库(DLL)的形式存在。DLL文件在运行时将按需加载(类似于UNIX系统中的共享库(share object,扩展名为.so))。然而实际上,我们可以以其他的多种形式注入代码(正如恶意软件中所常见的,任意PE文件,shellcode代码/程序集等)。

全局钩子注入

在Windows大部分应用都是基于消息机制,他们都拥有一个消息过程函数,根据不同消息完成不同功能,windows通过钩子机制来截获和监视系统中的这些消息。一般钩子分局部钩子与全局钩子,局部钩子一般用于某个线程,而全局钩子一般通过dll文件实现相应的钩子函数。

核心函数

SetWindowsHookEx

HHOOK WINAPI SetWindowsHookEx( __in int idHook, \\钩子类型 __in HOOKPROC lpfn, \\回调函数地址 __in HINSTANCE hMod, \\实例句柄 __in DWORD dwThreadId); \\线程ID

通过设定钩子类型与回调函数的地址,将定义的钩子函数安装到挂钩链中。如果函数成功返回钩子的句柄,如果函数失败,则返回NULL

实现原理

由上述介绍可以知道如果创建的是全局钩子,那么钩子函数必须在一个DLL中。这是因为进程的地址空间是独立的,发生对应事件的进程不能调用其他进程地址空间的钩子函数。如果钩子函数的实现代码在DLL中,则在对应事件发生时,系统会把这个DLL加较到发生事体的进程地址空间中,使它能够调用钩子函数进行处理。

在操作系统中安装全局钩子后,只要进程接收到可以发出钩子的消息,全局钩子的DLL文件就会由操作系统自动或强行地加载到该进程中。因此,设置全局钩子可以达到DLL注入的目的。创建一个全局钩子后,在对应事件发生的时候,系统就会把 DLL加载到发生事件的进程中,这样,便实现了DLL注入。

为了能够让DLL注入到所有的进程中,程序设置WH_GETMESSAGE消息的全局钩子。因为WH_GETMESSAGE类型的钩子会监视消息队列,并且 Windows系统是基于消息驱动的,所以所有进程都会有自己的一个消息队列,都会加载 WH_GETMESSAGE类型的全局钩子DLL。

那么设置WH_GETMESSAGE就可以通过以下代码实现,记得加上判断是否设置成功

// 设置全局钩子 BOOL SetHook() { g_Hook = ::SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)GetMsgProc, g_hDllMoudle, 0); if (g_Hook == NULL) { return FALSE; } return TRUE; }

这里第二个参数是回调函数,那么我们还需要写一个回调函数的实现,这里就需要用到CallNextHookEx这个api,主要是第一个参数,这里传入钩子的句柄的话,就会把当前钩子传递给下一个钩子,若参数传入0则对钩子进行拦截

// 钩子回调函数 LRESULT GetMsgProc(int code, WPARAM wParam, LPARAM lParam) { return ::CallNextHookEx(g_Hook, code, wParam, lParam); }

既然我们写入了钩子,如果不使用的情况下就需要将钩子卸载掉,那么这里使用到UnhookWindowsHookEx这个api来卸载钩子

// 卸载钩子 BOOL UnsetHook() { if (g_Hook) { ::UnhookWindowsHookEx(g_Hook); } }

既然我们使用到了SetWindowsHookEx这个api,就需要进行进程间的通信,进程通信的方法有很多,比如自定义消息、管道、dll共享节、共享内存等等,这里就用共享内存来实现进程通信

// 共享内存 #pragma data_seg("mydata") HHOOK g_hHook = NULL; #pragma data_seg() #pragma comment(linker, "/SECTION:mydata,RWS"实现过程

首先新建一个dll

dll文件怎么注入,简单的dll注入教程(2)

在pch.h头文件里面声明这几个我们定义的函数都是裸函数,由我们自己平衡堆栈

extern "C" _declspec(dllexport) int SetHook(); extern "C" _declspec(dllexport) LRESULT GetMsgProc(int code, WPARAM wParam, LPARAM lParam); extern "C" _declspec(dllexport) BOOL UnsetHook();

dll文件怎么注入,简单的dll注入教程(3)

然后在pch.cpp里面写入三个函数并创建共享内存

// pch.cpp: 与预编译标头对应的源文件 #include "pch.h" #include <windows.h> #include <stdio.h> extern HMODULE g_hDllModule; // 共享内存 #pragma data_seg("mydata") HHOOK g_hHook = NULL; #pragma data_seg() #pragma comment(linker, "/SECTION:mydata,RWS") //钩子回调函数 LRESULT GetMsgProc(int code, WPARAM wParam, LPARAM lParam) { return ::CallNextHookEx(g_hHook, code, wParam, lParam); } // 设置钩子 BOOL SetHook() { g_hHook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)GetMsgProc, g_hDllModule, 0); if (NULL == g_hHook) { return FALSE; } return TRUE; } // 卸载钩子 BOOL UnsetHook() { if (g_hHook) { UnhookWindowsHookEx(g_hHook); } return TRUE; }

dll文件怎么注入,简单的dll注入教程(4)

栏目热文

dll注入工具有什么用(四种常见的dll注入方式及原理)

dll注入工具有什么用(四种常见的dll注入方式及原理)

本文中我将介绍DLL注入的相关知识。不算太糟的是,DLL注入技术可以被正常软件用来添加/扩展其他程序,调试或逆向工程的功...

2023-11-03 13:06:34查看全文 >>

dll注入工具源码官方完整版(dll文件怎么注入)

dll注入工具源码官方完整版(dll文件怎么注入)

不关注《一碳科技》?好吧,你错过了很多东西!DLL注入是什么?它有多厉害?它能让360安全卫士执行你的“破坏”代码!首先...

2023-11-03 13:21:13查看全文 >>

dll注入辅助工具(dll注入式外挂教程)

dll注入辅助工具(dll注入式外挂教程)

原理:DLL注入技术,一般来讲是向一个正在运行的进程插入/注入代码的过程。我们注入的代码以动态链接库(DLL)的形式存在...

2023-11-03 13:06:52查看全文 >>

mc指令辅助器(最好用的mc指令辅助器)

mc指令辅助器(最好用的mc指令辅助器)

使用方便功能强大的我的世界指令生成工具升级啦,本次升级新增了MOD模块,你再也不用为不懂MOD指令而烦恼!智能搜索功能,...

2023-11-03 13:37:45查看全文 >>

接龙管家怎么更改上传的图片(接龙管家怎么导入图片)

接龙管家怎么更改上传的图片(接龙管家怎么导入图片)

拍照打卡的得力助手。好消息,接龙管家新增了水印拍照功能。传统的工作拍照打卡往往缺乏相关信息,难以确认照片的真实性。而水印...

2023-11-03 13:20:54查看全文 >>

dll自动注入怎么写(四种常见的dll注入方式及原理)

dll自动注入怎么写(四种常见的dll注入方式及原理)

最近一直在研究注入,写一篇全的,也给自己做个总结dll注入其实就是让别的进程的address space去读相关的动态库...

2023-11-03 13:15:03查看全文 >>

注入dll有什么用(dll注入后怎么使用)

注入dll有什么用(dll注入后怎么使用)

Hook概述Hook也就是钩子,在Windows中大部分的应用程序都是基于消息机制,会根据不同的消息使用消息过程函数完成...

2023-11-03 12:57:21查看全文 >>

cdr自动排版怎么弄(cdr一键自动排版)

cdr自动排版怎么弄(cdr一键自动排版)

CorelDRAW/cdr插件077例:根据页面大小自动排版。大家好,这一集接着讲cdr插件第77例:根据页面大小自动排...

2023-11-03 13:38:58查看全文 >>

cdr怎么一键排版(cdr一键排版怎么安排)

cdr怎么一键排版(cdr一键排版怎么安排)

我们今天来学习CDR的智能排版技巧。我们可以将企业或学校的工作证进行智能排版,因为每个人的姓名、职位和编号都不一样,手动...

2023-11-03 13:24:48查看全文 >>

cdr如何快速排版设计(cdr排版方法和技巧)

cdr如何快速排版设计(cdr排版方法和技巧)

来源公众号:平面设计CDR在线学习(ID:cdr696969)CorelDRAW 2019(Win版)是一款专业的平面设...

2023-11-03 13:16:09查看全文 >>

文档排行