通过SHC将BASH脚本编译为ELF文件

SHC 是由 Francisco Rosales 开发、基于 GPLv2 许可证发布的 Unix/Linux 开源脚本封装混淆工具,它并非真正的脚本编译器,不会将 Shell 逻辑直接转换为机器码,针对 Linux 环境下 Bash 等解释型脚本明文易被查看修改的问题,该工具可实现对脚本进行处理并生成ELF二进制文件,以此避免脚本源码直接明文暴露。

通过使用wget下载脚本程序源代码,使用gcc工具编译生成ELF文件,并将其移入到/bin/目录下保存。

[root@localhost ~]# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz
[root@localhost ~]# tar xvfz shc-3.8.9.tgz
[root@localhost ~]# cd shc-3.8.9

[root@localhost shc-3.8.9]# gcc -c shc.c
[root@localhost shc-3.8.9]# gcc -o shc shc.o
[root@localhost shc-3.8.9]# cp -a shc /bin/

准备一个sh脚本,通过执行如下命令直接完成脚本转为可执行文件。

[root@localhost ~]# shc -r -T -f test.sh
[root@localhost ~]# gcc -c test.sh.x.c
[root@localhost ~]# gcc -o test test.sh.x.o

但该工具本质属于运行时内存解密的混淆封装,解密后的原始脚本会存放在进程内存中,可通过内存 dump 手段提取脚本内容,无法防护高敏感密钥,仅能实现基础的源码防直接查看。