需求及應用場景
1、簡化操作。一般的軟件安裝過程,如果想要精簡步驟,我們一般會將需要在命令行中輸入的命令寫成一個腳本,同時將安裝介質準備好。我們將腳本和安裝介質上傳到生產環(huán)境,然后通過執(zhí)行腳本來完成安裝。如果能夠將這兩個文件合并為一個可執(zhí)行文件,那安裝的過程就更簡單明了。
2、代碼保護。對于一段腳本,提供給用戶使用,但是不希望用戶看到腳本的內容,可以通過將腳本發(fā)布為.bin的形式。這樣用戶在環(huán)境中可以執(zhí)行、安裝,但是無法看到里面的內容,也無法修改,從而達到保護腳本內容的目的。
實現方法
1、本文以在Redhat系統中安裝ftp命令為例說明,如何將安裝腳本和安裝介質整合成一個文件,簡化操作。
首先,編寫一個腳本,包含安裝的命令。
#!/bin/sh
echo "Hello World"
dir_installation=/root/create_bin
sed -n -e '1,/^exit 0$/!p' $0 > "${dir_installation}/ftp-0.17-54.el6.x86_64.rpm" 2>/dev/null
cd $dir_installation
rpm -ivh ftp-0.17-54.el6.x86_64.rpm
rm ftp-0.17-54.el6.x86_64.rpm
exit 0
注意,這個腳本的關鍵在于sed,他會把exit 0后面的內容提取出來,另存為rpm包,然后執(zhí)行安裝,安裝完成后刪掉rpm。
最后,我們用cat命令將腳本和安裝包生成一個新的文件。
這時,如果用file命令查看install-rpm.bin文件,可以發(fā)現它的類型還是文本類型,用vim編輯器打開,還是可以看到腳本內容的,也可進行修改。
2、對于第二個隱藏代碼內容的需求,有一款工具叫做 shc ,可以用它來將腳本編程二進制文件。
shc的用法比較簡單,下載后make生成可執(zhí)行文件,然后直接對腳本進行加密,會生成兩個文件。一個以.x結尾,為可執(zhí)行的二進制文件。另一個以.x.c結尾,為生成的中間c文件。shc還能指定可執(zhí)行腳本的過期時間。
wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
tar xvfz shc-3.8.9b.tgz
cd shc-3.8.9b
make
./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
./shc -f install-rpm.bin
通過 shc 可以將腳本文件編譯成二進制文件,隱藏了腳本的內容,對于一般的用戶是沒辦法查看和修改的。當然,還是有辦法可以再將二進制文件轉換為純文本的腳本的。