动态链接

2024-08-25

动态链接(精选八篇)

动态链接 篇1

关键词:DLL,编译,链接

1 DLL (Dynamic Link Library) , 中文名称为“动态链接文件”

在Windows操作系统中, DLL对于程序执行是非常重要的, 因为程序在执行的时候, 必须链接到D L L文件, 才能够正确地运行。有些D L L文件可以被许多程序共用。如果程序中用到了D L L, 这样我们可以把更多的文件和函数放到D L L中, 从而使程序更容易维护。

动态链接库是不能直接运行的, 更不能接收消息。D L L文件是在其他模块中进行调用的。

DLL多数情况下是带有DLL扩展名的文件, 有时也是E X E或其他扩展名。在我们常用的操作系统中, 很多程序都要去调用DLL, 从而为Windows操作系统提供代码、数据或函数。

在使用动态库的时候, 要提供两个文件:一个引入库和一个D L L。引入库包含被D L L导出的函数和变量的符号名, D L L包含实际的函数和数据。当程序编译链接可执行文件时, 就要链接引入库, D L L中的函数代码和数据不是直接到可执行文件中, 只是在程序运行的时候, 再去加载D L L, 访问DLL中导出的函数。D L L是某个程序的一个部分, 它只能由所属的程序调用。因此在调用DLL时, 引入库和DLL是不能少的。

2 应用程序用DLL主要有如下原因

(1) 多个应用程序共享代码和数据:比如很多程序有更换界面的功能, 其实就是用到了DLL。

(2) 在钩子程序过滤系统消息时必须使用动态连接库。

(3) 动态连接库将一个大的应用程序分为几个小的模块, 这样我们在开发程序时, 主要是开发一些大的程序, 就可以分工实现, 每个组实现一个功能, 放到D L L中, 这样更能体现出合作开发的强势。

(4) 让应用程序具有多种语言版本, 需要使用动态连接库。使用动态连接库可以将针对某一国家、语言的信息存放在其中。对于不同的版本, 使用不同的动态连接库。在使用App Wizard生成应用程序时, 我们可以指定资源文件使用的语言, 这就是通过提供不同的动态连接库实现的。

3 用VC++6.0制作动态链接库的步骤:动态链接库

d l l是包含共享函数库的二进制文件, 可以被多个应用程序同时使用。建立应用程序的可执行文件时, 不必将D L L连接到应用程序中, 而是在运行时动态装载D L L, 装载时D L L被映射到调用进程的地址空间中。通常我们在调用DLL时所需的DLL文件必须位于以下三个目录之一。

(1) W i n d o w s的系统目录:w i n d owssystem。

(2) DOS中path所指出的任何目录。

(3) 程序所在的目录。

我们一般是放在程序所在的目录。

动态链接库 (D L L) 结构应用方法如下。

(1) 实现文件 (.cpp文件为例) 。

包含D L L入口点处理函数和导出函数, 以及被导出函数调用的函数的代码。

BOOL Dll Main (HANDLE h Module) 。

以下为各函数: (被调用函数和导出函数之一) 。

void WINAPI sub (int a, int b) 。

DLLMain表示在Windows中DLL开始执行的地方。

(2) 模块定义文件 (.DEF) 是由一个描述D L L属性的模块语句组成的文本文件, 每个.D E F文件至少必须包含以下模块定义语句。

第一个语句必须是LIBRARY语句, 指出DLL的名字。

EXPORTS语句列出被导出函数的名字。

可以使用DESCRIPTION语句描述DLL的用途 (此句可选) 。

格式如下。

EXPORTS Han L@1

(3) 函数原型声明文件。

4 结语

通过DLL分析和用法介绍, 能够理解DLL的本质, 从而达到在开发应用程序时用到DLL, 让程序运行效率更高。在以后的编程中, 只有多用DLL, 才能深刻理解DLL的工作原理。

参考文献

[1] (美) 理查德[著].windows核心编程[M].机械工业出版社.

无法定位程序输入点 于动态链接库 篇2

有不少网友会在使用电脑的时候,在电脑上打开程序时会弹出“无法定位程序输入点于动态链接库上”的提示框,让网友非常烦恼。经过分析,我们总结出了以下解决方案,可以彻底解决“无法定位程序输入点于动态链接库上”问题。

当无法定位动态链接库时,一般会出现什么现象?

现象一:电脑开机启动时,会弹出“无法定位动态链接库”提示框。

现象二:运行网络游戏或单机游戏时,会弹出“无法定位程序输入点于动态链接库上”提示框。

现象三:运行某个软件时,显示无法定位程序输入点。

什么是动态链接库?

动态链接库英文缩写为DLL,它并不是可执行的文件,它是能向多个程序提供公用代码函数和数据的封装库,程序所需要的一些函数和数据被事先封装在DLL文件中,当程序运行时可以主程序需要调用这些DLL动态链接库。

那么出现无法定位程序输入点 于动态链接库上是什么原因造成的?

一、电脑感染木马病毒导致的

现在很多木马病毒都会替换系统文件,将真正的系统文件改名,比如WININET.dll、Msvcrt.dll 、usp10.dll、midimap.dll、lpk.dll等都会被木马重命名。很多杀毒软件将木马清除后却没有将被修改的系统文件名改回来,这样打开程序调用系统文件时就会出现“无法定位程序输入点 于动态链接库上”的提示框。

比较典型的病毒是绑架类木马,它是一种新型破坏性极强的木马,与传统病毒不同,它是通过绑架系统文件dll实现开机启动。

该木马病毒主要表现:

电脑运行非常慢。

开机很长一段时间才能进入桌面。

程序运行很缓慢。

主流杀毒软件无法正常打开,并且重装系统也无法解决问题。

