SHC代表shell script compiler,即shell腳本編譯器。通過SHC編譯過的腳本程序對普通用戶而言是不讀的,因此如果你想保護你的代碼(例如含有密鑰),則可以考慮SHC;然而有些人可以通過反向編譯的方式破解SHC加密過的腳本。
下面我們開始介紹:
一、使用SHC加密bash腳本程序
1.下載並編譯SHC
# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz
# tar xvfz shc-3.8.7.tgz
# cd shc-3.8.7
# make
你可以在SHC官方網站找到其最新源代碼。
現在我們驗證SHC是否正確安裝:
$ ./shc -v
shc parse(-f): No source file specified
shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script
2.建立一個測試bash腳本
#!/bin/bash
echo -n "How many random numbers do you want to generate? "
read max
for (( start = 1; start <= $max; start++ ))
do
echo -e $RANDOM
done
3.使用SHC加密bash腳本
$ ./shc -f random.sh
之後我們可以看到多出兩個文件:
$ ll random.sh*
-rwxr-xr-x 1 lesca lesca 153 2012-05-16 06:34 random.sh*
-rwx--x--x 1 lesca lesca 10512 2012-05-16 06:34 random.sh.x*
-rw-r--r-- 1 lesca lesca 10145 2012-05-16 06:34 random.sh.x.c
• random.sh 是原始的未加密的bash腳本
• random.sh.x 是加密的二進制格式的bash腳本
• random.sh.x.c 是random.sh的C源代碼。該文件是從random.sh轉換而來的,SHC就是通過將bash腳本轉為C語言再編譯之進行加密的。
$ file random.sh*
random.sh: Bourne-Again shell script text executable
random.sh.x: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
random.sh.x.c: ASCII C program text
4.執行加密的bash腳本
$ ./random.sh.x
How many random numbers do you want to generate? 3
15146
20741
17825
二、SHC的其他功能
1.設置腳本使用期限
我們可以通過SHC指定程序的有效期,過期後程序將失效,任何嘗試運行的用戶將收到錯誤消息。SHC使用-e dd/mm/yyyy來開啟該功能:
$ ./shc -e 31/12/2011 -f random.sh
如果程序過期了,將會得到以下消息:
$ ./random.sh.x
./random.sh.x: has expired!
Please contact your provider
結合-m "message"選項,我們可以指定發生錯誤時輸出的消息:
$ ./shc -e 31/12/2011 -m "Contact [email protected] for new version of this script" -f random.sh
$ ./random.sh.x
./random.sh.x: has expired!
Contact [email protected] for new version of this script
2.創建可重復發布的加密腳本
• -r: 允許該腳本在同操作系統的不同硬件平台上運行
• -T: 允許讓ltrace, strace那樣的程序追蹤腳本運行
• -v: 輸出詳細信息
通常-r與-T一起使用,用於創建可重復發布且可追蹤的加密腳本,例如:
$ ./shc -v -r -T -f random.sh
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc random.sh.x.c -o random.sh.x
shc: strip random.sh.x
shc: chmod go-r random.sh.x
$ ./random.sh.x
How many random numbers do you want to generate? 3
1311
19637
14891