是否可以将bash脚本转换为可执行文件?

时间:2015-07-07 22:32:13

标签: bash converter exe elf

问题很简单;是否可以将bash脚本转换为可执行文件?如果是的话,怎么办呢?

3 个答案:

答案 0 :(得分:9)

这是可能的,但你不想这样做。

  • 这不会是有效的混淆。
  • 它不会更小。
  • 它不会更快。

它不会更小

在支持将脚本编译为独立可执行文件的地方,可以通过将解释器的副本放入可执行文件来完成。因此,这比单独的脚本大得多。

它不会更快

遗憾的是,bash使用的执行模型本身很慢:几乎所有功能都是由外部命令提供的;和简单命令的参数,甚至它们的名称,都可以通过扩展操作的结果进行修改。这种动态性使得无法有效地编译性能。 (zsh支持预编译过程,但好处有限,主要是解析自身的过程。)

它不会是有效的混淆

shc为例:它将脚本的原始源作为命令行参数传递。因此,只需从/proc中读取命令行参数或使用strace即可读取该源。

正如他们所说,“默默无闻的安全根本就没有安全性” - 任何能够合理胜任的人都可以通过这种方式轻率提取任何密码或其他内容。

答案 1 :(得分:1)

您可以使用shc(如Flavius Anton所述)。

但是你需要知道这个二进制文件不是全部​​独立的。它仍然依赖于shell,即如果代码是专门为Bash编写的,然后使用shc进行转换,则在系统上没有安装Bash的情况下它将无法运行。

限制:

  1. 大小:大幅增加。 23bytes脚本的test变成了9.6KB二进制文件。
  2. 速度:它的运行速度比普通的Bash脚本慢。
  3. Bash脚本可转换的大小受_SC_ARG_MAX系统配置参数的限制。
  4. 二进制文件取决于Bash。
  5. 这是一种代码混淆,对智能攻击无效。
  6. <小时/>

    另一种方法是使用Bash2py

    bash2py将Bash源代码转换为源代码。然后,您可以使用cx_freeze之类的工具将Python源转换为二进制文件,该文件将在没有的情况下独立运行。不要太兴奋,你会发现这对实际工作毫无用处,至少现在是这样(bash2py<=3.2)。

    如何:

    1. Download and install Bash2py
    2. Install cx_freeze(或其他工具)
    3. 编写示例脚本 test
      #!/bin/bash
      echo works
    4. 将其转换为python:
      bash2pyengine ./test
    5. 将生成 test.py python脚本。使用 cx_freeze
      cxfreeze ./test.py
    6. 等工具对其进行编译
    7. 将创建包含大量共享对象文件的二进制文件(cx_freeze的dist目录)。您可以在那里找到二进制文件(名为test)。从该目录运行它。请注意,共享对象文件是此二进制文件的依赖项。只要您使用它获取所有共享对象文件,就可以移植此二进制文件。
    8. 限制:

      1. 大小:这是一个双向进程,并且在每个进程中大小都会大大增加(超级重),特别是在cxfreeze步骤中,因为它会生成大量共享对象文件以及二进制文件单独变得巨大。对于上述test脚本,原始尺寸为23bytestest.py -> 38bytestest (binary) -> 1.3MB和总(binary and it's dependencies) -> 6.5MB!!!
      2. 速度:我认为Bash代码运行速度会比这更快。
      3. Bash2py和冻结工具(cx_freeze等)的所有限制均适用。
      4. Bash2py尚未发展为可用。您将在Bash2py Manual Page中看到大量红色文字/条目。红色文本在其上下文中表示不受支持的。还有许多支持松散的功能。例如:Array是橙色(现在),这意味着“不一定得到很好的支持”,实际上它根本不受支持(但bash2py<=3.2)。因此,即使是Bash to Python转换也没有很好地执行,你必须考虑下一步的限制(冻结)。
      5. 最后:

        以上两者都不是真正的解决方案。要明确的是,Bash2pyshc更糟糕,因为它不支持所有Bash功能(还有bash2py<=3.2),即您无法自由编写代码并期望它可以与Bash2py。

        经过所有这些乏味的努力,我不禁同意@Charles Duffy:

          

        这是可能的,但你不想这样做。

答案 2 :(得分:0)

是的,有。这是一个名为“shc”的小项目( Sh ell C ompiler)。您可以在Github repo

上找到更多信息

我知道我大约2年前使用它并且工作正常。