虽然现在绝大多数杀毒软件已经趋于人性化,一旦发现某些木马病毒绑定系统程序,还是有不少杀毒软件采用一刀切的方式,直接将这些被恶意绑架的系统程序删除(其中就可能包含DLL动态链接库文件),导致系统或应用程序缺少了必要的DLL动态链接库,从而出现“无法定位程序输入点 于动态链接库上”的问题。

解决方案(修复方法)

(一)、软件修复方法:

1、金山卫士

进入金山卫士主界面,选择“查杀木马”,然后点击“快速扫描”即可。通过金山卫士对木马病毒的查杀,而且还可以修复相关dll组件。

2、巨盾木马专杀工具

利用巨盾的内存扫描就可以将这些问题解决。巨盾内存扫描不但会清除木马文件,还会将被木马修改的系统文件还原回来,这样大家在打开程序是就不会出现无法定位程序输入点于动态链接库上的问题了。

3、下载安装主流杀毒软件(NOD32、卡巴斯基、小红伞、Avast、McAfee、诺顿、瑞星、金山毒霸、360安全卫士等),更新病毒库之后全盘杀毒。

(二)、手动修复方法:

记住弹出的“无法定位程序输入点于动态链接库上”提示框中提到的dll文件,将系统提示缺少的*.dll记录下来。重点检查该文件是否有异常,重新复制一份该dll文件到相应的目录(文件夹)下基本就可以解决问题。

1、下载需要的dll文件

通过百度搜索需要的dll文件,把你需要的*.dll(加上DLL后缀,比如WININET.dll)输入到搜索框中,点击“百度一下”按钮,从列出的网页中,选择你要下载dll的网站,进入并下载需要的*.dll文件。

注意:搜索时一定要安装杀毒软件,并打开防火墙,以免因无法定位程序输入点的问题导致进入钓鱼网站或挂马网站,引起电脑中毒。

2、重新启动电脑,按F8键,进入安全模式。

3、将下载的*.dll文件拷贝到 C:windowssystem32 文件夹(目录)下。

4、再重新启动电脑,便可以解决此问题。

注意:如果是游戏程序缺少DLL,下载之后需要将DLL复制到该游戏目录下的指定位置(由于游戏分类众多,所需DLL和位置 各有不同,这需要您在实践中摸索)。

二、更新程序,升级某个软件(或游戏)导致的。

在软件或游戏在线更新时,本该被正常写入或覆盖的DLL动态链接库文件因为意外的断电、重启、写入错误等原因没有下载更新成功,导致软件或游戏在运行过程中缺少必要的DLL动态链接库文件而报错。

解决方案(修复方法):一般来说,重新覆盖安装,即可解决问题。

三、随意删除系统文件,用户自己操作失误造成的。

用户误操作,不小心将程序安装目录中的动态链接库DLL文件删除了,导致程序启动时无法找到相应的文件而报错。

解决方案(修复方法):出现这种情况,需要大家仔细回忆出现问题之前进行过哪些操作,重新下载软件覆盖安装或者到别的电脑上复制一份同名的系统文件,通过这些处理也可以解决问题。

动态链接库在CAA中的应用 篇3

关键词:DLL,CAA,c++6.0,二次开发

1 程序需求

在进行二次开发的过程中, 需要创建一个新线程, 执行一些操作, 而CAA并没有提供多线程的方法, 这样就需要使用DLL, 在DLL创建新线程实现这个操作。

DLL和CAA介绍

DLL:DLL是Dynamic Link Library的缩写, 意为动态链接库。

程序使用DLL的优点

(1) 使用较少的资源

当多个程序使用同一个函数库时, DLL可以减少在磁盘和物理内存中加载的代码的重复量。这不仅可以大大影响在前台运行的程序, 而且可以大大影响其他在Windows操作系统上运行的程序。

(2) 推广模块式体系结构

DLL有助于促进模块式程序的开发。这可以帮助您开发要求提供多个语言版本的大型程序或要求具有模块式体系结构的程序。模块式程序的一个示例是具有多个可以在运行时动态加载的模块的计帐程序。

DLL有两种类型, 当在应用程序中加载DLL时, 可以使用两种链接方法来调用导出的DLL函数。这两种链接方法是加载时动态链接和运行时动态链接。

在加载时动态链接中, 应用程序像调用本地函数一样对导出的DLL函数进行显式调用。要使用加载时动态链接, 请在编译和链接应用程序时提供头文件 (.h) 和导入库文件 (.lib) 。当您这样做时, 链接器将向系统提供加载DLL所需的信息, 并在加载时解析导出的DLL函数的位置。

根据对两种类型的了解, 结合CATIA的开发包CAA开发语言的特点, 选择了第一种加载时动态链接。

CAA:Component Application Architecture (CAA) 组件应用架构, 是第三方产品集成和一般客户进行客户化、个性化设计的强有力的工具。

CATIA (Computer Aided Three&Two Dimensional Interaction Application System, 计算机辅助三维/二维交互式应用系统) V5是IBM/DS基于Windows核心开发的高端CAD/CAM软件系统。作为强大的工程软件, CATIA具有很强的开放性能。用户可以按照自己的需要, 采用不同方式进行各种程度上的开发。

二次开发:二次开发, 简单的说就是在现有的软件上进行定制修改, 功能的扩展, 然后达到自己想要的功能, 一般来说都不会改变原有系统的内核。

具体来说, CATIA的二次开发主要有两种方法:使用宏对CATIA进行二次开发和使用组件应用架构 (CAA-RADE) 对CATIA进行二次开发。

(1) 使用宏 (Macro) 对CATIA进行二次开发。

可以用于自动化 (Automation) 组件, 使用VBScript作为编辑工具, 这是一种交互方式的定制。可以记录用户的操作过程, 自动生成代码。CATIA提供了Automation API用于VB-Script对CATIA的二次开发, Automation API具备了与任何OLE所兼容的平台进行通讯能力。自动化应用接口可以调用“InputBox”和“MsgBox”函数获取用户输入信息和进行输出, 而对于NT用户则可以应用Visual Basic来定义更为复杂的输入输出面板。运行的时候可以给宏关联一个图标, 并置入CATIA显示框架。

