DLL文件是Dynamic Link Library的缩写,意为动态链接库。DLL文件一般被存放在C:WindowsSystem目录下。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。
那么DLL文件怎么打开呢?其实,理论上DLL是不能打开的,如果您还是想打开,可以使用一些软件开发或反编译功能,比如DLL函数查看器,但不建议修改。当然也有的DLL是加了壳的,您需要先脱壳才可以。这里小编要提示大家删除DLL文件或修改DLL文件的内容,可能会导某些程序无法打开或运行错误,提示没有DLL文件。因此一般情况下不建议您打开DLL文件或进一步对其进行编辑操作。
虽然dll一般不能打开,不过有时我们还是可以对一些DLL文件进行反编译进行学习。
打开步骤:
1、如果DLL文件已经加壳,那么则先需要进行脱壳
2、脱壳之后再进行反编译;
3、根据反编译软件不同,有些反编译软件可以直接编译出源码
最近发现一个声称具有革命性的DLL反编译工具:DLL to C。能够把DLL转换回可编译的代码。 并且具有生成数据结构和反汇编代码段的功能。和其它的反编译或反汇编工具最大的不同是:它生成的代码是可以直接编译运行的。
以下是它反汇编后的部分代码:
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 } } |
看起来还不错。并且这还只是一个新出的工具,估计以后会进一步改进。感兴趣的可以试用一下。