用shc加密或者编译shell脚本

这是针对上一篇How to Encrypt Your Bash Shell Script on Linux Using SHC [ZT]的延伸资料整理。

1. 动态链接

文中介绍的两种编译方式,无论是shc -r -f random.sh还是shc -v -r -T -f random.sh生成的二进制文件都是动态链接形式的,所以,在其他平台上不能运行。

2. 静态链接

不过,我们可以通过下面的方式生成一个静态链接的二进制可执行文件。

1
# CFLAGS=-static shc -r -f random.sh

SHC的可选参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@liudongkai /]# shc --help
shc: invalid option -- '-'
shc parse: Unknown option
shc Version 3.8.9, Generic Script Compiler
shc Copyright (c) 1994-2012 Francisco Rosales <frosal@fi.upm.es>
shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script

#设置过期时间
-e %s Expiration date in dd/mm/yyyy format [none]
#过期信息提示
-m %s Message to display upon expiration ["Please contact your provider"]
#加密脚本名称
-f %s File name of the script to compile

-i %s Inline option for the shell interpreter i.e: -e
-x %s eXec command, as a printf format i.e: exec('%s',@ARGV);
-l %s Last shell option i.e: --
#宽松的安全性,可以相同操作系统的不同机器中运行
-r Relax security. Make a redistributable binary
-v Verbose compilation
-D Switch ON debug exec calls [OFF]
-T Allow binary to be traceable [no]
#显示许可证并退出
-C Display license and exit
#显示摘要和退出
-A Display abstract and exit
#显示帮助和退出
-h Display help and exit

Environment variables used:
Name Default Usage
CC cc C compiler command
CFLAGS <none> C compiler flags

Please consult the shc(1) man page.

通过sch加密后的脚本文件很安全吗?

一般来说是安全的, 不过可以使用gdb和其它的调试工具获得最初的源代码. 如果你需要更加安全的方法, 可以考虑使用wzshSDK, 这是个shell 2 shell的加密方式,只是变型后的脚本,如果使用了证书或者LIC限制,需要部署wzshSDK的运行环境。

还有ccsh ,好像也可以,是shell 2 c的,但没验证。

另外还有一个名叫deshc的shc加强版,不过没地方下载

参考:
http://blog.csdn.net/richardsa/article/details/5507572
http://www.cnyunwei.com/thread-1052-1-1.html
https://baoz.net/shell%E5%8A%A0%E5%AF%86%E4%BF%9D%E6%8A%A4%E7%A8%8B%E5%BA%8Fshell-2-c-shc-sh2c/

二进制文件的剖析
有兴趣的朋友可以参阅下面的文章:
Paranoid Penguin - Limitations of shc, a Shell Encryption Utility