當前位置:首頁 » 編程軟體 » 易語言編譯完成dll文件怎麼劫持

易語言編譯完成dll文件怎麼劫持

發布時間: 2023-05-28 18:53:57

Ⅰ 易語言編譯完成DLL文件,怎麼劫持注入到游戲中

利用游戲或系統缺陷注入 如偽裝成輸入法、驅動許可權強制載入、文件偽裝替換等等。

Ⅱ 用易語言編輯好的DLL文件,怎麼注入到游戲中

比較多人用的是輸入法注入

Ⅲ 易語言如何調用DLL文件

---------------------------------------------------------在易語言的左邊功能選項找---程序---dl命令--右鍵---插入新dll命令DLL命令名=你給他的名稱(在窗口程序下可直接代碼輸入)DLL庫文件名=你調用那個DLL命名DDL庫中的對應名=在被調用的DLL的子程序 完了後直接在窗口下輸入代碼(DLL命令名)打包的時候將DLL放置包下(可減少錯誤率)

Ⅳ 易語言怎麼調用DLL文件

不用改後綴名,改了之後就不能運行了,直接用「運行()」這個命令就可以了,dll和可執行文件是不同的,dll動態鏈接庫有程序介面可供其他程序調用裡面的子程序,調用的時候只需要在易語言的dll列表裡填好相關信息,然後像調用其他子程序一樣調用就行了,也可以用dll注入

Ⅳ DLL文件劫持應該怎麼辦 急啊

DLL當一個可執行文件運行時,Windows載入器將可執行模塊映射到進程的地址空間中,載入器分析可執行模塊的輸入表,並設法找出任何需要的DLL,並將它們映射到進程的地址空間中。

由於輸入表中只包含DLL名而沒有它的路徑名,因此載入程序必須在磁碟上搜索DLL文件。首先會嘗試從當前程序所在的目錄載入DLL,如果沒找到,則在Windows系統目錄查找,最後是在環境變數中列出的各個目錄下查找。利用這個特點,先偽造一個系統同名的DLL,提供同樣的輸出表,每個輸出函數轉向真正的系統桐知DLL。程序調用系統DLL時會先調用當前目錄下偽造的DLL,完成相關功能後,再跳到系祥簡統DLL同名函數里執行,如圖18.4。這個過程用個形象的詞來描述就是系統DLL被劫持(hijack)了。

184.gif

利用這種方法取得控制權後,可以對主程序進行補丁。此種方法只對除kernel32.dll, ntdll.dll等核心系統庫以外的DLL有效,如網路應用程序的ws2_32.dll,游戲程序中的d3d8.dll,還有大部分應用程序都調用的lpk.dll,這些DLL都可被劫持。
利用5.6.2章提供的CrackMeNet.exe來演示一下如何利用劫持技術製作補丁,目標文件用Themida v1.9.2.0加殼保護。

1.補丁地址
去除這個CrackMe網路驗證方法參考第5章,將相關補丁代碼存放到函數PatchProcess( )里。例如將401496h改成:
代碼:00401496 EB 29 jmp short 004014C1
補丁編程實現就是:
代碼:
unsigned char p401496[2] = {0xEB, 0x29};
WriteProcessMemory(hProcess,(LPVOID)0x401496, p401496, 2, NULL);
p401496這個數組的數據格式,可以用OllyDBG插件獲得,或十六進制工具轉換。例如Hex Workshop打開文件,執行菜單Edit/Copy As/Source即可得到相應的代碼格式。

2.構建輸出函數
查看實例CrackMeNet.exe輸入表,會發現名稱為ws2_32.dll的DLL,因此構造一個同名的DLL來完成補丁任務。偽造的ws2_32.dll有著真實ws2_32.dll一樣的輸出函數,完整源碼見光碟。實現時,可以利用DLL模塊中的函數轉發器來實現這個目標,其會將對一個函數的調用轉至另一個DLL中的另一個函數。可以這樣使用一個pragma指令:
代碼:#pragma comment(linker, "/EXPORT:SomeFunc=DllWork.someOtherFunc")
這個pragma告訴鏈接程序,被編譯的DLL應該輸出一個名叫SomeFunc的函數。但是SomeFunc函數的實現實際上位於另一個名叫SomeOtherFunc的函數中,該函數包含在稱為DllWork. dll的模塊中。
如要達到劫持DLL的目的,生局宴消成的DLl輸出函數必須與目標DLL輸出函數名一樣,本例可以這樣構造pragma指令:
代碼:#pragma comment(linker, "/EXPORT:WSAStartup=_MemCode_WSAStartup,@115")
編譯後的DLL,會有與ws2_32.dll同名的一個輸出函數WSAStartup,實際操作時,必須為想要轉發的每個函數創建一個單獨的pragma代碼行,讀者可以寫一個工具或用其他辦法,將ws2_32.dll輸出函數轉換成相應的pragma指令。

