将shell脚本编译成二进制可运行文件
-
前言
在编写shell脚本的时候可能会存在一些端到端连接的密钥,这时候需要对脚本进行加密处理才能给客户使用。
此时需要使用
shc
工具来对shell脚本进行编译,使用shc
将bash/shell脚本编译为二进制可执行文件。SHC代表
shell script compiler
,即shell脚本编译器。通过SHC编译过的脚本程序对普通用户而言是不读的,因此如果你想保护你的代码(例如含有密钥),则可以考虑SHC;然而有些人可以通过反向编译的方式破解SHC加密过的脚本。 -
安装
sudo apt update sudo apt install shc
-
参数解析
shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-o outfile] [-rvDSUHCABh] -f script -e %s 指定过期日期 -m %s 指定过期后提示的消息 -f %s 输入需要加密的文件名 -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: -- -o %s 输出文件名 -r 创建发行二进制文件,可以在别的(相同操作系统)系统中运行,如果只在当前系统中运行,可以不用加这个,否则要加 -v 编译的详细情况 -S Switch ON setuid for root callable programs [OFF] -D 打开调试exec调用 -U Make binary untraceable [no] -H Hardening : extra security protection [no] Require bourne shell (sh) and parameters are not supported -C 显示许可证并退出 -A 显示描述并退出 -B Compile for busybox -h 显示帮助信息并退出 Environment variables used: Name Default Usage CC cc C compiler command CFLAGS <none> C compiler flags LDFLAGS <none> Linker flags
-
实践
-
创建一个测试文件,并输出它
$ vim test.sh 加入下面的代码 #! /bin/bash echo "test"
$ bash test.sh
-
加密
$ shc -v -f test.sh shc shll=bash shc [-i]=-c shc [-x]=exec '%s' "$@" shc [-l]= shc opts= shc: cc test.sh.x.c -o test.sh.x shc: strip test.sh.x shc: chmod ug=rwx,o=rx test.sh.x
执行加密后会生成两个文件
test.sh.x.c
和test.sh.x
。-
test.sh.x.c
是解析成c的源文件,没有作用,可以删除。 -
test.sh.x
是可执行的二进制文件,赋予执行权限后即可执行。
执行命令:
$ sudo chmod 777 test.sh.x $ mv test.sh.x test.sh $ ./test.sh
-
-
-
安全性
shc
使用的加密类型是叫做 RC4流密码的一个变体,目前它已经被证实存在弱点,存在被破解的可能,
尤其在shc
中,密钥被携带到加密脚本本身中,所以,是存在 通过反汇编破解出密钥,进而通过密钥还原原始脚本的可能性因此,我们不应该依赖
shc
加密的安全性,而是更多的把它当作是shell脚本内容的隐藏或者混淆工具。 -
解密方案
Reference
https://www.cnblogs.com/wangzy-Zj/p/17329627.html
https://www.phpernote.com/linux/1728.html
https://www.linuxprobe.com/shc-encrypt-shell.html
https://www.cnblogs.com/yuhaohao/p/10373050.html