查看: 2205|回复: 3
收起左侧

[已解决] 求检测病毒的API函数.............

 关闭 [复制链接]
chen914
发表于 2009-4-13 22:43:23 | 显示全部楼层 |阅读模式
求检测病毒的API函数.............???
solag
发表于 2009-4-14 07:14:22 | 显示全部楼层
尽管一些媒体早已警告CIH 将于4 月26 日发作,可依然有许多用户没能逃过CIH 的魔掌。可见,计算机用户的防病毒意识还有待增强。
纵观Windows时代,计算机病毒主要有文件型病毒和宏病毒,引导型病毒已经很少了。宏病毒是一些恶意的脚本,运行它可能影响打印,并乱发一些电子邮件,乱删除文件等。宏病毒大多与微软的软件产品有关,如Word、Outlook Express等。宏病毒的发作迹象比较明显,只要大家多多注意,并且使用病毒防火墙,一般可以把损失降到最小。
而文件型病毒,无论在数量、种类以及破坏性上,都是宏病毒无法比拟的。文件型病毒的原理是把病毒代码附在可执行文件中并且修改运行指令,当用户运行这个被感染的可执行文件时,病毒代码将被首先执行,然后伺机感染其他可执行文件,如此达到传染的目的,等条件成熟就发作,格式化硬盘甚至破坏BIOS 信息等等。
虽然国内外反病毒软件越来越成熟,查杀病毒的正确率也越来越高,但是绝对没有能百分之百查杀病毒的反病毒软件,如果哪个反病毒软件商吹嘘自己可以预防未知的病毒,你千万别信。更可笑的是,我还曾见过某防毒软件本身被感染增加了几K字节,竟然也毫无知觉。所以,对于反病毒软件,不能不用,但也不可全部依靠它们。既然文件型病毒是依靠文件生存的,被感染的可执行文件内容肯定会发生变化,所以,要检查文件是否被病毒感染并不难。P E 可执行文件有一个D W O R D
CheckSum,该双字是用于存放PE可执行文件的校验和。因为一般的可执行文件不需要校验和,所以在普通可执行文件中它通常是0。而Windows NT和Windows 2000的驱动程序则需要校验和,如此处的值与验证的校验和不同,就会报告出错,提醒你重新下载驱动程序。根据这个原理,我们就可以编写一个检测文件型病毒
的小程序。你可以把它放在开始菜单的启动菜单中,以便经常运行。如果系统中有病毒,那么这个文件很快就会被感染,从而引起文件内容的变化,文件校验和自然与原来的不相同。每次启动电脑时这个程序便会自我检查,若发现校验和不正确,则说明你的系统可能已经被病毒感染,赶快杀毒吧!需要注意的是,如果想使普通的PE可执行文件CheckSum双字有意义,你必须在VC5以上的link.exe中加入-release 选项。
Windows提供了检查可执行文件校验和的API函数:
MapFileAndCheckSum(),可以算出此文件的校验和。该函数原形如下:
ULONG MapFileAndCheckSumA(
IN LPSTR Filename,
OUT LPDWORD HeaderSum,
OUT LPDWORD CheckSum
);
参数意义:
Filename 指定文件名的空结束的字符串的指针,该文件的校验和将被计算。
HeaderSum 从映像文件接收原始校验和的变量的指针,有错误时它是零值。
CheckSum 接收计算后的校验和的变量的指针。
返回值:
如果函数成功, 函数返回值是CHECKSUM_SUCCESS ;
如果函数失败,函数返回值为下列值之一:
CHECKSUM_OPEN_FAILURE:不能打开文件;
CHECKSUM_MAP_FAILURE:不能创建文件的映射文件;
CHECKSUM_MAPVIEW_FAILURE:不能映射文件的观看;
CHECKSUM_UNICODE_FAILURE :不能将文件名称转换为UNICODE。
耳闻为虚,眼见为实,动手编写程序。
1.启动VC。
2.选择File菜单下的New命令,选Projects标签并新建Win32 Application 工程。在Project Name 中输入名称c k v i r ,点击“OK ”按钮。在下一个对话框中点
“F i n i s h ”按钮,再点击“OK”,便可生成一个空的项目。
3.选择File菜单的New命令,在File标签中新建C++Source File。输入文件名ckvir,然后输入下面的源程序:
/* 头文件*/
#include "windows.h"
#include "imagehlp.h"
/*MapFileAndCheckSumA所需要用到的库文件。*/
#pragma comment (lib, "imagehlp.lib")
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{ DWORD head_check_sum =1;
DWORD check_sum=0;
char buf[512];
/* 取这个程序的文件名*/
GetModuleFileName(GetModuleHandle(NULL),buf,512);
/*调用MapFileAndCheckSum 取该文件的校验和*/
if(CHECKSUM_SUCCESS!=MapFileAndCheckSum(buf,
&head_check_sum,&check_sum))
{ MessageBox(0,"检查出错,检查未完成","错误",MB_OK);
return 0;
}
/* 分析结果*/
if(head_check_sum!=check_sum)
{
MessageBox(0,"这程序已经被非法改动,可能您的系统已经被病毒感染","出错提示",MB_ICONWARNING);
}
return 0;
}
4.选择Project 菜单的Settings 命令,选Link 标签,去掉Generate debug info和Link incrementally选项。选Category 组合框的Gustomize,去掉Use program
database 选项。最后在Project options 中加入“ /r e l e a s e ”,点击“OK”按钮结束。
5.编译运行程序。
现在可以运行这个程序了。好像什么也没提示,到底管不管用?那么我们做个试验。先备份此程序,然后用十六进制的编辑器(如WinHex、Hiew 等)修改其中任
意地方。再运行程序,那么程序立即会报告出错。这个程序我已在Windows NT4 Workstation(Pack 4)、VC6中编译,在Windows95/97/98/Me/NT/2000下运行通过。最后祝愿天下计算机用户与计算机病毒无缘!
solag
发表于 2009-4-14 07:14:46 | 显示全部楼层
百度的,希望对你有帮助
solag
发表于 2009-4-14 07:15:31 | 显示全部楼层
http://www.hongen.com/pc/program/apiquery.htm
这里还有个在线查询的网站
拿分走人楼
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-10-12 20:59 , Processed in 0.123358 second(s), 17 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表