当前位置:编程学习 > 网站相关 >>

朋友们帮忙分析一下这段ANYCOM代码

我是小白,没有什么编程基础,接到一任务,需要分析这段代码给别人讲,麻烦大家帮下忙,最好能说细致一些。不知道发错地方没有~

ANYCOM的代码如下:


/*Program ANYCOM.C



功能:
全自动分析后附式COM文件型病毒杀毒关键性参数



执行格式:ANYCOM<文件名1><文件名2>*/



#define COM_LEN 0x8000
/*本程序所分析染毒文件的最大长度*/



#define COMHEAD
50
/*病毒可能隐藏代码的最大长度*/



# define VCODE_LEN 10
/*病毒特征串长度*/



#include “stdio.h”



FILE *fp1,*fp2,*fp3;



unsigned int fp1_len,fp2_len,i,j;



unsigned char nvcom[COMHEAD],vcom[COM_LEN];



struct comvir_struct {



unsigned int vir_len;/*病毒的长度*/



unsigned char vcode[VCODE_LEN];/*病毒的特征搜索字符串*/



unsigned int mov_len;/*原COM文件头的代码被病毒所隐藏的字节数*/



unsigned int mov_off;/*病毒所隐藏的代码相对于染毒文件末尾的偏移值*/



}comVIR;



main(int argc,char * argv[])



{fp1=fopen(argv[1],”rb+”);



i=fread(nvcom,COMHEAD,1,fp1);



nvcom[0]=0xe9;



fseek(fp1,0,SEEK_END);



fp1_len=ftell(fp1);



fp2=fopen(argv[2],”rb+”);



i=fread(vcom,COMHEAD,1,fp2);



fseek(fp2,0,SEEK_END);



fp2_len=ftell(fp2);



comVIR.vir_len=fp2_len-fp1_len;



i=fseek(fp2,fp1_len,SEEK_SET);



i=ftell(fp2);



i=fread(comVIR.vcode,VCODE_LEN,1,fp2);



for(i=COMHEAD-1;i>0;i--)



{



for(j=0;j<comVIR.mov_len;j++)




if(vcom[i+j]!=nvcom[j]) break;



if(j==comVIR.mov_len)break;



}



if(i)




comVIR.mov_off=fp2_len-i-j+3;



else



{printf(“Anylize failed!”);exit(0);}



fp3=fopen(“VIRINFO.DAT”,”wb”);



fwrite(&comVIR,sizeof(comvir),1,fp3);



printf(“病毒长度:%d字节\n”,comVIR.vir_len);



printf(“病毒特征串”);



for(i=0;i<10;i++) printf(“%xH”,comVIR.vcode);



printf(“\n 病毒隐藏原COM文件头代码:%d字节\n”,comVIR.mov_len);



printf(“被隐藏病毒代码相对于染毒文件末尾偏移值:%d字节\n”,comVIR.mov_off);



printf(“所有杀毒关键性参数已存入VIRINFO.DAT文件中!”);



}

补充:云计算 ,  云安全
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,