轉自https://www.xiaohuai.com/4949
SHC代表shell script compiler,即shell腳本編譯器。通過SHC編譯過的腳本程序對普通用戶而言是不讀的,因此如果你想保護你的代碼(例如含有密鑰),則可以考慮SHC;然而有些人可以通過反向編譯的方式破解SHC加密過的腳本。
1.下載並編譯SHC
1
2
3
4
5
|
wget http:
//www
.datsi.
fi
.upm.es/~frosal
/sources/shc-3
.8.9.tgz
tar
zxf shc-3.8.9.tgz
cd
shc-3.8.9
mkdir
-p
/usr/local/man/man1
make
install
|
2.建立一個測試bash腳本
1
2
3
4
5
6
7
8
9
|
#!/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
|
這個腳本的意思輸出幾個隨機數,你執行的時候輸入2,就輸出2個,輸入3就輸出3個。
3.使用SHC加密bash腳本
1
|
$ .
/shc
-f random.sh
|
之后我們可以看到多出兩個文件:
1
2
3
4
|
$ 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語言再編譯之進行加密的。
4.執行加密的bash腳本
1
2
3
4
5
|
$ .
/random
.sh.x
How many random numbers
do
you want to generate? 3
15146
20741
17825
|
二、SHC的其他功能
一些常用參數
1
2
3
4
5
|
-e
date
(指定過期時間)
-m message (指定過期提示的信息)
-f script_name (指定要編譯的shell路徑)
-r relax security (在不同操作系統執行)
-
v
Verbose compilation (輸出編譯的詳細情況)
|
1.設置腳本使用期限
我們可以通過SHC指定程序的有效期,過期后程序將失效,任何嘗試運行的用戶將收到錯誤消息。SHC使用-e dd/mm/yyyy來開啟該功能:
1
|
$ .
/shc
-e 31
/12/2011
-f random.sh
|
如果程序過期了,將會得到以下消息:
1
2
3
|
$ .
/random
.sh.x
.
/random
.sh.x: has expired!
Please contact your provider
|
結合-m “message”選項,我們可以指定發生錯誤時輸出的消息:
1
2
3
4
|
$ .
/shc
-e 31
/12/2011
-m "Contact admin@lesca.me
for
new version of this script" -f random.sh
$ .
/random
.sh.x
.
/random
.sh.x: has expired!
Contact admin@lesca.me
for
new version of this script
|
2.創建可重復發布的加密腳本
-r: 允許該腳本在同操作系統的不同硬件平台上運行
-T: 允許讓ltrace, strace那樣的程序追蹤腳本運行
-v: 輸出詳細信息
通常-r與-T一起使用,用於創建可重復發布且可追蹤的加密腳本,例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ .
/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
|
解密:
git地址:https://github.com/yanncam/UnSHc
將unshc wget或者上傳到任意目錄
然后可執行如下命令查看幫助
1
|
.
/unshc
.sh -h
|
執行下面的命令進行解密(此過程可能耗時有點長,需耐心等待)
1
2
3
|
wget https:
//www
.xiaohuai.com
/down/unshc
.sh
chmod
+x unshc.sh
.
/unshc
.sh script.sh.x -o script_decrypted.sh
|
script.sh.x文件為經過加密的二進制文件
script_decrypted.sh文件為解密后shell腳本