我想對於IT人來說,尤其是以MIS或系統管理者來說,撰寫一些能夠把既定事項排程處理的批次檔(bat or shell script),應該是再為熟悉不過的事,不過,或是相同的情境卻是發生在客戶或非自己管理的主機上時,或許面向又不太一樣了!這時候或許就得要考慮把自己撰寫好的批次檔進行加密,以免造成其它不必要的困擾。
這邊我主要還是介紹一下在LINUX上的應用情境,若是用在WINDOWS上的工具,應該只要GOOGLE一下"bat to exe"之類的就有不少。(有什麼工具GOOGLE後會沒有的嗎?)
這邊我一樣用目前我慣用的LINUX系統(CentOS 6.6)來介紹,在LINUX上Compile Shell Script的工具,我自己是實作了shc這隻工具,簡單說它就是把shell script透過gcc的方式打包成執行檔,讓一般人無法得知你撰寫的內容。
相關流程如下:
- 安裝gcc及相關套件:
yum -y install wget gcc glibc-static
- 下載shc壓縮檔:
wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz
tar -zxvf shc-3.8.9.tgz
cd shc-3.8.9 - 執行安裝:
make
結果:
cc -Wall shc.c -o shc
*** ▒Do you want to probe shc with a test script?
*** Please try... make test
make install
結果:
*** Installing shc and shc.1 on /usr/local
*** ▒Do you want to continue? y
install -c -s shc /usr/local/bin/
install -c -m 644 shc.1 /usr/local/man/man1/
install: target `/usr/local/man/man1/' is not a directory: No such file or directory
make: *** [install] Error 1 - 執行方式:
shc Usage:
shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script
主要的使用參數:更多內容可以參考man shc
-e date
Expiration date in dd/mm/yyyy format [none]
-m messagemessage to display upon expiration ["Please contact your provider"]
-f script_name
File name of the script to compile
-r
Relax security. Make a redistribution binary which executes on different systems running the same operating system.
-v
Verbose compilation
-T
Allow binary to be traceable (using strace, ptrace,truss, etc.)
- 實際測試和驗證
建立一個sh檔:1.sh
#!/bin/bashecho -e "test shc"exit 0
執行shc:
shc -rvT -f 1.sh
過程如下
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@
shc [-l]=
shc opts=
shc: cc 1.sh.x.c -o 1.sh.x
shc: strip 1.sh.x
shc: chmod go-r 1.sh.x
驗證檔案:file 1.sh
1.sh: Bourne-Again shell script text executable
file 1.sh.x
1.sh.x: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
file 1.sh.x.c
1.sh.x.c: ASCII C program text
執行結果:
A. 執行1.sh:sh 1.sh
test shc
B. 執行1.sh.x:./1.sh.x
test shc
- 執行靜態連結加密檔 (檔案較大)
CFLAGS=-static shc -rvT -f 1.sh
驗證檔案:file 1.sh.x1.sh.x: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.18, stripped
執行結果:./1.sh.x - test shc
- 測試可用期限
shc -e 25/03/2015 -m "InDeepNight TesT shc function" -rvT -f 1.sh
執行結果: - ./1.sh.x
- ./1.sh.x: has expired!
- InDeepNight TesT shc function
PS:若直接make install會發現有ERROR,主要是因man檔的安裝路徑不存在,可手動先修改makefile後再進行make install,
修改指令如下:
sed -i -e 's/\/man\/man1\//\/share\/man\/man1\//g' ./makefile