(2) 使用组件应用架构 (CAA-RADE) 对CA-TIA进行二次开发, CAA组件应用架构, 是Dassault Systemes产品扩展和客户进行二次开发的强有力工具。

快速应用研发环境Rapid Application Development Environment (RADE) 是一个可视化的集成开发环境, 它提供完整的编程工具组。RADE以Microsoft Visual C++6.0为载体, 开发工具完全集成在了VC++环境中, 并且提供了一个CAA框架程序编译器, 但同时也限制了VC++的部分功能。可以说CATIA CAA-RADE是目前所有高端CAD/CAM开发环境中最为复杂、同时也是功能最为强大的一个。

CAA采用面向对象的程序语言, 开发过程可看作是其组件对象的组合和扩展。CAA采用组件对象模型CAA采用面向对象的程序语言, 开发过程可看作是其组件对象的组合和扩展。CAA采用组件对象模型 (COM) 和对象的连接和嵌入 (OLE) 技术。

2 程序介绍

创建DLL的步骤

第一步:运行AppWizard, 定义项目名为mydll, 选择MFC AppWizard (dll) 。

第二步:在这个例子中, 只有一个AppWizard屏幕出现, 选择MFC扩展DLL (MFC Extension DLL (using shared MFC DLL) , 点击FIN-ISH生成工程。

第三步:创建导出函数

(1) 创建一个文件夹, 将动态链接库导出.h文件和Lib文件放入该文件夹。

(2) 在CAA的.mkmk文件中加入提供头文件 (.h) 和导入库文件 (.lib)

(3) 在CAA程序使用该导出函数的类中添加头文件, 即可使用导出函数。

3 总结

动态链接库在软件中很常见, 它的优点注定它是程序员的最爱。在CATIA的二次开发中还有很多情况使用DLL, 比如说访问数据库, CAA没有访问数据库的接口, 这样就需要使用DLL读取数据库的内容, 与CATIA进行交互。对于CATIA的用户来讲, 有了更多的使用空间

参考文献

[1]《Visual c++6.0编程宝典》, 电子工业出版社, [美]David Simon等著。

动态链接 篇4

一、加载专门为lua写的扩展dll

使用require或package.loadlib方法,在此不做过多解释,

二、加载不是专为lua写的扩展dll

“不是专为lua写的扩展dll”是指:dll中并没有以lua注册函数的方式导出接口,而是以__declspec(dllexport)形式导出的接口。这样就不能使用“package.loadlib”方法调用,而要使用lua5.1封装过的“alien.load”方法。(Lua5.1luaalien.lua)

基本用法:

1、加载alien:

代码如下:

require(“alien”)

2、加载动态链接库:(此处以”msvcrt.dll”为例)

代码如下:

libc = alien.load(“msvcrt.dll”)

3、说明参数类型:(第一个参数表示返回类型,后面的参数表示传入参数类型)

代码如下:

libc.puts:types(“void”, “string”)

Alien转换 Lua numbers 为C的 numeric 类型, 转换 nil 为 NULL,strings 为 const char* , userdata 为 void* 指针,

而函数返回值的转换工作正好相反 (pointer类型转换为userdata)。

以上三步完成了dll的加载,之后便可调用dll中的函数来实现操作,例如:

代码如下:

libc.puts(“test”)

当传入引用类型参数时,需要alien在堆栈中分配空间,lua的变量将值传递给函数参数,如:

代码如下:

scanf = libc.scanf

scanf:types(“int”, “string”, “ref int”, “ref double”)

_, x, y = scanf(“%i %lf”, 1, 1) ― 后面两个参数没有实际意义,只是为了说明参数个数

动态链接 篇5

一台计算机上有65535个端口,如果把计算机看作是一间屋子,那么这65535个端口就可以把它看做是计算机这个房子为了与外界连接所开的65535扇门。如果有的端口在不知的状态下被悄然开启,这个被悄然开启的端口就好比是计算机的“后门”。

后门产生的必要条件有以下3点:

(1)必须以某种方式与其他终端节点相连———由于后门的利用都是从其他节点进行访问,因此必须与目标机使用双绞线、光纤维、串/并口、蓝牙、红外等设备在物理信号上有所连接才可以对端口进行访问。只有访问成功,双方才可以进行信号交流,攻击方才有机会进行入侵。

(2)目标机默认开放的可供外界访问的端口必须在一个以上———默认无任何端口开放的机器是无法连接通信的,而如果开放着的端口外界无法访问,同样没有办法进行入侵。

(3)目标机存在程序设计或人为疏忽,导致攻击者能以权限较高的身份执行程序。并不是任何一个权限的帐号都能够被利用的,只有权限达到操作系统一定要求的才允许执行,诸如修改注册表、修改log记录等。

1 后门原理

1.1 动态链接程序库

动态链接程序库简称:DLL,作用在于为应用程序提供扩展功能。应用程序想要调用DLL文件,需要跟其进行“动态链接”;从编程的角度,应用程序需要知道DLL文件导出的API函数方可调用。由此可见,DLL文件本身并不可以运行,需要应用程序调用。正因为DLL文件运行时必须插入到应用程序的内存模块当中,这就说明DLL文件无法删除。这是由于Windows内部机制造成的,正在运行的程序不能关闭。所以,DLL后门由此而生。

1.2 特点

把一个实现了后门功能的代码写成一个DLL文件,然后插入到一个EXE文件当中,使其可以执行,这样就不需要占用进程,也就没有相对应的PID号,也就可以在任务管理器中隐藏。

DLL文件本身和EXE文件相差不大,但必须使用程序(EXE)调用才能执行DLL文件。DLL文件的执行需要EXE文件加载,但EXE想要加载DLL文件,就需要知道一个DLL文件的入口函数(即DLL文件的导出函数),所以,根据DLL文件的编写标准:EXE必须执行DLL文件中的DLLMain()作为加载的条件(如同EXE的mian())。

DLL后门基本分为两种:

(1)把所有功能都在DLL文件中实现。

(2)把DLL做成一个启动文件,在需要的时候启动一个普通的EXE后门。

常见的编写方法:

(1)只有一个DLL文件

这类后门很简单,只把自己做成一个DLL文件,在注册表Run键值或其他可以被系统自动加载的地方,使用Rundll32.exe来自动启动。Rundll32.exe是什么?顾名思意,“执行32位的DLL文件”。它的作用是执行DLL文件中的内部函数,这样在进程当中,只会有Rundll32.exe,而不会有DLL后门的进程,这样,就实现了进程上的隐藏。

如果看到系统中有多个Rundll32.exe,这证明用Rundll32.exe启动了多个DLL文件。当然,这些Rundll32.exe执行的DLL文件是什么,都可以从系统自动加载的地方找到。

系统中还有一个Rundll.exe文件,其意思是“执行16位的DLL文件”。

Rundll32.exe使用的函数原型:

其命令行下的使用方法为:Rundll32.exe DLLname,Functionname[Arguments]

DLLname为需要执行的DLL文件名;Functionname为前边需要执行的DLL文件的具体引出函数;[Arguments]为引出函数的具体参数。

例如要实现强行关闭所有程式并关机功能,其命令行执行为:rundll32.exe user.exe,exitwindows

(2)替换系统中的DLL文件

这类后门就比上边的先进一些,它把实现了后门功能的代码做成一个和系统匹配的DLL文件,并把原来的DLL文件改名。遇到应用程序请求原来的DLL文件时,DLL后门就启一个转发的作用,把“参数”传递给原来的DLL文件;如果遇到特殊的请求时(比如客户端),DLL后门就开始启动并运行了。

把所有操作都在DLL文件中实现最为安全,但需要的编程知识也非常多,也非常不容易编写。所以,这类后门一般都是把DLL文件做成一个“启动”文件,在遇到特殊的情况下(比如客户端的请求),就启动一个普通的EXE后门;在客户端结束连接之后,把EXE后门停止,然后DLL文件进入“休息”状态,在下次客户端连接之前,都不会启动。但随着微软的“数字签名”和“文件恢复”的功能出台,这种后门已经逐步衰落。

(3)动态嵌入式

这才是DLL后门最常用的方法。其意义是将DLL文件嵌入到正在运行的系统进程中。在Windows系统中,每个进程都有自己的私有内存空间,但还是有种种方法能进入其进程的私有内存空间实现动态嵌入式。由于系统的关键进程是不能终止的,所以这类后门非常隐蔽,查杀也非常困难。常见的动态嵌入式有:“挂接API”、“全局钩子(HOOK)”、“远程线程”等。

远程线程技术指的是通过在一个进程中创建远程线程的方法来进入那个进程的内存地址空间。当EXE载体(或Rundll32.exe)在那个被插入的进程里创建了远程线程,并命令它执行某个DLL文件时,DLL后门就挂上去执行了,这并不会产生新的进程,要想让DLL后门停止,只有让这个链接DLL后门的进程终止。但如果和某些系统的关键进程链接,那就不能终止了,如果终止了系统进程,那Windows也随即被终止。

1.3 DLL木马注入程序

这里涉及到一个非常重要的Windows API CreateRemoteThread。与之相比,人们所习惯使用的CreateThread API函数只能在进程自身内部产生一个新的线程,而且被创建的新线程与主线程共享地址空间和其他资源。而CreateRemoteThread则不同,它可以在另外的进程中产生线程。CreateRemoteThread有如下特点:

(1)CreateRemoteThread较CreateThread多一个参数hProcess,该参数用于指定要创建线程的远程进程,其函数原型为:

(2)线程函数的代码不能位于用来注入DLL木马的进程所在的地址空间中。也就是说,不能想当然地自己写一个函数,并把这个函数作为远程线程的入口函数;

(3)不能把本进程的指针作为CreateRemoteThread的参数,因为本进程的内存空间与远程进程的不一样。

1.4 DLL木马注入的一般步骤

(1)取得宿主进程(即要注入木马的进程)的进程ID dwRemoteProcessId。

(2)取得DLL的完全路径,并将其转换为宽字符模式pszLibFileName。

(3)利用Windows API OpenProcess打开宿主进程,应该开启下列选项:

1)PROCESS_CREATE_THREAD:允许在宿主进程中创建线程;