當應用程序調用偽裝ws2_32.dll的輸出函數時,必須將其轉到系統ws2_32.dl中去,這部分的代碼自己實現。例如WSAStartup輸出函數如下構造:
代碼:
ALCDECL MemCode_WSAStartup(void)
{
GetAddress("WSAStartup");
__asm JMP EAX;//轉到系統ws2_32.dll的WSAStartup輸出函數
}
其中GetAddress()函數的代碼如下:
代碼:
// MemCode 命名空間
namespace MemCode
{
HMODULE m_hMole = NULL; //原始模塊句柄
DWORD m_dwReturn[500] = {0}; //原始函數返回地址
// 載入原始模塊
inline BOOL WINAPI Load()
{
TCHAR tzPath[MAX_PATH]={0};
TCHAR tzTemp[MAX_PATH]={0};
GetSystemDirectory(tzPath, sizeof(tzPath));
strcat(tzPath,"\\ws2_32.dll");
m_hMole = LoadLibrary(tzPath);//載入系統系統目錄下ws2_32.dll
if (m_hMole == NULL)
{
wsprintf(tzTemp, TEXT("無法載入 %s,程序無法正常運行。"), tzPath);
MessageBox(NULL, tzTemp, TEXT("MemCode"), MB_ICONSTOP);
}
return (m_hMole != NULL);
}

// 釋放原始模塊
inline VOID WINAPI Free()
{
if (m_hMole)
FreeLibrary(m_hMole);
}
// 獲取原始函數地址
FARPROC WINAPI GetAddress(PCSTR pszProcName)
{
FARPROC fpAddress;
TCHAR szProcName[16]={0};
TCHAR tzTemp[MAX_PATH]={0};

if (m_hMole == NULL)
{
if (Load() == FALSE)
ExitProcess(-1);
}

fpAddress = GetProcAddress(m_hMole, pszProcName);
if (fpAddress == NULL)
{
if (HIWORD(pszProcName) == 0)
{
wsprintf(szProcName, "%d", pszProcName);
pszProcName = szProcName;
}
wsprintf(tzTemp, TEXT("無法找到函數 %hs,程序無法正常運行。"), pszProcName);
MessageBox(NULL, tzTemp, TEXT("MemCode"), MB_ICONSTOP);
ExitProcess(-2);
}
return fpAddress;
}
}
using namespace MemCode;
編譯後,用LordPE查看偽造的ws2_32.dll輸出函數,和真實ws2_32.dll完全一樣,如圖18.5所示。

185.gif

查看偽造的ws2_32.dll中任意一個輸出函數,例如WSACleanup:
代碼:
.text:10001CC0 ; int __stdcall WSACleanup()
.text:10001CC0 WSACleanup proc near
.text:10001CC0 push offset aWsacleanup ;"WSACleanup"
.text:10001CC5 call sub_10001000 ;GetAddress(WSACleanup)
.text:10001CCA jmp eax
.text:10001CCA WSACleanup endp
會發現輸出函數WSACleanup()首先調用GetAddress(WSACleanup),獲得真實ws2_32.dll中WSACleanup的地址,然後跳過去執行,也就是說ws2_32.dll各輸出函數被HOOK了。

3.劫持輸出函數
ws2_32.dll有許多輸出函數,經分析,程序發包或接包時,WSAStartup輸出函數調用的比較早,因此在這個輸出函數放上補丁的代碼。代碼如下:
代碼:
ALCDECL MemCode_WSAStartup(void)
{
hijack();
GetAddress("WSAStartup");
__asm JMP EAX;
}
hijack()函數主要是判斷是不是目標程序,如是就調用PatchProcess()進行補丁。
void hijack()
{
if (isTarget(GetCurrentProcess())) //判斷主程序是不是目標程序,是則補丁之
{
PatchProcess(GetCurrentProcess());
}
}
偽造的ws2_32.dll製作好後,放到程序當前目錄下,這樣當原程序調用WSASTartup函數時就調用了偽造的ws2_32.dll的WSASTartup函數,此時hijack()函數負責核對目標程序校驗,並將相關數據補丁好,處理完畢後,轉到系統目錄下的ws2_32.dll執行。
這種補丁技術,對加殼保護的軟體很有效,選擇掛接的函數最好是在殼中沒有被調用,當掛接函數被執行時,相關的代碼己被解壓,可以直接補丁了。有些情況下,必須用計數器統計掛接的函數的調用次數來接近OEP。此方法巧妙地繞過了殼的復雜檢測,很適合加殼程序的補丁製作。
一些木馬或病毒也會利用DLL劫持技術搞破壞,因此當在應用程序目錄下發現系統一些DLL文件存在時,應引起注意。

