导航:首页 > 源码编译 > dll里有编译时间

dll里有编译时间

发布时间:2023-03-30 14:17:50

⑴ E语言中DLL的介绍

DLL(动态连接库),既然是动态,那么就是有静态连接库,我想如果这么说大家会更明白:
也许有的人在DOS下编写过程序都明白这么一件事情,我写了一个程序,里面有一个功能就是把屏幕的内容翻转在转90°打印出来,那么我需要把整个程序写好放

到我的所有代码中,但是如果我写另外一个程序的时候也有相通的功能,我可以

调用以前的程序这个功能吗?当然是不可以的了,所以我就要重新的写一次,如

果有5个需要调用这个功能的程序,我的这个功能函数需要20K的地方,那么我的

硬盘就有80K的碧历垃圾出现(20k*5 - 20k),这仅仅是一个函数,大家是否可以数

清除WINDOWS如果这样来写,需要多少函数吗?你看看所有的按钮、滚动条、

Listbox\Textbox\checkBox\窗体、打印对话框、颜色对话框、打开、保存、另存

、字体对话框、文件的排列、拷贝、粘贴...... 这一切的一切是不是都需要在所

有的程序中都要写出来呢?如果真的是这个样子,那么我们的windows应该按TB来

计算了(1TB=1024GB),也许你说你的硬盘很大,那么他们还要在运行的时候占

用相同大下的内容呢!所以发展出来了,动态连接库(dll)这个感念:

动态连接,就是把这些相通的功能、函数都放到一种特殊形式的windwos可执行文

件中(dll),生成一个DLL的时候,程序员需要写出,其中包含那些函数需由其

他程序来访问。这个过程叫做对函数的“导出”
创建windows程序的时候,专门的连接程序对程序的对象文件进行扫描,并生成一

个列表,列出那些调用的函数在那个DLL那个位置,指定各个函数所在位置的过程

叫做对函数的“导入”,当程序运行的时候,一旦要求用到执行文件内部没有的

函数,windows就会自动装载动态连接库,使应用程序可以访问这些函数。此时,

每个函数的地址都会解析出来,并且以动态的方式连接到程序里--这便是术语

“动态连接”的由来。
另外还有一个好处,就是当你更新你的这个函数的版本和功能的时候,静态连接

所需要做的工作是多少(假设按windwos来说他有上千个这样的函数,一共有100

多个程序来使用,那静态连接需要100000次的更新,动态连接只需要1000次)
,从而也节省了内存的空间。
动态连接库不一定是DLL扩展名的,也可以是ocx、vbx、exe、drv 等等的
大家可以发现在调用WIN32 api的时候里面都会有说明是来自于那个dll等宿主文

件的
现在我就在这里讲讲一些标准的dll用途:
看下面这个API声明:
Public Declare Function GetWindowsDirectory Lib "kernel32" Alias

"GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long)

As Long
看见kernel32了吗,其实这个就是kernel32.dll的名字,你可以在你的硬盘里找

到他,这就是说GetWindowsDirectory这个函数是在kernel32.dll里面,他的别名

是GetWindowsDirectoryA,()中是他的参数,有两个一个是字符型,一个是长

整型,返回值也是长整型。lpBuffer ------- String,指定一个字串缓冲区,

用于装载Windows目录名。除非是根目录,否则目录中不会有一个中止用的“\”

字符nSize ---------- Long,lpBuffer字串的最大长度,返回值 为Long,复制

到lpBuffer的一个字串的长度。如lpBuffer不够大,不能容下整个字串,就会返

回lpBuffer要求的长度。零表示失败。
这就是API声明的意义所在!枝慧歼
DLL的说明
KERNEL32.DLL ---- 低级内核函数。使用他可以完成内存管理、任务管理、

资源控制等。
USER32.DLL------于windows管理有关的函数。消息猛冲、菜单、光标、计时器

、通信和其他大多数非现实函数都可以从这里找到
GDI32.DLL-------图形设备接口库。于设备输出有关的函数:大多数绘图

、显示场景、图元文件、坐标及其字体函数都可以从这梨找到。
COMDLG32.DLL\LZ32.DLL\VERSION.DLL\---这都是提供一些附加函数的库,包

括通用对话框、文件压缩、版本控制的支持。

COMCTL32.DLL --------一个新的windows控件集合,比如TreeView和RichTextBox

等等,最初这个好像是为了win95而制作的,但是现在也使用与NT下
MAPI32.DLL---------提供了一套电子邮件的专用函数
NETAPI32.DLL--------提供了一套访问和控制网络的函数
ODBC32.DLL--------(不用我再说了吧)ODBC功能的DLL之一
WINMM.DLL------(这可不是WINDOWS的MM)是多媒体控制访问函数集合

windows api正在快速发展和变化,是你我任何单个人都追赶不上的速度发展,幸

运的是我们不用掌握所有的windows API,只是掌握需要经常使用的WINDOWs api

和他的常规结构、基本感念就可以了,这亮点很重要。

⑵ DLL文件编译,高手请指教。

