加密你的 bash shell 脚本
16 May 2012一般情况下我们是不推荐加密你的shell脚本,这一点违背了开源的精神,但有的时候脚本里有一些敏感信息,还是加密一下吧。
1.下载shc并安装她
下载和安装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 -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.创建一个示例脚本
要确定这个脚本可以正常运行
$ vi random.sh
#!/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
$ ./random.sh
How many random numbers do you want to generate? 3
24682
1678
491
3.使用shc加密上面的 shell 脚本
$ ./shc -f random.sh
运行上面命令会生成2个文件
$ ls -l random.sh*
-rwxrw-r--. 1 ramesh ramesh 149 Mar 27 01:09 random.sh
-rwx-wx--x. 1 ramesh ramesh 11752 Mar 27 01:12 random.sh.x
-rw-rw-r--. 1 ramesh ramesh 10174 Mar 27 01:12 random.sh.x.c
random.sh 是原始的没有加密的脚本文件
random.sh.x 是加密后的二进制可执行文件
random.sh.x.c 是random.sh的c语言表示. 这个文件就是上面加密后的 random.sh.x 文件的源代码。shc 其实就是把 random.sh shell 脚本转换成 random.sh.x.c C源码 (当然她也把源码装换成可执行文件 random.sh.x)
$ file random.sh random.sh: Bourne-Again shell script text executable
$ file random.sh.x random.sh.x: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
$ file random.sh.x.c random.sh.x.c: ASCII C program text
4.执行加密后的脚本
$ ./random.sh.x
How many random numbers do you want to generate? 3
7489
10494
29627
注意加密后的二进制脚本是依赖bash的(原始脚本第一行要加/bin/bash)<!-- more -->
5.设置脚本额外信息
设置脚本失效时间
$ ./shc -e 31/12/2011 -f random.sh
$ ./random.sh.x
./random.sh.x: has expired!
Please contact your provider
设置脚本的作者信息
$ ./shc -e 31/12/2011 -m "Contact admin@thegeekstuff.com for new version of this script" -f random.sh
$ ./random.sh.x
./random.sh.x: has expired!
Contact admin@thegeekstuff.com for new version of this script
6.创建独立的可分发的加密脚本
$ ./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
28954
1410
15234
-r 创建可以在其它系统运行的加密的二进制脚本(当然其它系统的类型要和创建该脚本的系统一致)
-T 允许像 strace, ltrace 这类软件追溯
-v 显示编译过程
最后还是要说一句,bash shell 脚本还是不要加密,这不符合开源的精神。如果你实在要加密,也要当心那些不怀好意的家伙会把你的编译源文件反编译出来。
英文原文:How to Encrypt Your Bash Shell Script on Linux Using SHC