Ⅵ 怎麼劫持別人電腦里的DLL文件

電影中的2012離我們還有多遠,沒有人知道,但中國4億網民電腦的2012卻已經到來了。因為普遍存在於常用軟體的DLL劫持漏洞曝光,直接威脅所有網民的電腦,該漏洞被黑客親切地稱為「世界末日漏洞」!
常用軟體無一倖免
你上網嗎?你下載文件嗎?你看電影嗎?你用Office嗎?你聽音樂嗎?也許你感覺這些問題比較小白,所有電腦用戶,都要玩這些,沒有例外。可你知道嗎,當你用軟體做這些操作時,威脅正一步一步沖你逼來——盜號病毒虎視眈眈地盯著你的電腦,試圖遠程入侵,企圖盜取你的網銀、網游等賬號和密碼。
現在,你心中很疑惑,為什麼做這些操作會引來盜號病毒?因為DLL劫持漏洞,因為你使用的常用軟體中就有該漏洞!例如瀏覽器有火狐(圖1)、Opera等,下載軟體有迅雷、風行、uTorrent等,播放軟體有暴風影音、QQ音樂播放器、酷狗音樂、Winamp等,圖片處理軟體AutoCAD、Photoshop等,辦公軟體Office,QQ游戲……

圖1
可以毫不誇張地說,中國4億網民,無人逃得過DLL劫持漏洞的威脅,這也是為什麼該漏洞被稱為世界末日漏洞的原因。糟糕的是,該漏洞的利用代碼已經被公開了,利用該漏洞的病毒正在蔓延。更可怕的是,如果病毒進行了免殺,安全軟體將無力應對,就連啟發式掃描也很難作為!
一個允許冒名頂替的漏洞
導致DLL劫持漏洞產生的原因一點不復雜,就是部分程序在載入DLL文件時,只給出了文件派亮名,而沒有給出完整路徑,系統不得不按照默認搜索順序找出DLL文件(圖2)。黑客就想,如果製造一個與程序同名的DLL文件,採取技術手段確保它先於正常DLL文件被載入,不就可以激活病毒了嗎?

圖2
打一個比喻:如果一封信件上指明了收信人的房門號,郵遞員就會直接投遞過去;反之郵遞員就會挨家挨戶敲門去詢問,如果有不懷好意的人知道了郵遞員敲門的順序和收信人的姓名,就可以假冒收信人搶先一步接觸郵遞員並得到信件,再偽造信件命令程序運行病毒。
看到這里,有的讀者朋友可能會問:不對呀,這個原理很早就被人發現了,此前還有利用該原理的病毒呢!這不是在忽悠我們嗎?不錯,很早以前就有人發現了該漏洞的原理,微軟還曾經給出了警告,不過一直被忽視了。
忽視的理由很簡單,此前該漏洞的利用只能在本地,所以要觸發漏洞,得先搞一個DLL文件到電腦里,過程野蠻容易引起殺毒軟體的警覺,導致病毒激活的成功率不高,中羨備當真是食之無味棄之可惜。
不過,現在發現了遠程利用該漏洞的方法,不用想辦法把DLL文件塞進用戶的電腦,只要誘使用戶訪問特定的東東,就可以激活漏洞,這樣一來該漏洞的價值體現出來——具備了大規模傳播病毒的能力,這才引起安全廠商和微軟的高度關注,才會推出應對方法。
用補丁封住漏洞
如此恐怖的漏洞,如何才能堵上?等軟體公司推出更新補丁?這么多常用軟體,太麻煩了,最好的方法是安裝微軟緊急推出的安全補丁。登錄http://support.microsoft.com/kb/2264107,拖動滑鼠到網頁的中間,可以看到提供補丁下載的鏈接,根據自己Windows系統版本下載相應的補丁並安裝。
接著,登錄http://go.microsoft.com/?linkid=9742148,下載第二個補丁,安裝後,遠程利用DLL漏洞的途徑就被掐斷了,但還別松氣,漏洞還可以在本地被利用。那又該如何防範呢?
防範的方法是修改注冊表。點擊「運行→regedit」,定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\,右側有一個名為CWDIllegalInDllSearch的子鍵,雙擊該子鍵,修改它的值,填入ffffffff,選擇「十六進制」(圖3),點擊「確定」即可,最後重啟電腦就徹底堵上該漏洞了(堵漏洞的原理是:修改DLL的查找順序)。