2)PROCESS_VM_OPERATION:允许对宿主进程中进行VM操作;

3)PROCESS_VM_WRITE:允许对宿主进程进行VM写。

(4)利用Windows API VirtualAllocEx函数在远程线程的VM中分配DLL完整路径宽字符所需的存储空间,并利用Windows API WriteProcessMemory函数将完整路径写入该存储空间。

(5)利用Windows API GetProcAddress取得Kernel32模块中LoadLibraryW函数的地址,这个函数将作为随后将启动的远程线程的入口函数。

(6)利用Windows API CreateRemoteThread启动远程线程,将LoadLibraryW的地址作为远程线程的入口函数地址,将宿主进程里被分配空间中存储的完整DLL路径作为线程入口函数的参数以另其启动指定的DLL。

(7)清理现场。

1.5 DLL后门的启动特性

启动DLL后门的载体EXE是不可缺少的,也是非常重要的,它被称为:Loader。如果没有Loader,那DLL后门如何启动呢?因此,一个好的DLL后门会尽力保护自己的Loader不被查杀。Loader的方式有很多,可以是为DLL后门而专门编写的一个EXE文件;也可以是系统自带的Rundll32.exe,即使停止了Rundll32.exe,DLL后门的主体还是存在的。

2 DLL后门的清除