DLL文件即动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源。Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境下操作的许多函数和资源。

DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名。它们向运行于Windows操作系统下的程序提供代码、数据或函数。程序可根据DLL文件中的指令打开、启用、查询、禁用和关闭驱动程序。

DLL的全称是Dynamic Link Library, 中文叫做“动态链接文件”。在Windows操作系统中, DLL对于程序执行是非常重要的, 因为程序在执行的时候, 必须链接到DLL文件, 才能够正确地运行。而有些DLL文件可以被许多程序共用。因此, 程序设计人员可以利用DLL文件, 使程序不至于太过巨大。但是当安装的程序越来越多, DLL文件也就会越来越多, 如果当你删除程序的时候, 没有用的DLL文件没有被删除的话, 久而久之就造成系统的负担了。

DLL是动态连接库。使用动态连接库的一些好处是:
1.多个应用程序共享代码和数据:比如Office软件的各个组成部分有相似的外观和功能,这就是通过共享动态连接库实现的。
2.在钩子程序过滤系统消息时必须使用动态连接库。
3.动态连接库以一种自然的方式将一个大的应用程序划分为几个小的模块,有利于小组内部成员的分工与合作。而且,各个模块可以独立升级。如果小组中的一个成员开发了一组实用例程,他就可以把这些例程放在一个动态连接库中,让小组的其他成员使用。
4.为了实现应用程序的国际化,往往需要使用动态连接库。使用动态连接库可以将针对某一国家、语言的信息存放在其中。对于不同的版本,使用不同的动态连接库。在使用AppWizard生成应用程序时,我们可以指定资源文件使用的语言,这就是通过提供不同的动态连接库实现的。
VC++、C++ Builder、Delphi都可以编写DLL文件。Visual Basic 5.0以上版本也可以编写一种特殊的DLL,即ActiveX DLL。

DLL不是独立运行的程序,它是某个程序的一个部分,它只能由所属的程序调用。用户不能,也不需要打开它。

⑶ C# dll编译问题

这个只有三楼说对了!

事实上我们在引用时自己开发的dll时存在两种引用方式:

  1. 引用时选择的是项目(dll项目也在项目资源管理器中),这里引用最直接,原则上是使用这种引用的方式。

  2. 引用时选择的是文件(直接引用了文件夹中指定的dll),这里引用其实一般用于不一个项目资源管理器时的使用(因为这个dll的源码你无法拿到,或者为了不允许你更改,要求你引用文件而不是项目)

当然,如果条件允许,引用前可以在资源管理器先添加已存在的项目(当然是你要引用的那个项目),然后按第一种引用方式引用!

两种引用方式有一定的区别:

引用项目其实是在项目资源管理器中形成一个依赖关系,这个可以在项目管理管理器上右面查看项目依赖关系(不是在项目上右击,不是在项目上右击,不是在项目上右击,重要的事说三遍,因为很多人连项目与项目资源管理器都没分清!)正是因为有这个项目依赖的关系,所以IDE在编译时会按照依赖关系进行生成——也就是说被引用项目要比引用项目先生成!当然了,我见过一些“牛X"程序员把自己项目中乱写一通,最后形成了一个环状引用,还告诉我说找到了vs的bug,项目生成失败,而且无解!汗了~~自己原理不清楚,你以为臭虫那么好捉?

之所以这么说,就是因为其实你每次生成时,由于依赖关系的原因,引用的永远是最后的dll,不管是有人解释为“所有项目重新生成了,所以能引用到最新的”,还是解释为“直接引用了被引用项目bin中的文件”,还是解释为“通知了依赖项项目更新引用文件”等等不影响你使用的,而且在被引用生成之后,其他的引用都是新的。

第二种其实是引用了一个副本文件!不管你在不在同一项目资源,只要是直接引用文件的这种,都实都是将文件到了object文件夹中,而这个文件夹的文件在生成时会生成到bin文件夹中!也有人理解为到了bin文件夹中,但是他们搞不清楚——类似于以上文件明明引用源中的dll已经更新,而bin中的怎么还是旧文件呢?其实文件引用方式是引用到项目中一个中间文件中了,这个文件并没有在vs上显示(文件组中存在,有些还是隐藏的),众所周知的是bin只有在编译的时候才会生成,所以很多人会以为源dll文件也是此时生成的,事实上根本上不是!而是你在引用时已经将文件到了隐藏的目录中!在生成时再将其到bin中!所以即引源文件夹的内容已经改变,这个文件也不会再发生错误了!如果这样理解了,那么楼主的问题就已经知道原因了!

如果是项目引用,不用管的,引用的永远是最新的dll!

如果是文件引用,在dll更新时,应该在项目中引用文件夹中找到文件,然后右击“刷新引用”即可!这个方式相当于再次从将源dll 到中间object目录中。当然,开发过程中使用的就是新的dll了!另一种方式更绝,就是删除引用文件,重新引用(这绝对可行,但怎么也不那么优雅,人家原因的dll位置又没换)!

