shell脚本转成二进制可执行程序:

gzexe

gzexe命令即可隐藏shell源码,它不但加密,同时压缩文件

gzexe xxx.sh

生成加密后的脚本xxx.sh和shell备份源码xxx.sh~
缺点: gzexe可以直接转换明文。

gzexe -d xxx.sh

shc

通过shc加密后一般来说是安全的, 不过可以使用gdb和其它的调试工具获得最初的源代码. 如果你需要更加安全的方法, 可以考虑使用wzshSDK.
另外, shc还可以设置脚本的运行期限和自定义返回信息:

shc -e 11/23/2027 -m "xxx." -f xxx.sh

-e表示脚本将在2027年11月23日前失效, 并根据-m定义的信息返回给终端用户

shc编译

  • 下载源码:http://www.datsi.fi.upm.es/~frosal/(官方), 也可以在github上搜索下载
  • ./configure 配置生成Makefile
  • 修改src下面Makefile:
    根据使用场景修改CCCPP,如果是嵌入式,则修改为对应的交叉编译链;如果是PC,则不需要修改
  • make 生成可执行程序

shc基本使用

  • shc -h

    shc Version 4.0.3, Generic Shell Script Compiler
    shc GNU GPL Version 3 Md Jahidul Hamid <jahidulhamid@yahoo.com>
    shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-o outfile] [-rvDSUHCABh] -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: --
        -o %s  output filename
        -r     Relax security. Make a redistributable binary
        -v     Verbose compilation
        -S     Switch ON setuid for root callable programs [OFF]
        -D     Switch ON debug exec calls [OFF]
        -U     Make binary untraceable [no]
        -H     Hardening : extra security protection [no]
               Require bourne shell (sh) and parameters are not supported
        -C     Display license and exit
        -A     Display abstract and exit
        -B     Compile for busybox
        -h     Display help and exit
    
        Environment variables used:
        Name    Default  Usage
        CC      cc       C compiler command
        CFLAGS  <none>   C compiler flags
        LDFLAGS <none>   Linker flags
    
        Please consult the shc man page.
  • 加密脚本.

    # shc -v -r -f xxx.sh

    生成两个文件,xxx.sh.x 和 xxx.sh.x.c.
    其中xxx.sh.x是加密后的可执行的二进制文件,是动态链接形式;
    xxx.sh.x.c是生成 xxx.sh.x的原文件(c语言)

  • 生成静态链接的二进制可执行文件.

    # CFLAGS=-static shc -r -f xxx.sh 

    在嵌入式设备上使用:

  • 编译时选择交叉编译链编译

  • 编译完成后需将生成的shc可执行程序和需要转换的脚本文件拷贝到嵌入式设备上

  • 在设备上运行,生成相应的C文件,因嵌入式设备上一般不带编译链,所以还需要下一步

    #一定要加上`-B`
    ./shc -r -f xxx.sh -B
    #一定要重新赋予可执行权限
    chmod a+x xxx
  • 将上一步生成的C文件拷贝到主机上,交叉编译生成对应的可执行程序