圖3
治本還要靠規范軟體編程
根據漏洞激活的原理,我們可以知道導致漏洞出現的根本原因是軟體編程的不規范,不關系統的事,這也是當初漏洞才爆發時,為什麼微軟不願意推出安全補丁——至少表面原因是這樣。
那真正的原因是什麼呢?現在的補丁表面看堵上漏洞了,其實還留下了隱患,如果黑客研究透了補丁的原理,就可能再出現破解之法,例如還原注冊賣毀表、破解調整後的搜索順序等,說白了微軟的補丁只能治標,不能治本。
要治本微軟必須修改當前DLL的運行機制,可該機制已經非常成熟了,且如果改動工作量驚人,所以微軟初期不願意推出補丁,但責任所在不得已推出了治標的補丁。從技術來看,要治本最簡單的方法是規范軟體編程,我們預計不久之後,大量被漏洞威脅的軟體會推出相應的補丁,大家注意及時更新,避免被利用該漏洞的病毒攻擊。

Ⅶ 易語言DLL如何防止他人調用有哪些源碼參考

可以主程序窗口裡拖一個「伺服器」進去,DLL里加客戶端,客戶端連接服務端,在時限里客戶端連接到伺服器通過驗證才能使用。

也可以使用進程通訊。還可以寫一串驗證碼到某個文件里或者注冊表裡,這串驗證碼根據時間動態生成,DLL來檢驗這串字元是否正確。

推薦「淡淡網路程序拓展模塊 9.39」,這個模塊比外掛作坊1.5強大不知道多少,外掛作坊1.5好像是2006年出的,好多功能都不行,在WIN7下用不了。啟亮告

Ⅷ 易語言 怎麼調用已經編譯好的DLL

在程序界面里選擇Dll命令

記得選我啊

Ⅸ 【易語言】【OD】關於寫dll劫持(也可叫做靜態補丁)的方法

改文件我渣空餘覺得不如dll注入來的優雅。

VirtualAllocEx申請內存,
WriteProcessMemory將你的裝載dll的shellcode寫過去,
CreateRemoteThread創建線程,指向你如滾的shellcode。
簡單愉快,完全不需要改OEP,更不用搜索00。

如果你那麼固執要用你的靜態補丁方法,
其實我覺得你也不需要用什麼易語言了,直接把你用OD修改的DLL,保存並替代原文件,
就可以了,何須那麼麻煩,當然除非你這個DLL還是EXE有什麼特殊的地方不能這樣。

易語言用匯編比較蛋疼,而且我對易語言也不太了解,
如果你那麼固執要用編程來解決,我就大概提一下思路。

一、搜00,找個足夠大的空的地方
二、通過讀PE結構獲取OEP,不懂的話請自行網路PE結構。
三、OEP改成你步驟一找到的空地,
這一塊涉及到文件虛擬地址對齊問題(好像是這么叫的),比較復雜,而且我也不太清楚,
交給你自己解決。

四、空地里寫入你的shellcode。你的shellcode有個問題,call LoadLibrary用的是相對偏移跳 轉,當你這句匯編的位置483AFE,那麼你就會call到別的地方去了,可以改虧御成如下代碼:
mov eax,LoadLibrary地址

call eax

五、shellcode末尾jmp回原OEP,同樣涉及對齊問題,自行研究吧。

熱點內容
同時修改多台伺服器管理地址工具 發布:2025-05-16 09:20:36 瀏覽:420
什麼配置就能玩地平線 發布:2025-05-16 09:13:46 瀏覽:82
python旋轉圖片 發布:2025-05-16 09:13:40 瀏覽:638
少女前線防檢測腳本 發布:2025-05-16 08:59:07 瀏覽:728
編譯器對系統的依賴 發布:2025-05-16 08:37:29 瀏覽:711
javamap數組 發布:2025-05-16 08:37:28 瀏覽:451
移動光貓如何自行修改密碼 發布:2025-05-16 08:20:15 瀏覽:125
作為基線存儲 發布:2025-05-16 08:15:22 瀏覽:859
安卓怎麼關閉手機應用推薦 發布:2025-05-16 08:03:38 瀏覽:930
sql內置函數 發布:2025-05-16 08:03:34 瀏覽:923