从DLL木马的原理和一个简单的DLL木马程序中学到了DLL木马的工作方式,这可以帮助大家更好地理解DLL木马病毒的防治手段。

一般的木马被植入后要打开一网络端口与攻击程序通信,所以防火墙是抵御木马攻击的最好方法。防火墙可以进行数据包过滤检查,可以让防火墙对通信端口进行限制,只允许系统接受几个特定端口的数据请求。这样,即使木马植入成功,攻击者也无法进入到受侵系统,防火墙把攻击者和木马分隔开来了。

对于DLL木马,一种简单的观察方法也许可以帮助用户及时发现。查看运行进程所依赖的DLL,如果其中有一些莫名其妙的DLL,则可以断言这个进程是宿主进程,系统被植入了DLL木马。“道高一尺,魔高一丈”,现如今,DLL木马也发展到了更高的境界,它们看起来也不再“莫名其妙”。在最新的一些木马里面,开始采用了先进的DLL陷阱技术,用特洛伊DLL替换已知的系统DLL。特洛伊DLL对所有的函数调用进行过滤,对于正常的调用,使用函数转发器直接转发给被替换的系统DLL;对于一些事先约定好的特殊情况,DLL会执行一些相应的操作。

手工清除DLL后门基本都是在Windows的注册表中做文章。以一款比较有名的DLL后门例,“SvchostDLL.dll”简单介绍其手工清除方法。通过这样的方法,就能够举一反三,灵活运用。这是一款功能非常强大的DLL后门程序,除了可以获得Local System权限的Shell之外,还支持如“检测克隆帐户”、“安装终端服务”等一系列功能,适用Windows2000/XP/2003等系统。程序使用svchost.exe来启动,平常不开端口,可以进行反向连接(最大的特点)。

Svchost只是做为服务的宿主,本身并不实现什么功能,如果需要使用Svchost来启动服务,则某个服务是以DLL形式实现的,该DLL的载体Loader指向svchost,所以,在启动服务的时候由svchost调用该服务的DLL来实现启动的目的。使用svchost启动某个服务的DLL文件是由注册表中的参数来决定的,在需要启动服务的下边都有一个Parameters子键,其中的ServiceDll表明该服务由哪个DLL文件负责,并且这个DLL文件必须导出一个ServiceMain()函数,为处理服务任务提供支持。

如图1所示,可以看到HKEY_LOCAL_MACHINESYS-TEMCurrentControlSetServicesRpcSs下的Parameters子键,其键值为%SystemRoot%system32rpcss.dll。这就说明:启动RpcSs服务时。Svchost调用WINNTsystem32目录下的rpcss.dll。

这是注册表的HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchost,里边存放着Svchost启动的组和组内的各个服务,其中netsvcs组的服务最多。要使用Svchost启动某个服务,则该服务名就会出现在HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVer sionSvchost下。

后门的Loader把SvchostDLL.dll插入Svchost进程当中,所以,先通过其他工具软件的进场管理,查看Svchost进程中的模块信息,SvchostDLL.dll已经插入到Svchost进程中了,再根据“直接使用现有组里的一个服务名,但是本机没有安装的服务”的提示,可以断定,在“管理工具”—“服务”中会有一项新的服务。此服务名称为:IPRIP,由Svchost启动,knetsvcs表示此服务包含在netsvcs服务组中。

把该服务停掉,然后打开注册表编辑器(开始—运行--regedit),到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesIPRIP下,查看其Parameters子键)。Program键的键值SvcHostDLL.exe为后门的Loader;ServiceDll的键值%SystemRoot%system32svchostdll.dll为调用的DLL文件,这正是后门的DLL文件。现在删除IPRIP子键(或者用SC来删除),然后再到HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionSvchost下,编辑netsvcs服务组,把49 00 70 00 72 00 69 00 70 00 00 00删除,这里对应的就是IPRIP的服务名,然后退出,重启,重启之后删除%SystemRoot%system32目录下的后门文件即可。

3 DLL后门的防范

在现实中,DLL后门并不会使用默认的文件名,所以也就不能肯定是否中了DLL后门。对于DLL后门,system32目录下是个好地方,大多数后门也是如此,所以这里要非常注意。下面具体介绍一下怎么发现DLL后门。

(1)安装好系统和所有的应用程序之后,备份system32目录下的EXE和DLL文件:打开CMD,到%SystemRoot%system32目录下,执行:dir*.exe>d:checkexe.txt&dir*.dll>d:checkdll.txt,这样,就会把所有的EXE和DLL文件备份到exe.txt和dll.txt文件中;

日后,如发现异常,可以使用相同的命令再次备份EXE和DLL文件(这里假设是exe0.txt和dll0.txt),并使用:fc exe.txt exe0.txt>d:checkexedll.txt&fc dll.txt dll0.txt>d:checkexedll.txt,其意思为使用FC命令比较两次的EXE文件和DLL文件,并将比较结果保存到exedll.txt文件中如图2、图3所示。通过这种方法,就可以发现多出来的EXE和DLL文件,并通过文件大小,创建时间来判断是否是DLL后门。

(2)使用内存/模块工具(如360安全卫士的系统进程状态管理)来查看进程调用的DLL文件。这样,可以发现进程到底调用了什么DLL文件,再结合上边用FC命令比较出来的结果,又能进一步确定是否中了DLL后门。

(3)普通后门连接需要打开特定的端口,DLL后门也不例外,不管它怎么隐藏,连接的时候都需要打开端口。可以用netstat-an查看所有TCP/UDP端口的连接,以发现非法连接。大家平时要对自己打开的端口心中有数,并对netstat-an中的state属性有所了解,如图4所示。当然,也可以使用Fport来显示端口对应的进程,这样系统有什么不明的连接和端口,都可以尽收眼底。