如果让我根据楼主的描述,我猜你使用的也是文件引用方式!那么知道文件引用方式,怎么解决就不成问题了!

你一定奇怪,为什么还要有文件引用方式?我想引用哪个直接把那个项目添加到我的项目资源管理器中不就行了?就算两台机器上,一个dll也是,把整个的项目拷贝过来不也行吗(大多时候我们使用TFS时,可以直接将项目拉回来的)?为什么会存在这样文件引用呢?它的作用就为了解决我们拿不到源码无法添加到项目中而出现的引用方式吗?答案是肯定的,但只是一部分原因!我来告诉你另一部分的原因!

Fake!Fake!Fake! 如果你懂这个单词,那么一定知道我的意思,如果不懂我来告诉你吧,这个单词就是“假的”!如果dll开发是一个任务(develop task), 而引用该dll的应用软件或中间件也是一个任务(delevop task),在正常的开发关系上来说,dll开发任务是应用开发的前驱,也就是正常的需要dll开发完成后才进行应用软件的开发(很多人的模式都是这样的),但现在情况是,dll开发需要5天,而应用开发也需要5天,产品却要7天内交付!那么是说两个任务要同时进行develop! 怎么办?怎么办?应用开发程序员却说你没dll让我怎么引用——听起来很有道理,不少管理者向dll开发team压压力,你们在两天内加班完成,我给你们放5天假!事实上两天内加班完成的dll其实质量可想而知!为什么不Fake呢!

Fake的意思就是应用开发人员引用一个“假的”dll! 标记为Fake的引用文件非常好玩——你可以在开发中试一下!它只需要在成品是组合一下就可以了(因为引用文件会使用其文件的版本/哈希值/空间等相关校验,而这个即更是更新后的文件也存在有些值不一样——如publicToken值,而引用Fake则就是解决了这个问题)!

所以说文件引用的方式同时还是打破任务前驱方式的一种行为,有利于扁开化安排开发时间!所以文件引用也存在其实必要的因素!

  1. 无源码时的引用(只提供了dll没提供源码),比如某些SDK等,一般用于稳定的成熟的,基本上更新不大的dll文件使用。

  2. 分支版本控制(由于开发过程中存在诸多的分支版本)应用程序员无法分清楚或不需分清楚分支版本时,引用源码则会对应用开发造成一定的混淆,当然在dll开发立场上他们当然知道该用哪个版本的源码,对于应用开发的team,没有必要增加他们学习时间。各版本的区别他们并不知道细节。

  3. Fake引用!并行开发成为可能性(虽然可以引用另一个团队的dll源码,如果你愿意每次生成时都更新他们的源码——他们有可能同时在改动,还要以无比的关爱来忍受他们的千奇百怪的bug的话,我同意,当然还得忍受这种原因导致你自己的进度缓慢)。

也正是因为如此,所以文件引用可能会出现的现象要知道怎么处理。

⑷ AVIFILE.DLL是什么文件。有什么用途,可以删掉吗

这个文件是系统中支持AVI格式文件的动态链接库,删除有可能影响AVI格式文件的播放。

⑸ reflector反编译DLL文件:DLL文件中有一段时间控制程序的使用时间,我想把这个时间往后延长

可以用WINHEX打开搜索字符串,找到对应的修改之,当然对代码混淆或者加密的可能就无能为力了

⑹ 系统问题

教你查杀DLL木马

从DLL技术说起

要了解DLL木马,就必须知道这个“DLL”是什么意思,所以,让我们追溯到几年前,DOS系统大行其道的日子里。在那时候,写程序是一件繁琐的事情,因为每个程序的代码都是独立的,有时候为了实现一个功能,就要为此写很多代码,后来随着编程技术发展,程序员们把很多常用的代码集合(通用代码)放进一个独立的文件里,并把这个文件称为“库”(Library),在写程序的时候,把这个库文件加入编译器,就能使用这个库包含的所有功能而不必自己再去写一大堆代码,这个技术被称为“静态链接”(Static Link)。静态链接技术让劳累的程序员松了口气,一切似乎都很美好。可是事实证明,美好的事物不会存在太久,因为静态链接就像一个粗鲁的推销员,不管你想不想要宣传单,他都全部塞到你的手上来。写一个程序只想用到一个库文件包含的某个图形效果,就因为这个,你不磨袜得不把这个库文件携带的所有的图形效果都加入程序,留着它们当花瓶摆设,这倒没瞎指激什么重要,可是这些花瓶却把道路都阻塞了——静态链接技术让最终的程序成了大块头,因为编译器把整个库文件也算进去了。

