您的位置: turnitin查重官网> 计算机 >> 计算机理论 >有关于诊断基于APIHOOK技术代码行为诊断系统设计和开发

有关于诊断基于APIHOOK技术代码行为诊断系统设计和开发

收藏本文 2024-03-16 点赞:8118 浏览:25523 作者:网友投稿原创标记本站原创

摘要:因为恶意代码在植入时的行为与正常代码有很大的不同,而这些行为就表现在所调用的相关API函数上,鉴于此,该文采用APIHOOK技术,设计了代码行为诊断系统,该系统根据代码在植入时调用的API函数来判断代码的“善恶”,并给出了详细的代码行为,从而为进一步判断代码是否是恶意的提供了依据。
关键词: 恶意代码;合法代码;API HOOK
1009-3044(2013)02-0272-03
目前,由于未知恶意代码具有不可判定性[1-2],所以对恶意代码的识别仍然是一个难题。例如:一般查毒软件如果遇到运行的代码如果有诸如DLL注入的行为,就认为是恶意代码给予拦截,如图1所示。而事实上,单纯从DLL注入这一单一行为还不能肯定就是恶意代码。通过观察我们发现大多恶意代码在开始植入内存并初始化的时候,通常会执行一些诸如扫描系统目录,自拷贝,自删除等一系列有别于正常代码的行为。而这些行为就是通过调用API函数实现的,所以通过监控代码在植入阶段调用了哪些API函数,通过分析这些API函数的特点,就可以大致判断该代码是否是恶意的。鉴于此,该文设计并实现了基于APIHOOK技术的代码行为诊断系统,根据代码在植入时调用的API函数的特点来对代码“善恶”行为的程度(健康情况)进行打分,如果分数低那么是恶意代码的可能性就大,从而为病毒专家的进一步分析提供了依据。

摘自:毕业论文小结www.udooo.com

1.png> 图1 360拦截代码注入行为界面

1 APIHOOK技术的原理

API HOOK技术是一种用于改变API执行结果的技术,每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程序,原理如图2所示。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作[3]。
2.png> 图2 APIHOOK原理示意图

2 实现的关键技术

在动态链接库中实现对相关API函数的钩挂,然后设置一个全局钩子,这样当所有进程运行时都会自动调用该动态链接库,从而实现了对API函数的钩挂。当进程调用系统的API函数时就跳到用户的函数,在用户的函数中记录一下API函数的名字,然后执行原API函数。这样就得到了进程调用的所有API的相关信息,系统的流程图如图3所示。
3.png> 图3 系统功能流程图

2.1 动态链接库的设计

DllMain函数是当进程装入动态链接库中时自动执行的函数,当dwReason参数的值取DLL_PROCESS_ATTACH时表示进程装入动态链接库时要执行的代码,即执行API函数的钩挂拦截。当dwReason参数的值取DLL_PROCESS_DETACH时表示当进程结束时将要执行的程序,即执行解开钩挂的代码。相关关键代码如下:
该函数的功能是卸载的钩子的句柄,并进行卸载钩子。

2.2 主程序对动态链接库中函数的调用

首先获得动态链接库的句柄,然后调用该动态链接库里面的安装全局钩子的函数InstallHook,进行相关API 函数的钩挂代码如下。
m_hModule = LoadLibrary( "library.dll" );
FUN fi = (FUN)GetProcAddress( m_hModule, "InstallHook" );
GetProcAddress函数的功能是检索指定的动态链接库(DLL)中的输出库函数地址。
当处理完以后,通过调用动态链接库里面的UnInstallHook函数解开钩子。代码如下。

3 程序运行结果

运行的时候首先按“清屏”,完成初始化工作。然后按“选择代码”,选择要运行的软件。在待运行的软件启动并植入内存后,再按“诊断”,对运行的程序调用的所有API函数,根据相应的算法[4]得出每个API函数的善恶指数,按照该函数“善恶”指数的高低,进行排序并显示出来(每个API函数的),并给出所调用API函数存在风险的大小情况,再根据程序调用的所有API函数的“善恶”指数之和,对这个程序的健康情况进行打分。供用户参考。如图4所示。分数越高安全性越高,反之越低。

4 结束语

该文通过APIHOOK技术开发了一款“代码行为诊断专家”软件,根据代码在植入阶段调用的API函数。通过相关算法来判断该代码的“善恶”程度,并把它详细的行为显示出来。实践证明该软件可以清楚的描述软件的行为和善恶程度,而为进一步判断代码是否是恶意的提供了依据。
参考文献:
Fred Cohen.Computer Viruses:Theory and Experiments[J]. Computers&Security, 1987,6(1):22-35.
Diomidis Spinellis.Reliable identification of Bounded-lengh,Viruses Is NP-complete[J].IEEE Transactions On Information Theory, 2003,49(1):280-284.
[3] http://baike.soso.com/h7747050.htm?sp=l29260782.
[4] Lijun Zhu. An Identification Method on Unknown Malicious Code Based on the Good or Evil Index of API[C]. IEEE The 2nd International Conference on Multimedia Technology, 2011,6(7):4829-4832.

copyright 2003-2024 Copyright©2020 Powered by 网络信息技术有限公司 备案号: 粤2017400971号