dll木马:DLL木马编写

一.DLL木马简介:
DLL全称:Dynamic Link Lidrary,动态链接程序库。
DLL的格式和EXE相同,但不能直接执行,它是一个把代码封存在自己内部的程序,只提供函数接口让外面的EXE程序调用。DLL导出函数在DLL导出表中,DLL作者会通过文档让其他人知道导出函数的完整功能、参照格式、返回值等信息,便于其他程序员使用自己实现的函数;如他不想公开一些函数,简单的不在文档中提及就可以了;但这样难不倒真正感兴趣的人,比如Windows就有很多未公开的DLL导出函数,高手们利用查看导出表和反编译的手段,得到了很多Windows的尚未公开的但很有用的导出函数,《Undocumented Winddows A P I》就是一本经典的书籍,全是微软未公开的函数,被系统研究者们奉为圣经!当然,本人还稍微欠缺点火候,也只有简单的TDM和hacker软制作,呵呵!

因为DLL文件本身并不可以运行,需要应用程序调用,加载的是到应用程序的内存中,所以运行DLL函数的时候,不会看到DLL的进程,而DLL文件在使用,又无法用普通方法删除(具体删除方法我会在以后有时间的情况下讲解的),所以对隐蔽性、抗删除性有有特殊要求的TDM有很大的吸引力。DLL木马逐渐成为现在主流的木马编写方式。

二.普通DLL程序的编写:(1)

1.打开VC新建一个工程,选择Win32 Dynamic-Link Library工程,即Win32 DLL工程。

2.把工程命名为DllTest,在选择生成DLL的代码时,选择“A simple DLL Project”。
注:生成代码只有一个DLLMain函数,该函数只有一个入口点,是一个DLL程序所必备的。DLL程序没有DLLMain函数,编译器也会如同没有main函数的EXE程序一样报找不到DLLMain函数的错误。

3.直接按F7,会在Debug目录下生成一个dllTest.dll。
注:生成的DLL什么功能都没有,只是一个空架子。

4.在DllMain函数中加入MessageBox(NULL,"This is in test Dll","OK",MB_OK);
注:以上是在DLL中加入代码,实现函数,并把函数导出,供EXE程序调用和测试的。

5.编写三个函数int TestExport() , int Testln() , int TestDef() ,他们的功能都是直接返回整数,返回值分别为1,2,3。

6.其中,对TestExport()函数,定义加上__declspec(dllexport)关键字,用该关键字告诉编译器该函数是导出函数;对TestDef()函数,在工程中新建一个后缀名为DEF的任意文件,如:EXPORT.DEF在此文件中加上:
LIBRARY dllTest
EXPORTS
TestDef @1
表明DLL要引出TestDef这个函数。

7.按F7,在Debug文件夹下生成dllTest.dll和dllTest.lib两个文件。

8.用VC自带工具Depends分析dllTest.dll,Depends看到了dllTest.dll拥有两个导出函数TestDef和TestExport,而没有定义导出的TestIn函数则看不见。

二.普通DLL程序的编写:(2)

写一个EXE测试程序,用于调用DLL所导出的的函数,严整DLL的功能。

1.用VC生成一个Win32 Application工程,命名随意,如:ExcuteDllTest,同样选择生成简单代码后点“Finish”。Win32程序的框架代码便生成了。

2.在程序中,先加入#pragma comment(lib,"dllTest"),表示使用dllTest.dll中的导出函数,然后自定义int TestDef();和int TestExport();两个函数原型,接着在WinMain函数中加上对函数的调用和测试。

int result = TestDef();
strDisplay[0] = '0' + result;
MessageBox(NULL,strDisplay, "Answer", MB_OK);
Tags:  如何编写木马 木马编写 dll木马

延伸阅读

最新评论

发表评论