时代在发展,静态链接技术由于天生的弊端,不能满足程序员的愿望,人们开始寻找一种更好的方法来解决代码重复的难题。后来,Windows系统出现了,时代的分水岭终于出现。Windows系统使用一种新的链接技术,这种被称为“动态链接”(Dynamic Link)的新技术同样也是使用库文件,微软称它们为“动态链接库”——Dynamic Link Library,DLL的名字就是这样来的。动态链接本身和静态链接没什么区别,也是把通用代码写进一些独立文件里,但是在编译方面,微软绕了个圈逗锋子,并没有采取把库文件加进程序的方法,而是把库文件做成已经编译好的程序文件,给它们开个交换数据的接口,程序员写程序的时候,一旦要使用某个库文件的一个功能函数,系统就把这个库文件调入内存,连接上这个程序占有的任务进程,然后执行程序要用的功能函数,并把结果返回给程序显示出来,在我们看来,就像是程序自己带有的功能一样。完成需要的功能后,这个DLL停止运行,整个调用过程结束。微软让这些库文件能被多个程序调用,实现了比较完美的共享,程序员无论要写什么程序,只要在代码里加入对相关DLL的调用声明就能使用它的全部功能。最重要的是,DLL绝对不会让你多拿一个花瓶,你要什么它就给你什么,你不要的东西它才不会给你。这样,写出来的程序就不能再携带一大堆垃圾了——绝对不会让你把吃剩的东西带回家,否则罚款,这是自助餐。(静态链接与动态链接)

DLL技术的诞生,使编写程序变成一件简单的事情,Windows为我们提供了几千个函数接口,足以满足大多数程序员的需要。而且,Windows系统自身就是由几千个DLL文件组成,这些DLL相互扶持,组成了强大的Windows系统。如果Windows使用静态链接技术,它的体积会有多大?我不敢想。

应用程序接口API

上面我们对DLL技术做了个大概分析,在里面我提到了“接口”,这又是什么呢?因为DLL不能像静态库文件那样塞进程序里,所以,如何让程序知道实现功能的代码和文件成了问题,微软就为DLL技术做了标准规范,让一个DLL文件像奶酪一样开了许多小洞,每个洞口都注明里面存放的功能的名字,程序只要根据标准规范找到相关洞口就可以取得它要的美味了,这个洞口就是“应用程序接口”(Application Programming Interface),每个DLL带的接口都不相同,尽最大可能的减少了代码的重复。

用Steven的一句话:API就是一个工具箱,你根据需要取出螺丝刀、扳手,用完后再把它们放回原处。

在Windows里,最基本的3个DLL文件是kernel32.dll、user32.dll、gdi32.dll。它们共同构成了基本的系统框架。
DLL与木马

DLL是编译好的代码,与一般程序没什么大差别,只是它不能独立运行,需要程序调用。那么,DLL与木马能扯上什么关系呢?如果你学过编程并且写过DLL,就会发现,其实DLL的代码和其他程序几乎没什么两样,仅仅是接口和启动模式不同,只要改动一下代码入口,DLL就变成一个独立的程序了。当然,DLL文件是没有程序逻辑的,这里并不是说DLL=EXE,不过,依然可以把DLL看做缺少了main入口的EXE,DLL带的各个功能函数可以看作一个程序的几个函数模块。DLL木马就是把一个实现了木马功能的代码,加上一些特殊代码写成DLL文件,导出相关的API,在别人看来,这只是一个普通的DLL,但是这个DLL却携带了完整的木马功能,这就是DLL木马的概念。也许有人会问,既然同样的代码就可以实现木马功能,那么直接做程序就可以,为什么还要多此一举写成DLL呢?这是为了隐藏,因为DLL运行时是直接挂在调用它的程序的进程里的,并不会另外产生进程,所以相对于传统EXE木马来说,它很难被查到。

DLL的运行

虽然DLL不能自己运行,可是Windows在加载DLL的时候,需要一个入口函数,就如同EXE的main一样,否则系统无法引用DLL。所以根据编写规范,Windows必须查找并执行DLL里的一个函数DllMain作为加载DLL的依据,这个函数不作为API导出,而是内部函数。DllMain函数使DLL得以保留在内存里,有的DLL里面没有DllMain函数,可是依然能使用,这是因为Windows在找不到DllMain的时候,会从其它运行库中找一个不做任何操作的缺省DllMain函数启动这个DLL使它能被载入,并不是说DLL可以放弃DllMain函数。

DLL木马技术分析

到了这里,您也许会想,既然DLL木马有那么多好处,以后写木马都采用DLL方式不就好了吗?话虽然是这么说没错,但是DLL木马并不是一些人想象的那么容易写的。要写一个能用的DLL木马,你需要了解更多知识。

1.木马的主体

千万别把木马模块写得真的像个API库一样,这不是开发WINAPI。DLL木马可以导出几个辅助函数,但是必须有一个过程负责主要执行代码,否则这个DLL只能是一堆零碎API函数,别提工作了。

如果涉及一些通用代码,可以在DLL里写一些内部函数,供自己的代码使用,而不是把所有代码都开放成接口,这样它自己本身都难调用了,更不可能发挥作用。

DLL木马的标准执行入口为DllMain,所以必须在DllMain里写好DLL木马运行的代码,或者指向DLL木马的执行模块。

2.动态嵌入技术