(4)定期检查系统自动加载的地方,比如:注册表、Winstart.bat、Autoexec.bat、win.ini、system.ini、Wininit.ini、Autorun.inf、Config.sys等,其次对系统默认的服务要有所了解,以上这些地方都是可以用来加载DLL后门的Loader。安装防火墙软件,对安全规则库定期进行更新。及时更新操作系统厂商发布的SP补丁程序。停止主机上不必要的服务,各种服务打开的端口往往成为黑客攻击的入口。使用安全的密码。如果没有文件和打印机共享要求,最好禁止135、139和445端口上的空会话,经常利用net session、netstat查看本机连接情况

4 结语

后门技术发展到今天,已经不再是死板的机器对机器的战争,它们已经学会考验人类,现在的防御技术如果依然停留在简单的数据判断处理上,将被无数新型后门击溃。真正的防御必须是以人的管理操作为主体,而不是一味依赖机器代码,否则计算机系统将会被腐蚀得面目全非。而且后门防御是一个长期的过程,一定要掌握当前的最新防范措施,合理地应用防范技术组建安全的防范系统,另外还要加强对新型后门的关注和研究,及时采取应对措施,做到防患于未然。

参考文献

[1](美)Jeffrey Richter编著.Windows核心编程.第5版,清华大学出版社,2008.

[2]曲鼎,王岗.PC实用之道:病毒与黑客攻防.清华大学出版社,2006.

[3]王岩.注册表终极解析2100例.中国林业出版社,2006.

[4]戴英侠,连一峰,王航.系统安全与入侵检测.清华大学出版社,2002.

动态链接 篇6

EventHandler在SharePoint中起到事件处理的作用。当用户使用SharePoint进行一些操作时, 比如上传一个文件, EventHandler相应的事件处理函数便会截获此事件, 执行开发人员在此函数中重写的功能代码, 从而实现一系列动作事件。在SharePoint中, EventHandler依据SharePoint的层次结构和功能分为Web Level、List Level、ListItem Level、Email, 分别继承了SPWebEventReceiver、SPListEventReceiver、SPItemEventReceiver、SPEmailEventReceiver类。开发人员根据实际需求在相应的子类中实现具体的功能。

2 SPItemEventReceiver类

该类的命名空间为Microsoft.SharePoint.SPItemEventReceiver, 用来处理发生在ListItems上的触发事件。开发人员创建子类, 并继承SPItemEventReceiver类, 来实现实际问题中的触发事件。图1为SPItemEventReceiver类的结构。

3 ItemAdded调用外部动态链接库出现的问题

当用户向文档库上传文档时, 要用到SPItemEventReceiver类的ItemAdded () 方法去处理文档上传时的一系列动作。在实际需求中, 会在SharePoint项目中引入外部动态链接库, 即调用DLL文件。在此介绍的DLL文件实现的功能是将上传的文档进行文字提取, 这个文字提取的执行过程将会占用至少1分钟的时间。如图2为事件触发后的一系列过程。

在ItemAdded方法中调用外部动态链接库, 在实际项目开发中是经常会遇到的情况, 然而这也引起了一些问题。如果外部动态链接库不支持多线程, 那将会在执行过程中出现一些异常, 从而使上述系列过程不能正常完成。当用户在上一个过程还未完成时就上传了第二个文档, 那么这时, 第二个文档的线程会终止掉第一个文档的线程, 造成第一个文档无法处理完成。

4 多线程与ItemAdded方法

ItemAdded本身是支持多线程的, 但是由于外部动态链接库的引入, 而这个动态链接库并不支持多线程, 这就造成多次触发时, 不能正常完成每个文档上传后的整个处理过程。这时的解决方法, 就是在ItemAdded方法中手动创建线程。每当ItemAdded被触发, 就创建一个线程, 来单独处理本次触发后的系列过程。由于调用动态链接库的部分是不支持多线程的, 所以这部分的执行代码将被放到共享池中作为共享资源被加锁。具体执行代码如下:

5 结论

在Sharepoint EventHandler中支持多线程, 可以把占用长时间的触发过程放到后台处理, 使得EventHandler得以空闲出来去处理下一个触发过程, 而且下一个触发过程并不会影响上一个过程的执行, 这样就保证了每一个触发过程单独完整的执行。

参考文献

[1]http://blog.csdn.net/forever_kingdom/article/details/4516651.

[2]Multithreading Part2:Understanding the System.Threading.Thread Class.http://www.c-sharpcorner.com/UploadFile/mmehta/Multithreading211162005044506AM/Multithreading2.aspx.

[3]Scot Hillier.Microsoft SharePoint Building Office2007Solutions in C#2005Apress, 2007.

动态链接 篇7

动态链接库是相对于静态链接而言的。静态链接发生在程序进行编译/链接时,与之相对应,动态链接发生在程序运行时。动态链接库和静态链接库的主要区别是应用程序的连接方式不同,前者进行的是动态链接,后者进行的是静态链接。

动态链接库比静态链接库有更多的优势。

(1)动态链接库实现了多个程序共享数据和代码的工作方式。

(2)多个应用程序同时共享动态链接库在内存中的同一份副本,有效的节省了应用程序所占用的内存资源,提高了应用程序的运行速度和执行效率。

(3)动态链接库独立于可执行文件,如需要改变动态链接库中的函数或现有函数的功能,只要原有函数的参数和返回值等属性不变,所有使用该DLL的原有应用程序都可以在升级后的DLL支持下运行,不需重新编译。

1 动态链接库的分类

1.1 非MFC DLL

一般来说,非MFC DLL的内部不使用MFC,其导出函数使用标准的C接口,因此无论应用程序是否使用了MFC,都可对其进行调用。

1.2 MFC常规DLL

MFC常规DLL包含两方面含义。一方面是“MFC的”,这意味着可以在这种DLL内部使用MFC,另一方面是“常规的”,意味着它不同于MFC扩展DLL。MFC的常规DLL可以被MFC或MFC编写的应用程序所调用。

