shell脚本转换为c代码的工具
安装
cc -s shellc.c -O2 -o shellc
编译shell脚本并生成可执行程序
shellc example.sh
cc -s example.sh.c -O2 -o example -lpthread
生成的C代码是 example.sh.c
,即原始文件名后加.c
。
对于生产环境中使用的程序,建议在编译时添加参数-s
, 以删除可执行程序中的符号表,增加了反汇编和逆向工程的难度。
本人试用了可以将shell脚本编译成可执行程序的工具shc
和 shellcrypt
,存在的主要问题是:
shc
实际调用的是sh -c
命令,通过ps -ef
命令就能看到源码。shell脚本长度不能超过ARG_MAX值。shellcrypt
不支持外部参数输入,加密算法相对简单。生成的可执行程序可以通过与0x000C
进行异或解密来获得源代码。
shellc除了解决上述这两工具存在的问题外,还增加了代码混淆、随机生成有效字符位置计算函数、随机字符加密、反调试等增加反汇编逆向复杂度。
该程序适用于可定义函数语法的shell,如ksh
、bsh
、zsh
等,不支持csh
(csh
不支持函数定义)。
目前,该程序已在AIX
、UNIX
、 Linux
环境中具有实际应用。建议对编译后的程序进行全面测试,以防止生产故障。
如果shell脚本涉及人机交互,需对原shell脚本做一些修改,read input
需改为 read input </dev/tty
。