- 202
- 0
- 约9.9千字
- 约 44页
- 2017-12-01 发布于江西
- 举报
文件型病毒的原理实例和检测
特征代码法 特征代码法的优点: 检测准确快速 可识别病毒的名称 误报警率低 依据检测结果可做解毒处理 是检测已知病毒的最简单、开销最小的方法 特征代码法 特征代码法的缺点: 不能检测未知病毒。 不能检查多态性病毒。 不能对付隐蔽性病毒。 随着病毒种类的增多,逐一检查和搜集已知病毒的特征代码,不仅费用开销大,而且在网络上运行效率低,影响此类工具的实用性 附:特征码检测的一个例子 不妨设某病毒的特征码表示如下: 文件偏移地址0x0c90提取特征码长度:0x20(32)特征码内容:0A 73 53 41 2E 65 78 30 5C 5C 31 39 32 2E 31 36 38 2E 30 B0 64 21 73 05 3C 83 98 1B 76 5B 36 8B 假设要检测的文件为:c:\\sampleV.exe 用程序来实现,代码如下: # include # include bool scanvir(const char *file,long offset, int length, void *vir); main() { int i; unsigned char vir[]={0x0A,0x73,0x53,0x41,0x2E,0x65,0x78,0x30,0x5C,0x5C,0x31,0x39,0x32,0x2E,0x31,0x36,0x38,0x2E,0x30,0xB0,0x64,0x21,0x73,0x05,0x3C,0x83,0x98,0x1B,0x76,0x5B,0x36,0x8B}; i=scanvir(c:\\sampleV.exe,0x0c90,0x20,vir); //调用查毒函数 if(i==1) printf(警告!发现病毒。\n); if(i==0) printf(没有发现病毒。\n);} 待续 bool scanvir(const char *file,long offset, int length, void *vir){FILE *fp = NULL; int a=0;char rvir[255]={0};bool b=false;fp=fopen(file,“rb”); //以2进制打开指定文件if(NULL==fp){goto novir;}fseek(fp,offset,SEEK_SET); //把文件指针指向偏移地址fread(rvir,length,1,fp); //读取length长度的代码a=memcmp(vir,rvir,length); //与提取的代码比较,返回值放到a中if(a==0) { b=true; }novir:if(fp){ fclose(fp); fp=NULL; }return b;} 续上页 问题: 改进为某种病毒的专杀工具? 文件型病毒特征码查杀实例 回到前面病毒感染中用到了例子,对病毒进行查杀 这里,是由virus.txt用masm编译连接后产生的可执行文件 V反汇编,确定特征码 确定特征码的偏移和长度 编写程序 运行结果 思考和练习 文件型病毒的防治 编程练习 #include #include #include bool scanvir(const char *filename,long offset,int length,void *vir);int viewfiles(char *directory,long offset,int length,void *vir); void main(void){unsigned char vir[]={0x4A,0x75,0x6D,0x55,0x70,0x85,0x0B,0x73,0x4E,0x85,0x02,0x54,0x69,0x9A,0x07,0xD0,0xA1,0x4A,0x6F,0x00,0x62,0x61,0x6B,0x61,0x33,0x00,0x53,0x4F,0x0B,0x46,0x54,0x57,0x41,0x55,0x11,0x5C,0x6A,0x9C,0x29,0x5C,0xE3,0x97,0x5C,0x0F,0x7F,0x20,0xF0,0xB6};char directory[MAX_PATH];int count;printf( ============================================\n);printf( 震荡波病毒查找工具 \n);printf( .st\n );printf( ============================================\n);printf(\n);printf(请输入待检查分区或目录名\n
原创力文档

文档评论(0)