Windows中,每个进程都有自己的私有内存空间,别的进程是不允许对这个私人领地进行操作的,但是,实际上我们仍然可以利用种种方法进入并操作进程的私有内存,这就是动态嵌入,它是将自己的代码嵌入正在运行的进程中的技术。动态嵌入有很多种,最常见的是钩子、API以及远程线程技术,现在的大多数DLL木马都采用远程线程技术把自己挂在一个正常系统进程中。其实动态嵌入并不少见,罗技的MouseWare驱动就挂着每一个系统进程-_-

远程线程技术就是通过在另一个进程中创建远程线程(RemoteThread)的方法进入那个进程的内存地址空间。在DLL木马的范畴里,这个技术也叫做“注入”,当载体在那个被注入的进程里创建了远程线程并命令它加载DLL时,木马就挂上去执行了,没有新进程产生,要想让木马停止惟有让挂接这个木马DLL的进程退出运行。但是,很多时候我们只能束手无策——它和Explorer.exe挂在一起了,你确定要关闭Windows吗?

3.木马的启动

有人也许会迫不及待的说,直接把这个DLL加入系统启动项目不就可以了。答案是NO,前面说过,DLL不能独立运行,所以无法在启动项目里直接启动它。要想让木马跑起来,就需要一个EXE使用动态嵌入技术让DLL搭上其他正常进程的车,让被嵌入的进程调用这个DLL的DllMain函数,激发木马运行,最后启动木马的EXE结束运行,木马启动完毕。

启动DLL木马的EXE是个重要角色,它被称为Loader,如果没有Loader,DLL木马就是破烂一堆,因此,一个算得上成熟的DLL木马会想办法保护它的Loader不会那么容易被毁灭。记得狼狈为奸的故事吗?DLL木马就是爬在狼Loader上的狈。

Loader可以是多种多样的,Windows的rundll32.exe也被一些DLL木马用来做了Loader,这种木马一般不带动态嵌入技术,它直接挂着rundll32进程运行,用rundll32的方法(rundll32.exe [DLL名],[函数] [参数])像调用API一样去引用这个DLL的启动函数激发木马模块开始执行,即使你杀了rundll32,木马本体还是在的,一个最常见的例子就是3721中文实名,虽然它不是木马。(图3--启动项)

注册表的AppInit_DLLs键也被一些木马用来启动自己,如求职信病毒。利用注册表启动,就是让系统执行DllMain来达到启动木马的目的。因为它是kernel调入的,对这个DLL的稳定性有很大要求,稍有错误就会导致系统崩溃,所以很少看到这种木马。

有一些更复杂点的DLL木马通过svchost.exe启动,这种DLL木马必须写成NT-Service,入口函数是ServiceMain,一般很少见,但是这种木马的隐蔽性也不错,而且Loader有保障。
4.其它

到这里大家也应该对DLL木马有个了解了,是不是很想写一个?别急,不知道大家想过没有,既然DLL木马这么好,为什么到现在能找到的DLL木马寥寥无几?现在让我来泼冷水,最重要的原因只有一个:由于DLL木马挂着系统进程运行,如果它本身写得不好,例如没有防止运行错误的代码或者没有严格规范用户的输入,DLL就会出错崩溃。别紧张,一般的EXE也是这样完蛋的,但是DLL崩溃会导致它挂着的程序跟着遭殃,别忘记它挂接的是系统进程哦,结局就是……惨不忍睹。所以写一个能公布的DLL木马,在排错检查方面做的工作要比一般的EXE木马多,写得多了自己都烦躁……

DLL木马的发现和查杀

经常看看启动项有没有多出莫名其妙的项目,这是Loader的所在,只要杀了狼,狈就不能再狂了。而DLL木马本体比较难发现,需要你有一定编程知识和分析能力,在Loader里查找DLL名称,或者从进程里看多挂接了什么陌生的DLL,可是对新手来说……总之就是比较难啊比较难,所以,最简单的方法:杀毒软件和防火墙(不是万能药,切忌长期服用)。

DLL木马检测与清除实例

守护者(NOIR—QUEEN)是一个典型的DLL木马程序,其服务端以DLL文件的形式插入到系统的Lsass.exe进程中。Lsass.exe进程是一个本地的安全授权服务,并且它会为使用Winlogon服务的授权用户生成一个进程,如果授权是成功的,Lsass就会产生用户的进入令牌。由于Lsass.exe是系统的关键进程,不能被终止,那么我们该如何清除这样的木马呢?
守护者木马入侵系统后,会在服务中添加一项名为“QoSserver”的服务,并将“QoSserver.dll”文件插入到Lsass进程中,使其可以隐藏进程并自动启动。我们利用“进程猎手”这样的工具查看Lsass进程所调用的DLL文件,并与木马入侵前的信息比较,可以发现Lsass进程中增加了“QoSserver.dll”文件。记录下该文件的具体位置,本例中为“C:\Windows\system32\QoSserver.dll”。