1.3 MFC扩展DLL

MFC扩展DLL实际上一般用来提供派生于MFC的可重用的类,以扩展已有的MFC类库的功能。只有使用MFC生成的可执行程序才能访问MFC扩展DLL。

本文所研究的动态链接库,是指MFC常规DLL。下面首先探讨一下创建MFC DLL的方法。

2 动态链接库的创建

利用MFC App Wizard[dll]向导可以创建MFC DLL。文件与可执行文件非常相似,不同之处在于DLL含有导出表。导出表包含DLL中每个导出函数的名字,这是进入DLL的入口。只有导出表中的函数可以被外部程序调用。MFC常规DLL分为静态链接到MFC的常规DLL和动态链接到MFC的常规DLL两种。本文主要探讨了前者。

创建动态链接库有两种方法:使用.def文件和使用关键字。本文限于篇幅所限主要研究使用.def文件创建动态链接库的方法。具体步骤如下:

(1)利用MFC App Wizard[dll]创建一个单文档的应用程序。

(2)在生成动态链接库文件的.h文件中添加函数原型,并在.cpp文件中实现前面所添加的函数。

(3)选择项目工作区的File View视图,从生成的文件中找到.def文件,并在文件中声明需要导出的函数;

(4)编译链接程序,生成.dll为后缀的动态链接库。

至此,已完成了动态链接库的创建工作,接下来研究动态链接库的调用。

3 动态链接库的调用

应用程序与动态链接库链接后,DLL才能通过应用程序调用运行。链接的方法,主要有两种:隐式链接和显示连接。本文主要研究前者。

隐式链接也叫静态加载,使用动态链接库的应用程序先链接到编译时生成的导入库文件,执行应用程序的同时也加载所需的DLL。在应用程序退出之前,DLL一直存在于该应用程序进程的地址空间中。

使用.def文件导出函数,可以创建具有NONAME属性的DLL。具有NONAME属性的DLL在导出表中仅包含了导出函数的顺序值,这种类型的DLL包含有大量的导出函数时,其文件长度小于通常的DLL。

使用隐式链接除需相应的DLL文件外,还必须具备三个条件:包含导出函数及类声明的头文件、DLL的导入库lib文件和实际的DLL文件。

将DLL的lib文件加入应用程序有三种方法,这里只介绍最常用的一种。

在主菜单project中,选择Setting菜单项,弹出Project Setting对话框。选择Link标签页,在Object/library modules文本框中输入指定的lib文件名,多个库文件之间用空格分开。将编译生成的.dll文件和.lib文件复制到当前目录下。然后编译链接程序即可。

4 动态链接库创建调用实例

下面通过一个例子,具体实现动态链接库的创建和调用功能。

(1)首先MFC App Wizard[dll]创建一个名为Dongtai的动态链接库文件。单击OK进入下一步,默认设置,单击Finish按钮。在Dongtai.h文件中添加代码:

(3)在项目工作区的File View视图,找到Dongtai.def文件,在其中声明需要导出函数:Pingfang@1。

(4)编译、链接程序,生成动态链接库Dongtai.dll。

(5)保存后关闭上面的动态链接库程序,利用MFC A-pp Wizard[exe]创建单文档应用程序Test。默认设置,单击Finish完成创建工作。插入如图1对话框资源,并为对话框关联对话框类CPFDlg,并设置控件属性、添加成员变量(具体过程略)。

(6)在PFDlg.cpp文件中添加包含导出函数Pingfang()声明的头文件语句#include″Dongtai.h″,并为开始按钮添加命令消息处理函数。

(7)在菜单栏中添加“调用”主菜单项,其ID设为ID_DY。在CTest View.cpp中包含PFDlg.h头文件。在Ctest View类中添加菜单项命令消息处理函数。

(8)将动态链接库的Dongtai.dll和Dongtai.lib文件复制到当前目录下,并在Project Setting对话框的Link标签页的Object/library modules文本框加入Dongtai.lib。

(9)编译、链接并运行程序,就可实现输入任何参数值x求其平方的功能。

5 结束语

本文分析了动态链接库的作用和优势,介绍了创建和调用动态链接库的一种常用方法。并通过实例详细实现了动态链接库的创建和调用的全过程。对动态链接库的初学者具有一定的借鉴和指导意义。

参考文献

[1]马石安,魏文平.VC++程序设计与应用教程[M].北京:清华大学出版社,2007.

动态链接 篇8

1 医院信息系统与医保中心的联网拓扑图

医保中心与医院信息系统的联网采用实时交易模式,在医院端配置医保前置服务器和防火墙,通过10M的光纤介质专线与社保中心信息系统连接,前置服务器同时接入医院信息系统局域网,作为通信服务器,实现医院信息系统与医保中心信息系统数据直接通信和实时处理如图1。此外,前置服务器上同时运行一个数库管理系统,具有数据处理功能,可以根据数据库中的医保政策参数进行医疗费用明细分割的计算(计算病人每条费用明细的发生金额、全自费金额、申报金额和补助金额)。

2 医院信息系统与医保中心接口分类

由于各个医院信息系统建设情况不同,有的医院没有系统,有的医院有小的管理系统,而有的医院可能运行了多年的医院管理系统,而医保信息系统在一个地区是唯一的,这就决定了医保系统与医院信息系统的连接只能是前者适应后者。医院信息系统与医保中心接口一般包含以下四种:

1)身份确认接口

采用参保人员持IC卡到定点医院就医的方式,IC卡作为参保人员基本信息的重要载体包含了参保人员的个人信息。医院信息系统中的门诊挂号、门诊收费、住院登记、出院结算系统都通过读卡器读取IC卡信息,确认参保人员身份。

2)结算划账接口

