シェルスクリプトの中身を見れないようにしようと思って調べていた所、shcというシェルスクリプトをバイナリ化するプログラムがあるようだったので使ってみる事にした。
前提として、利用にはmakeが必要なので、gccが必要。
1.インストール
まずはインストール。
こちらのページから、以下のコマンドでダウンロード、コンパイルを行う。
HTTP="http://www.datsi.fi.upm.es/~frosal/" && curl -s $HTTP | grep .tgz | awk -F\" '{print $2}' | sed 's/^.\///g' | xargs -I{} echo $HTTP{} | xargs wget
tar xzvf shc-*.tgz
cd shc-*
make
make install
これでインストールが完了した。
2.バイナリ化を行う
shcコマンドは、基本的に以下のようにコマンドを実行するだけで、「指定したシェルスクリプト名.x」というバイナリファイルを作成してくれる。
shc -f バイナリ化するシェルスクリプトPATH
実際に、以下のようなシェルスクリプトを作成し、バイナリ化してみる。
●test.sh
#!/bin/sh
echo test
echo $0
pwd
[root@BS-PUB-CENT7-01 ~]# pwd
/root
[root@BS-PUB-CENT7-01 ~]# ls -l test.sh*
-rw-r--r--. 1 root root 32 4月 6 00:35 test.sh
[root@BS-PUB-CENT7-01 ~]# cat test.sh
#!/bin/sh
echo test
echo $0
pwd
[root@BS-PUB-CENT7-01 ~]# sh test.sh
test
test.sh
/root
[root@BS-PUB-CENT7-01 ~]# shc -f test.sh
[root@BS-PUB-CENT7-01 ~]# ls -l test.sh*
-rw-r--r--. 1 root root 32 4月 6 00:35 test.sh
-rwx--x--x. 1 root root 11152 4月 6 00:37 test.sh.x
-rw-r--r--. 1 root root 9283 4月 6 00:37 test.sh.x.c
[root@BS-PUB-CENT7-01 ~]# file test.sh*
test.sh: POSIX shell script, ASCII text executable
test.sh.x: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=e335100ddec4e55e908a1d62a53d2c24156f9de0, stripped
test.sh.x.c: C source, ASCII text
[root@BS-PUB-CENT7-01 ~]# ./test.sh.x
test
./test.sh.x
/root
確かに、シェルスクリプトをバイナリ化できた。
あまり使う機会は無いだろうけど、いつかは利用するかもしれない。