[shell] 将脚本编译成二进制可运行文件

将shell脚本编译成二进制可运行文件

  1. 前言

    在编写shell脚本的时候可能会存在一些端到端连接的密钥,这时候需要对脚本进行加密处理才能给客户使用。

    此时需要使用shc​工具来对shell脚本进行编译,使用shc​将bash/shell脚本编译为二进制可执行文件。

    SHC代表shell script compiler​,即shell脚本编译器。通过SHC编译过的脚本程序对普通用户而言是不读的,因此如果你想保护你的代码(例如含有密钥),则可以考虑SHC;然而有些人可以通过反向编译的方式破解SHC加密过的脚本。

  2. 安装

    sudo apt update
    sudo apt install shc
    
  3. 参数解析

    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
    
  4. 实践

    1. 创建一个测试文件,并输出它

      $ vim test.sh
      
      加入下面的代码
      #! /bin/bash
      echo "test"
      
      $ bash test.sh
      

      请添加图片描述

    2. 加密

      $ 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
      

      请添加图片描述

  5. 安全性

    shc​ 使用的加密类型是叫做 RC4流密码的一个变体,目前它已经被证实存在弱点,存在被破解的可能,
    尤其在 shc​ 中,密钥被携带到加密脚本本身中,所以,是存在 通过反汇编破解出密钥,进而通过密钥还原原始脚本的可能性

    因此,我们不应该依赖 shc​ 加密的安全性,而是更多的把它当作是shell脚本内容的隐藏或者混淆工具。

  6. 解密方案

    https://github.com/yanncam/UnSHc

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

https://blog.csdn.net/Neutionwei/article/details/132503346

https://www.jb51.net/article/230510.htm

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 将shell脚本编译成二进制文件可以提高脚本的安全性和执行效率。常用的工具有shc和bashcc。shc可以将shell脚本编译成C语言代码,再通过gcc编译成二进制文件;bashcc则是直接将shell脚本编译成二进制文件。使用这些工具需要注意安全性和兼容性问题,建议在测试环境中进行验证。 ### 回答2: Shell脚本是由Shell解释器逐行解释执行的,它的执行效率比较低,特别是当脚本体积很大时,解释器会不断地读取并解释脚本的内容,导致性能下降。 而将Shell脚本编译成二进制则可以提高其执行效率。将Shell脚本编译成二进制的方式一般有两种,一种是使用shc编译器,另一种是使用软件打包工具,如makeself。 shc是一款能够将Shell脚本编译成C语言程序,并生成可执行文件的编译器。它的使用非常简单,我们只需要安装好shc,在脚本所在目录中使用命令“shc -f 原脚本文件名”即可将脚本编译成可执行文件,执行时可以直接运行生成的可执行文件。但是shc仅适用于Linux系统,且生成的代码不是真正的二进制代码,而是C语言源代码,需要再次编译才能生成真正的二进制可执行文件。 另一种方式是使用软件打包工具,如makeself。makeself可以将一组文件打包成一个自解压的脚本,并自动将脚本转换为二进制可执行文件。使用makeself可以将Shell脚本和相关文件打包成一个可执行文件进行分发,使得脚本执行时更加方便,但是它的执行效率不如使用shc编译的效率高。 需要注意的是,编译成二进制可执行文件不意味着脚本内容无法被看到和修改,只是将脚本转换成了二进制格式,使得执行效率更快,但是仍然可以使用反编译工具对可执行文件进行反编译并查看其内容。因此,在编写Shell脚本时,请注意脚本中可能包含的敏感信息,以保证信息的安全性。 ### 回答3: Shell脚本是一种文本文件,由一系列命令和控制结构组成,用于完成某些任务。Shell脚本可以提高工作效率和自动化程度,但由于其本质是一种解释性语言,因此运行速度不如编译型语言。在某些情况下,对于一些需要高速执行的脚本程序,我们可以将其编译成二进制文件。 要将Shell脚本编译成可执行的二进制文件,需要使用特定的工具,如shc、encsh、bashcc等。其中最常用的是shc,即shell脚本编译器。shc可以将Shell脚本转换成C程序,再通过C编译器生成可执行的二进制文件。 shc的使用非常简单,只需要在命令行输入“shc 文件名.sh”,即可将Shell脚本文件编译成文件名.x文件。接着,只需要将生成的二进制文件拷贝到指定的目录即可执行。 需要注意的是,编译后的二进制文件仍然依赖于系统的Shell解释器,因此需要确保该解释器存在于目标系统中。另外,编译后的二进制文件可能会存在安全隐患,因为其中的源代码可以轻松地反编译。因此,在编译时应该加入加密选项,对源代码进行加密,保证程序的安全性。 总之,将Shell脚本编译成二进制文件可以提高程序的运行速度和安全性,但需要注意一些细节问题。同时,我们也应该根据具体情况进行选择,毕竟并不是每个Shell脚本都需要编译成二进制文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锡城筱凯

你的鼓励是我创造的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值