打开WindowsXP任务管理器,切换到“进程”选项卡中,结束“QoSserver.exe”进程,同时将系统目录下的“QoSserver.exe”文件删除。然后运行Regedit,在注册表编辑器中依次展开[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\QoSserver],直接删除“QoSserver”项,重启计算机。重启之后,再将系统目录下的“QoSserver.dll”文件删除。需要注意的是,如果前面未删除“QoSserver.exe”文件,而只删除了QoSserver服务并重启之后,插入到Lsass进程当中的“QoSserver.dll”又会生成另外一个名为“AppCPI”的服务。这时再次打开注册表编辑器,展开[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AppCPI],删除AppCPI项。如果QoSserver服务同时复活,则要将该服务的启动类型改为“禁用”。重新启动计算机后,再删除系统目录下的木马文件。
防范DLL木马

1.安装木马查杀工具。对于多数人而言,要想通过手工查杀DLL木马是不太现实的,因此安装一款可以查杀此类木马的反病毒软件,是非常有必要的。这里还要提醒读者的是,应及时升级病毒数据库,这样才能保证有效地查杀绝大部分木马病毒。当然,我们也可以在计算机中安装那些专门针对木马的查杀工具,例如木马克星。

2.查看是否有不明端口开放以及对端口通信进行监控。只要木马进行连接,接受/发送数据则必然会打开端口,DLL木马也不例外,我们可以通过“Netstat-ano”命令来查看TCP/UDP端口的连接,以及开放端口的进程标识符,也可以直接使用进程端口查看工具Fport.exe来查看与端口对应的进程,以发现是否有不明的连接和端口开放。另外,有些DLL木马通过端口劫持或者端口重用的方法来进行通信,所以仅是查看端口还是不够的,有必要的话,我们可使用嗅探器来了解打开的端口到底在传输些什么数据。

3.检查系统目录下是否有可疑的DLL文件。安装好系统和所有应用程序之后,可对系统目录下System32文件夹中的EXE和DLL文件作一记录:在命令提示符下执行“dir*.exe>bak1.txt&dir*.dll>bak2.txt”,将所有的EXE和DLL文件信息导出成TXT文件保存。当日后发现异常时,可以使用相同的命令再次备份,并使用FC命令比较两次的EXE文件和DLL文件。通过这种方法,我们可以发现可疑的EXE和DLL文件,同时通过文件的大小、创建时间来判断是否为DLL木马。

4.查看系统进程调用的DLL文件。当我们怀疑有DLL木马插入到系统进程,可以使用一些第三方进程工具来查看进程所调用的DLL文件,然后进一步确认是否中了DLL木马。此类查看工具有进程猎手、进程间谍等等。另外,我们也可以使用XP系统自带的命令行工具TaskList,来显示进程调用的DLL文件,并将这些信息导出成TXT文件保存,以便随时进行比较。

但我们就要利用这种木马 因为他比较难查杀 所以~~~~~~~~~~~~~

DLL注入木马如是说

DLL库链接文件,是Windows系统中许多驱动和程序运行时必需的文件。一般来说,这类文件无法单独运行,必须通过某个EXE文件调用该DLL文件,从而执行相应的功能。同时,当该EXE文件正在执行时,调用的DLL文件无法被删除。正因为由于DLL文件具有隐蔽性,并且很难删除,因此目前许多流行的木马程序都采用了DLL文件方式进行安装,将木马DLL文件加载到某个正常的系统进程中,从而达到隐藏木马进程和保护木马文件的目的——这就是所谓的DLL注入式木马。

木马是如何将DLL文件进行加载的呢?这里我们以一个黑客常用的DLL木马“上兴远程控制木马”为例进行讲解。

运行“上兴木马”后,点击界面中“配置服务端”按钮,打开服务端生成程序。在“DNS域名解析更新IP”中输入自己的IP地址或者动态DNS域名,在安装名称中输入生成的服务端DLL文件名。木马运行后,该DLL文件将被注入到下面“宿主进程名”中指定的系统进程中,默认为“explorer.exe”。最后点击生成按钮,即可生成木马文件“rejoice_06.exe”。

将生成的木马文件传播,当其他用户运行后,就可以通过上兴木马远控客户端进行控制了。

警报,病毒无法清除

如果系统中被植入了DLL木马,将会出现什么情况呢?

首先,系统被黑客远程控制,出现数据丢失等情况;其次,杀毒软件会报警系统中有病毒,但是却无法进行清除。例如,在电脑中运行了上面制作的上兴远控木马后,笔者电脑上安装的杀毒软件提示发现病毒,但是在删除DLL病毒文件时却失败了。即使我们手工删除病毒文件,也会因为DLL文件正在使用中,所以也无法彻底删除。即使进入安全模式,得到的也是同样的结果。
另外,由于DLL木马是插入到系统进程中的,因此通过任务管理器等进程工具,也无法发现任何木马进程,这给木马的清除带来了很大的困难!

无法删除病毒文件,无法查找到木马进程,那么到底该如何清除DLL注入式木马呢?

无所遁形,揪出木马藏身之所

虽然木马没有自己的进程,但是有一个宿主进程,只要结束宿主进程,停止DLL文件的调用,就梢陨境鼶LL文件,进而清除木马。因此,清除DLL木马的第一步,就是找到木马注入的宿主进程。那么,如何才能找到木马注入的宿主进程呢?且让我们细细看来。

