鱼C论坛

 找回密码
 立即注册
查看: 5610|回复: 18

[技术交流] 发个 简单的C恶意程序源码给大家玩玩...(2)

[复制链接]
发表于 2011-3-10 17:50:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 lovemengx 于 2011-3-10 17:52 编辑

以下是修复程序代码:
  1. #include <windows.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. //#include <conio.h>
  5. //#include<unistd.h>

  6. bool scanvir(const char *filename,long offset,int length,void *vir);
  7. int viewfiles(char *directory,long offset,int length,void *vir);
  8. int pe_(const char *filename),pian();
  9. int att(const char *filename);
  10. char pe[]={0x00,0x00};
  11. int dell=0,count=0,i=0,a=0,g=0,r=0;
  12. char directory[MAX_PATH];//存储盘符或目录路径


  13. int main()
  14. {
  15.     system("COLOR 0a");
  16.     system("title 欢迎使用由【遲、钝dè豬】设计的程序~~");
  17.     printf("\t程序名:【修复程序】\n");
  18.     printf("*******************************************************************************");
  19. printf("\n\n\n\t\t\t\t【说明】");
  20. printf("\n\n\n\t此修复程序只对【破坏程序】的破坏起作用,仅仅只是针对其进行逆向修改...");
  21. printf("\n\n\t设计此程序的目的只是纯粹为了验证自己对病毒破坏原理的理解...");
  22. printf("\n\n\t作者保证本程序在不被恶意修改下所破坏的文件可以100%%恢复...");
  23. printf("\n\n\t此程序只修复PE文件,可以扩展其他文件...");
  24. printf("\n\n\t此代码公开只为技术交流...");
  25. printf("\n\n\n\t\t\t\t\t\t遲、钝dè豬  QQ:1007566569\n\n");
  26. printf("\t\t\t\t\t\t2010年12月16日 23:10  设计\n\n");
  27.     printf("*******************************************************************************");
  28. system("pause");
  29. system("cls");
  30. printf("请输入要修复的分区或目录的绝对路径 [直接按回车键,默认C盘]:");
  31. gets(directory);
  32. pian();
  33. printf("共扫描了【%d】个文件\n\n",r);
  34. printf("发现了【%d】个PE文件\n\n",g);
  35. printf("修复成功【%d】个文件\n\n",i);
  36. printf("修复失败【%d】个文件\n\n",a);
  37. system("pause");
  38.     }
  39.    
  40. /************************************/
  41. /*-------------文件格式判断-----------*/
  42. /************************************/     
  43. int pian()
  44. {
  45. /*-------------------PE文件--------------------------*/   
  46.    dell=1;
  47. count=viewfiles(directory,0x0,0x2,pe);
  48. if(count==0)dell=0;
  49. /*------------------可扩展其他格式文件--------------*/

  50. }

  51. /************************************/
  52. /*-------------修复动作选择-----------*/
  53. /************************************/
  54. int diao(const char *filename)
  55. {
  56. switch(dell)
  57. {
  58.   /*--------------匹配文件格式进行对应破坏动作---------*/
  59.         case 1: pe_(filename);g++; break;
  60.      /*------------------可扩展其他格式文件--------------*/
  61. }
  62. }

  63. /************************************/
  64. /*-------------PE修复动作-----------*/
  65. /************************************/
  66. int pe_(const char *filename)
  67. {
  68.     FILE *fp;
  69.     char cih[]={0x4D,0x5A};
  70.     if((fp=fopen(filename,"rb+"))==NULL)
  71.     {                                 
  72.     printf("【修复失败】[%s]\n\n",filename);
  73.     a++;
  74. }
  75.     else
  76.     {
  77.         fseek(fp,0,0);
  78.         fwrite(cih,sizeof(cih),1,fp);
  79.         fclose(fp);
  80.         printf("【修复成功】[%s]\n\n",filename);i++;
  81.         }

  82. }

  83. /************************************/
  84. /*-------------匹配文件动作-----------*/
  85. /************************************/  
  86. bool scanvir(const char *filename,long offset,int length,void *vir)
  87. {
  88.     FILE *fp;
  89.     char *rvir;
  90.     bool b=false;

  91.     fp=fopen(filename,"rb");//以只读二进制模式打开文件
  92.     if(fp!=NULL)
  93.     {
  94.           fseek(fp,0,2);//将指针(光标)指向文件尾端
  95.           if(offset+length<=ftell(fp))//文件偏移地址加长度<=指针(光标)尾端位置 判断文件是否存在特征代码段 即特征码的偏移量地址和长度
  96.           {
  97.                 fseek(fp,offset,0);//将指针指向文件起始的offset偏移地址....
  98.                 rvir=new char[length];
  99.                 fread(rvir,length,1,fp);//读取 length 长度的代码并存入rvir变量
  100.                 b=memcmp(vir,rvir,length)==0;//把提取的代码与预定义的特征码比较
  101.                 delete[] rvir;
  102.           }
  103.           fclose(fp);
  104.     }
  105.     return b;
  106. }

  107. /************************************/
  108. /*-------------文件遍历函数-----------*/
  109. /************************************/
  110. int viewfiles(char *directory,long offset,int length,void *vir)
  111. {
  112.     WIN32_FIND_DATA fdFindData;
  113.     HANDLE hFind;
  114.     char *filename;
  115.     int count=0;
  116.     BOOL done;

  117.     filename=new char[strlen(directory)+5];
  118.     strcpy(filename,directory);
  119.     strcat(filename,"\\*.*");
  120.     hFind=FindFirstFile(filename,&fdFindData);
  121.     delete[] filename;
  122.     done=hFind!=INVALID_HANDLE_VALUE;
  123.     while(done)
  124.     {
  125.               
  126.           if(strcmp(fdFindData.cFileName,".") && strcmp(fdFindData.cFileName,".."))
  127.           {
  128.                 filename=new char[strlen(directory)+strlen(fdFindData.cFileName)+2];
  129.                 strcpy(filename,directory);
  130.                 strcat(filename,"\");
  131.                 strcat(filename,fdFindData.cFileName);                 
  132.                 if((fdFindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY)
  133.                     count+=viewfiles(filename,offset,length,vir);
  134.                 else
  135.                 {r++;
  136.                     if(scanvir(filename,offset,length,vir))
  137.                     {
  138.                          diao(filename);
  139.                     }
  140.                     }
  141.                 delete[] filename;
  142.           }
  143.           done=FindNextFile(hFind,&fdFindData);
  144.     }
  145.     FindClose(hFind);
  146.     return(count);
  147. }

复制代码
编译环境是 DEV C++ 5.0

评分

参与人数 1荣誉 +6 鱼币 +6 收起 理由
小甲鱼 + 6 + 6 有自己的想法和见解,推崇!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-19 14:21:03 | 显示全部楼层
沙发啊 这个有什么用啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-19 23:45:43 | 显示全部楼层
新手看不懂,这个是做什么的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-8 13:27:29 | 显示全部楼层
{:2_26:}我也想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-9 12:35:28 | 显示全部楼层
{:3_49:}{:3_57:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-9 12:36:05 | 显示全部楼层
你至少告诉我们会有什么后果吧,我可不想亲自试验。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-20 17:04:57 | 显示全部楼层
确实很恶意的,嘎嘎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-21 10:01:20 | 显示全部楼层
回复 6# 小飞侠


    这个是修复程序 找找第一个 破坏程序 可以破坏所以PE文件 其实至少修改了 前两个字节而已... 修复程序只是还原了前两个字节 很简单的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-30 11:18:58 | 显示全部楼层
报错!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-5-2 08:25:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-2 19:25:24 | 显示全部楼层
什么东东啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-2 19:25:55 | 显示全部楼层
呵呵  看不懂啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-17 17:46:14 | 显示全部楼层
新人,看不懂这是什么呢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-20 22:56:05 | 显示全部楼层
好长啊~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-29 01:21:26 | 显示全部楼层
又有人看天书了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-20 13:18:34 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-20 17:30:56 | 显示全部楼层
Love 梦想 发表于 2011-6-20 13:18
你应该是用了 VC 吧?  我用的DEV C++  如果报错 不妨在各个函数的尾端 加入 return 0; 返回语句

我瞅瞅~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-21 02:35:31 | 显示全部楼层
什么东西啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2016-4-14 10:38:45 | 显示全部楼层
没有这个编译器 提供以下可以吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 12:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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