参保人员在门诊缴费和住院结算时,不但要通过IC卡进行身份识别,还需要将社保个人账户和统筹基金的可用金额读出并将消费信息回写IC卡和通过网络写到医保中心服务器。

3)消费明细信息接口

医保中心为了对参保人员就医项目明细进行审核和费用控制,要求医院信息系统通过医保专线将其传送到医保中心主机。如挂号信息、门诊就诊信息、费用项目明细、住院信息、住院费用项目明细信息、住院结算清单等。

4)医保政策接口

医保政策接口一般包括两个方面,其一为医保基本信息接口,如参保号、IC卡号、医院编码、年度可用统筹基金金额等。其二为HIS要有参数化的、符合医保政策的费用处理机制。通过参数的设置,可以方便地处理医保与非医保药品、检查项目等的划分,医保特定费用的分类、特定发票的打印,超过标准费用的处理。不同额段不同自费比例的处理、起付金额和分段付费计算等政策性较强的核心问题。

3 接口设计方案

目前用于医保信息系统与医院信息系统接口连接的方案大致可分为三种方式,即无缝接口方式、数据包交换接口和基于动态链接库的接口方式。

1)无缝接口

医院信息系统与医保信息系统的无缝接口设计要求严格,一般是由医保信息系统的软件开发公司进行HIS系统的开发,实现无缝需求。

2)数据包交换接口

数据包交换方案,即将医保收费软件通过本系统确认的相关信息存储在一个数据包中,供医院划价系统读取,医院划价系统处理完毕的收费信息也存储在一个数据包中供医保收费软件使用,以这样一种数据包交换的方式实现数据接口通信交换。

3)基于动态链接库的接口

医保软件开发商提供动态链接库接口,HIS系统根据动态链接库的参数个数、类型、返回值等进行链接库的调用,从而实现系统的对接。这种方式可以让HIS开发商在不用理解医保政策情况下,按照一定的规则,即可快速、安全的完成HIS与医保系统的接口改造工作,能够最大限度的利用医院原有的设备资源,操作人员的操作习惯也不会受到较大影响。

4 接口的具体实现

1)动态链接库所提供的具体函数

医保信息系统采用动态链接库的形式提供与医保政策相关的两个函数:身份验证函数、业务处理函数。身份验证函数的功能包含了检验IC卡设备准备情况(对于磁卡不需要调用此函数)、检验IC卡是否更改(对于磁卡不需要调用此函数)、获取参保人员基本信息及其帐户信息。业务处理函数的功能包含了就诊信息登记、费用明细信息录入及修改、待遇享受资格审核、读取医保中心审批信息、挂号结算(包括挂号诊疗费结算和退号处理,提供正反交易)、医保病人结算(包括门诊、门诊召回、住院、住院召回、门诊慢性病、转出医院结算、转往医院结算等类型,并对各种结算都提供正反交易)、医保病人预结算(与医保病人结算的类型相同)每个函数都有一个用于发送消息的参数和一个返回消息的参数,均为字符串形式,社保中心提供的借口标准中规定了各个参数字符串所包含的字段内容和排列顺序,字段间的分隔符和消息的结束符,消息如果为数据集合,则每行数据间还有行分割符。

2)实现原理

当参保病人进行结算时,医院收费终端首先调用身份认证函数,获取参保病人基本信息及其账户信息,然后将所有的收费项目和要上传给社保中心的数据提交给接口用户表。并向计算医保待遇的DLL发起结算请求,计算医保待遇的DLL通过ODBC接口从数据接口中读出此次结算的所有的费用信息,根据医保政策进行计算,得出结果,并将结果保存到医保前置机,提交成功后返回结算结果,提供给医院HIS收费终端,收费终端将结算信息保存到医院的HIS系统中,从而完成此笔交易。具体如图2、3。

5 HIS系统设计要点

1)在HIS数据库中建立医保项目和HIS所使用的项目对照表。向社保中心申报医疗费用、进行费用分割计算等都必须使用医保政策规定的统一项目名称和代码,为此,在HIS相应的表结构里增加医保字段,甚至建立一批新的数据库表,再把HIS中的有关项目字典与社保中心下发的药品目录、诊疗目录、服务设施目录、病种目录建立对照关系,以便进行数据转换。

2)在HIS系统中建立医保业务管理模块,实现参保病人身份识别、费用申报、报表生成和上传、审批情况下载等功能。

3)在HIS系统中对医保有关业务模块进行相应的改造。按照医保政策实现对参保病人门诊挂号、收费、入院登记、住院登记等就医过程各环节的信息管理。程序开发的关键点在于对DLL文件中函数的适当调用,在HIS中采集所需数据正确构造发送参数字符串,分解返回参数字符串并进行后续处理。

6 结束语

随着全国新医改工作的不断深入,医保中心所提供的医保系统与各医院的信息系统之间需要交换的信息越来越大,两个系统联网也越来越紧密,HIS与医保系统之间的接口在这其中扮演着是十分重要的角色。本篇介绍的方式在功能可扩展性和对医保政策的灵活适应性上有着较大的优势,通过该方式实现了两个相对独立系统的数据一致性,又提高了工作效率,增强了患者对医院的综合满意度,取得了良好的社会效益和经济效益。

参考文献

[1]李刚荣,刘国祥.数字化医院安全机制构建研究[J].解放军医院管理杂志,2004,11(2).

[2]姚彬.浅谈我院HIS系统与医保系统联网建设的三个阶段[J].医学信息,2007.

本文来自 360文秘网(www.360wenmi.com),转载请保留网址和出处

【动态链接】相关文章:

浅析动态链接库12-05

在Vista系统下卸载无用动态链接04-18

网络链接05-29

超链接06-01

链接平台06-18

链接分析07-04

链接研究07-20

链接模式07-28

链接技术08-12

链接算法08-23

上一篇:管式散热器下一篇:生产调节剂