以清除“上兴远控木马”为例,从杀毒软件的报警提示中已经知道木马DLL文件名为“rejoice.dll”。因此,就可以通过一些查看进程调用DLL文件的进程管理工具,找到该文件的宿主进程,此类工具很多,比如大名鼎鼎的ICESword。

运行IceSword后,点击左侧边栏“查看→进程”,就可以在其右侧窗口中看到所有进程列表。右键点击某进程,在弹出菜单中选择“模块信息”命令,即可看到该进程调用的所有DLL文件。

提示:DLL注入式木马通常是将DLL文件,加载到explorer.exe、svchost.exe、winlogon.exe、iexplore.exe等系统进程中的。因此在查找DLL宿主文件时,可以关闭其它无关的程序,然后依次检查这几个进程中的DLL文件。

不过一个一个的检查系统进程,确实有些麻烦,如何才能快速的定位木马的宿主进程呢?可以使用一款名为“procexp”的进程管理工具。运行procexp后,在程序界面中间显示的是树状进程关系列表,下方是每个进程的详细信息。点击菜单“Find→Find DLL”命令,打开DLL文件查找对话框,在“DLL Substring”中输入要查找的关键词,这里输入刚才杀毒软件扫描出的DLL文件名“rejoice.dll”。然后点击“Search”按钮,在下方的列表中就可以看到该DLL文件是被哪个进程调用的了。 牛刀小试,清除普通进程DLL注入木马

对于大部分DLL注入木马,其注入到“iexplore.exe”和“explorer.exe”这两个进程。对于这类普通进程的DLL木马,清除将是非常方便的。

如果DLL文件是注入到“iexplore.exe”进程中,由于此进程就是IE浏览器进程,因此就需要先关掉所有IE窗口和相关程序,然后直接找到DLL文件进行删除就可以了。

如果DLL文件是注入到“explorer.exe”进程中,那么就略显麻烦一些。由于此进程用于显示桌面和资源管理器,因此,当通过任务管理器结束掉“explorer.exe”进程时,桌面无法看到,桌面上所有图标消失掉,"我的电脑"、"网上邻居"等所有图标都不见了,同时,也无法打开资源管理器找到木马文件进行删除。怎么办呢?

实际上,解决的方法也很简单。在任务管理器中点击菜单“文件→新任务运行”,打开“创建新任务”对话框,点击“浏览”按钮,通过浏览对话框就可以打开DLL文件所在的路径。然后选择“文件类型”为“所有文件”,即可显示并删除DLL文件了。

在浏览对话框中删除DLL文件
除恶务尽,清除特殊DLL注入木马

除了以上所说的注入普通进程的DLL木马之外,还有许多木马注入到系统里关键进程中,比如svchost.exe、smss.exe、winlogon.exe进程。这些进程使用普通方式无法结束,使用特殊工具结束掉进程后,却又很可能造成系统崩溃无法正常运行的情况。对于这些木马,我们可以通过以下两种方法进行清除。

1.使用IceSword卸载DLL文件

IceSword的功能十分强大,我们曾在以前作过介绍,在这里,就可以利用它卸载掉已经插入到正在运行的系统进程中的DLL文件。在IceSword的进程列表显示窗口中,右键点击DLL木马宿主进程,选择弹出命令“模块信息”。在进程模块信息对话框中找到DLL木马文件,选择文件后点击“强制解除”命令,即可将系统进程中的DLL木马文件卸载掉了

卸载系统进程中的DLL木马

2.SSM终结所有DLL木马

使用IceSword可以卸载大部分的DLL木马文件,但还有某些特殊木马在卸载时,却会造成系统崩溃重启。例如一款着名的木马PCShare采用了注入“winlogon.exe”进程的方式运行,由于该进程是掌握Windows登录的,因此在使用IceSword卸载时,系统将会立即异常重启,根本来不及清除掉DLL文件,在重启后DLL木马又被再次加载。对于这类DLL木马,必须在进程运行之前阻止DLL文件的加载。接下来,我们又要用到一款用于阻止DLL文件加载的安全工具——“System Safety Monitor”(简称SSM)。

提示:SSM是一款俄罗斯出品的系统监控软件,通过监视系统特定的文件(如注册表等)及应用程序,达到保护系统安全的目的。这款软件功能非常强大,可以辅助防火墙和杀毒软件更好的保护系统安全。

运行SSM,在程序界面中选择“规则”选项卡,右键点击中间规则列表空白处,选择“新增”命令,弹出文件浏览窗口,选择浏览文件类型为“DLL files”,在其中选择指定文件路径“C:\Windows\system32\rejoice.dll”。点击“确定”按钮后,即可把“rejoice.dll”文件添加到规则列表中,然后在界面下方的“规则”下拉列表中选择“阻止(F2)”。完成添加规则设置后,点击“应用设置”按钮,后重启系统。

阻止DLL文件加载到进程

提示:在重启系统前请检查SSM的设置,确保SSM随系统启动而加载运行。

