📄 杀毒参数自动分析程序.cpp
字号:
#include<stdio.h>
#define COM_LEN 0x800000 /*本程序所分析染毒文件的最大长度*/
#define COMHEAD 50 /*病毒可能隐藏代码的 最大长度*/
#define VCODE_LEN 10 /*病毒特征串长度*/
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--)
if (vcom[i]!=nvcom[i])
{
comVIR.mov_len=i+1;
break;
}
rewind(fp2);
fread(vcom,COM_LEN,1,fp2);
for(i=COM_LEN-comVIR.mov_len;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[i]);
printf("\n病毒隐藏原COM文件头代码:%d 字节\n",comVIR.mov_len);
printf("被隐藏代码相对于染毒文件末尾偏移值:%d 字节\n",comVIR.mov_off);
printf("所有杀毒关键性参数已经存入VIRINFO。DAT 文件! ");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -