DLL文件是Dynamic Link Library的縮寫,意為動態(tài)鏈接庫。DLL文件一般被存放在C:WindowsSystem目錄下。在Windows中,許多應(yīng)用程序并不是一個完整的可執(zhí)行文件,它們被分割成一些相對獨立的動態(tài)鏈接庫,即DLL文件,放置于系統(tǒng)中。當我們執(zhí)行某一個程序時,相應(yīng)的DLL文件就會被調(diào)用。一個應(yīng)用程序可有多個DLL文件,一個DLL文件也可能被幾個應(yīng)用程序所共用,這樣的DLL文件被稱為共享DLL文件。
那么DLL文件怎么打開呢?其實,理論上DLL是不能打開的,如果您還是想打開,可以使用一些軟件開發(fā)或反編譯功能,比如DLL函數(shù)查看器,但不建議修改。當然也有的DLL是加了殼的,您需要先脫殼才可以。這里小編要提示大家刪除DLL文件或修改DLL文件的內(nèi)容,可能會導某些程序無法打開或運行錯誤,提示沒有DLL文件。因此一般情況下不建議您打開DLL文件或進一步對其進行編輯操作。
雖然dll一般不能打開,不過有時我們還是可以對一些DLL文件進行反編譯進行學習。
打開步驟:
1、如果DLL文件已經(jīng)加殼,那么則先需要進行脫殼
2、脫殼之后再進行反編譯;
3、根據(jù)反編譯軟件不同,有些反編譯軟件可以直接編譯出源碼
最近發(fā)現(xiàn)一個聲稱具有革命性的DLL反編譯工具:DLL to C。能夠把DLL轉(zhuǎn)換回可編譯的代碼。 并且具有生成數(shù)據(jù)結(jié)構(gòu)和反匯編代碼段的功能。和其它的反編譯或反匯編工具最大的不同是:它生成的代碼是可以直接編譯運行的。
以下是它反匯編后的部分代碼:
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
|
#include "stdafx.h" #include "Win32Dll.h" #pragma warning (disable:4730) #pragma warning (disable:4733) #pragma warning (disable:4799) #define DB(b) __asm _emit b __declspec ( naked ) void Win32Dll_CodeStart() { __asm{ MOV EAX, 0x00000001 RETN 0x000C } } __declspec ( naked ) void Win32Dll_TestFun() { __asm{ MOV EAX, DWORD PTR [ESP+0x04] TEST EAX, EAX JZ loc_10001028 PUSH 0x00 PUSH offset [Win32Dll_rdata.m1280_str] PUSH EAX PUSH 0x00 CALL_LONG( DWORD PTR [offset Win32Dll_rdata.mEC_MessageBoxA]) loc_10001028: RET } } |
看起來還不錯。并且這還只是一個新出的工具,估計以后會進一步改進。感興趣的可以試用一下。