当系统重启时,SSM就会自动阻止相关进程调用“rejoice.dll”木马文件。这样,该木马文件便不会被任何程序使用,在硬盘中找到它,直接删除即可。

雁过无声,清除木马残留垃圾

DLL注入型木马并不会感染其它文件,只要结束木马进程并删除掉病毒文件木马,木马就没有任何危害性了。剩下的工作就是清除掉木马在注册表和其它启动文件中留下的项目。方法很简单,点击“开始→运行”,输入“regedit”命令,就会打开“注册表编辑器”,利用搜索功能,便可以清除木马在注册表中留下的垃圾;输入“mscnofig”命令,就可以打开系统配置实用程序,清除木马在启动文件中的踪影。

编后:木马选择注入的系统进程也不尽相同。在碰到此类木马时,我们可以首先考虑用procexp之类的工具,查找出DLL文件的宿主进程。找到宿主进程后,如果是注入到普通可结束的进程中,可以直接将宿主进程终止后删除DLL木马文件即可。如果DLL文件是注入到系统关键进程中的话,可以考虑用IceSword卸载DLL文件;如若失败,那么直接用SSM建立规则,阻止DLL文件的加载就可以了。

个人强烈建议:你也可以利用一些软件的 “粉碎文件” 工具也可以达到预期杀毒的效果.
---
回答比较长,希望你能解决问题。

⑺ 不用头文件,能否调用dll中的导出类(每个编程人员都可能想到的问题)

这个好像不行啊,最少你需要知道类或函数的声明啊。
无论dll中导出函数或是类。
也无论你是使用隐式搭仔调用或是显示调用dll中的函数,你都需要先知道函数声明,否则一切都是无用的。只不过是函数声明由dll工程移到了调用这个dll的工程。
你说对不对。

如果要显示调用dll中导出的类,神枝拿可以通过如下方法实现。
DLL中:
class A//此类不用导出。
{
...
};
A* create_instance()//应该定义为导出函数。

return new A();


//调用DLL的工程
A* (*ptrAInst)();
loadlibrary(...);//具体函数参见不同操作系统的编程手册
ptrAInst = getprocaddress(“create_instance”);//具体函数参见不同操作系统的编程手册
...//处理某些工作
freelibrary(...);/游搭/工作处理完后释放,具体函数参见不同操作系统的编程手册

⑻ 一个应用程序里有很多DLL是怎么编译出来的

DLL就是功能独立出来的软件包,主要就是为了实现程序功能模块的分割,一个DLL可以同时在系统中被多个EXE进程映射,而时间上在内存中的拷贝只有一份。
DLL和EXE一样都是PE文件。

比如你的控制台程序(EXE的)要引用第三方的软件包,你就 可以将他们提供的lib文件加入到你的程序中,使用“#pragram comment(lib,"xxx.lib") ”——如果对方提供有.h文件,也要将其在包含在cpp的前面,或者延迟加载“LoadLibrary / GetProcAddress / FreeLibray ”,

自己也可以做个dll,导出函数、类、变量,等

任何一个程序都默认包含了系统的几个dll库文件。

⑼ BKGND.DLL和BKGND.ini分别是什么是什么意思呢

BKGND.DLL..是按键精灵的"动态链接库"
动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提圆碧胡供了一种方法,使进程可以调用不属于其可慧稿执行代码的函数。

INI是英文“初始化(Initial)”的缩写...
BKGND.INI..是脚本,变量参数的设置声明。是文本模式。
某些程序包含自身的INI文件。这些文件的内容的修改通常是通过该程序的用户界面来更改程序的特征,并不是通过编辑文件本身来进行橘拦的。

文件名: bkgnd.dll
更新日期: 2010-01-03
文件版本: 3.1.9
占用空间: 512 KB
所属公司: Noromaa Solutions
编译时间: 2004-3-9

⑽ 可以让QT只编译出Windows用的dll库么这样编译的时间会快点吧

不论你使用预编译/ccache/only build no rebuild等方没州法加速编译,都会生成.a,这弊哗个是dll的导入库,完整的扩租察行展名应该是.dll.a

阅读全文

与dll里有编译时间相关的资料

热点内容
更新电视剧最快的网站 浏览:134
兄弟训诫文严厉 浏览:607
李楠程序员 浏览:288
山推管家app怎么改密码 浏览:680
贷款结束什么时候解压 浏览:142
18命令方块代码 浏览:936
安卓手机视频怎么传到mac电脑上 浏览:932
马缨花app是什么 浏览:6
python金融分析招聘 浏览:60
可以直接写电影就有免费 浏览:108
北京一卡通app换了手机怎么弄 浏览:155
有程序员小说 浏览:688
点开就能看的网址 浏览:450
单片机控制和plc控制系统设计 浏览:29
她通常去电影院英文翻译 浏览:274
阿里个人云服务器叫什么名字 浏览:298
萱萱日记 浏览:707
芯片app有什么用 浏览:204
DaDa兔 浏览:969
卡罗拉烟气压缩机 浏览:470