发个 简单的C恶意程序源码给大家玩玩...(2)
本帖最后由 lovemengx 于 2011-3-10 17:52 编辑以下是修复程序代码:#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
//#include <conio.h>
//#include<unistd.h>
bool scanvir(const char *filename,long offset,int length,void *vir);
int viewfiles(char *directory,long offset,int length,void *vir);
int pe_(const char *filename),pian();
int att(const char *filename);
char pe[]={0x00,0x00};
int dell=0,count=0,i=0,a=0,g=0,r=0;
char directory;//存储盘符或目录路径
int main()
{
system("COLOR 0a");
system("title 欢迎使用由【遲、钝dè豬】设计的程序~~");
printf("\t程序名:【修复程序】\n");
printf("*******************************************************************************");
printf("\n\n\n\t\t\t\t【说明】");
printf("\n\n\n\t此修复程序只对【破坏程序】的破坏起作用,仅仅只是针对其进行逆向修改...");
printf("\n\n\t设计此程序的目的只是纯粹为了验证自己对病毒破坏原理的理解...");
printf("\n\n\t作者保证本程序在不被恶意修改下所破坏的文件可以100%%恢复...");
printf("\n\n\t此程序只修复PE文件,可以扩展其他文件...");
printf("\n\n\t此代码公开只为技术交流...");
printf("\n\n\n\t\t\t\t\t\t遲、钝dè豬QQ:1007566569\n\n");
printf("\t\t\t\t\t\t2010年12月16日 23:10设计\n\n");
printf("*******************************************************************************");
system("pause");
system("cls");
printf("请输入要修复的分区或目录的绝对路径 [直接按回车键,默认C盘]:");
gets(directory);
pian();
printf("共扫描了【%d】个文件\n\n",r);
printf("发现了【%d】个PE文件\n\n",g);
printf("修复成功【%d】个文件\n\n",i);
printf("修复失败【%d】个文件\n\n",a);
system("pause");
}
/************************************/
/*-------------文件格式判断-----------*/
/************************************/
int pian()
{
/*-------------------PE文件--------------------------*/
dell=1;
count=viewfiles(directory,0x0,0x2,pe);
if(count==0)dell=0;
/*------------------可扩展其他格式文件--------------*/
}
/************************************/
/*-------------修复动作选择-----------*/
/************************************/
int diao(const char *filename)
{
switch(dell)
{
/*--------------匹配文件格式进行对应破坏动作---------*/
case 1: pe_(filename);g++; break;
/*------------------可扩展其他格式文件--------------*/
}
}
/************************************/
/*-------------PE修复动作-----------*/
/************************************/
int pe_(const char *filename)
{
FILE *fp;
char cih[]={0x4D,0x5A};
if((fp=fopen(filename,"rb+"))==NULL)
{
printf("【修复失败】[%s]\n\n",filename);
a++;
}
else
{
fseek(fp,0,0);
fwrite(cih,sizeof(cih),1,fp);
fclose(fp);
printf("【修复成功】[%s]\n\n",filename);i++;
}
}
/************************************/
/*-------------匹配文件动作-----------*/
/************************************/
bool scanvir(const char *filename,long offset,int length,void *vir)
{
FILE *fp;
char *rvir;
bool b=false;
fp=fopen(filename,"rb");//以只读二进制模式打开文件
if(fp!=NULL)
{
fseek(fp,0,2);//将指针(光标)指向文件尾端
if(offset+length<=ftell(fp))//文件偏移地址加长度<=指针(光标)尾端位置 判断文件是否存在特征代码段 即特征码的偏移量地址和长度
{
fseek(fp,offset,0);//将指针指向文件起始的offset偏移地址....
rvir=new char;
fread(rvir,length,1,fp);//读取 length 长度的代码并存入rvir变量
b=memcmp(vir,rvir,length)==0;//把提取的代码与预定义的特征码比较
delete[] rvir;
}
fclose(fp);
}
return b;
}
/************************************/
/*-------------文件遍历函数-----------*/
/************************************/
int viewfiles(char *directory,long offset,int length,void *vir)
{
WIN32_FIND_DATA fdFindData;
HANDLE hFind;
char *filename;
int count=0;
BOOL done;
filename=new char;
strcpy(filename,directory);
strcat(filename,"\\*.*");
hFind=FindFirstFile(filename,&fdFindData);
delete[] filename;
done=hFind!=INVALID_HANDLE_VALUE;
while(done)
{
if(strcmp(fdFindData.cFileName,".") && strcmp(fdFindData.cFileName,".."))
{
filename=new char;
strcpy(filename,directory);
strcat(filename,"\\");
strcat(filename,fdFindData.cFileName);
if((fdFindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY)
count+=viewfiles(filename,offset,length,vir);
else
{r++;
if(scanvir(filename,offset,length,vir))
{
diao(filename);
}
}
delete[] filename;
}
done=FindNextFile(hFind,&fdFindData);
}
FindClose(hFind);
return(count);
}
编译环境是 DEV C++ 5.0 沙发啊 这个有什么用啊 新手看不懂,这个是做什么的? {:2_26:}我也想知道 {:3_49:}{:3_57:} 你至少告诉我们会有什么后果吧,我可不想亲自试验。 确实很恶意的,嘎嘎 回复 6# 小飞侠
这个是修复程序 找找第一个 破坏程序 可以破坏所以PE文件 其实至少修改了 前两个字节而已... 修复程序只是还原了前两个字节 很简单的 报错!{:5_91:} 什么东东啊 呵呵看不懂啊 新人,看不懂这是什么呢!!{:5_92:} {:5_90:}好长啊~~~~ 又有人看天书了{:5_99:} 小飞侠 发表于 2011-4-30 11:18 static/image/common/back.gif
报错!
你应该是用了 VC 吧?我用的DEV C++如果报错 不妨在各个函数的尾端 加入 return 0; 返回语句
Love 梦想 发表于 2011-6-20 13:18 static/image/common/back.gif
你应该是用了 VC 吧?我用的DEV C++如果报错 不妨在各个函数的尾端 加入 return 0; 返回语句
我瞅瞅~~{:5_109:} 什么东西啊 没有这个编译器 提供以下可以吗
页:
[1]