如何编译linux shell脚本成为独立的可执行文件*二进制*(即不仅仅是例如chmod 755)?

the*_*now 40 binary obfuscation scripting executable compilation

我正在寻找一个免费的开源工具集,它将编译各种"经典"脚本语言,例如Korn Shell,ksh,csh,bash等作为可执行文件 - 如果脚本调用其他程序或可执行文件,对于它们包含在单个可执行文件中.

原因:

  1. 混淆代码交付给客户,以便不泄露我们的知识产权 - 交付到客户自己的机器/系统上,我无法控制我可以设置的访问权限,因此程序文件必须是二进制的通过在文本编辑器或hexdump查看器中查看,无法轻易看到工作.

  2. 为客户制作单个,简单部署的程序,而不需要/或少量任何外部依赖项.

我更喜欢简单的东西而不需要包管理器,因为:

  1. 我不能依靠客户的知识来执行(联合国)包装说明和

  2. 我不能依赖管理其机器的策略来安装软件包(实际上是来自第三方).

最简单的首选方法是能够将正常运行的单个可执行文件编译为正确的机器代码,而不会产生任何依赖性.

the*_*now 40

完全满足我需求的解决方案是SHC - 一个免费工具,或CCsh商业工具.两者都将shell脚本编译为C,然后可以使用C编译器进行编译.

关于SHC的链接:

关于CCsh的链接:

  • `shc` 并不是**有效的混淆——在运行时读取脚本内容很简单。`strace` 或 `sysdig`,甚至只是适当的扫描 `/proc` 都可以完成提取原始脚本的工作。 (3认同)
  • 我意识到这是六年前发布的,但是运行由 `shc` 编译的程序仍然需要安装 shell 和所有调用的实用程序。它唯一的好处是(弱)混淆 (3认同)
  • 修改:我认为他至今仍在更新SHC(2012) (2认同)

Con*_*lls 5

您可以使用诸如 ofbsh 之类的东西来混淆 shell 脚本。但是,您不会轻易地将其他程序捆绑到 unix 的单个可执行文件中。通常,安装方法是为您平台的包管理器(例如rpm、 deb、 pkg)构建一个包,或者提供一个 tarball 以在适当的目录中解开。

如果您需要解压缩内容的可执行文件,您可以使用 shell 存档。查看shar(1)的文档,看看是否会得到你想要的

如果您确实需要将多个 C 程序粘合在一起的脚本编写能力,请查看 Tcl 语言。它有一个 API,旨在简单地包装希望看到argv[]样式参数的C 程序。您甚至可以将 C 代码块嵌入到自定义 Tcl 解释器中,并将其与各种 Tcl 脚本粘合在一起。

如果你真的需要让它不透明,你可以加密 tcl 脚本并将整个内容包装在一些东西中,将 tcl 脚本解密到缓冲区,然后在它们上运行 Tcl 解释器。Tcl 可以接受来自文件或char*缓冲区的脚本,因此未加密的脚本永远不必访问文件系统。


Sir*_*ius 5

你可以用这个:http://megastep.org/makeself/

这将生成一个shell脚本,该脚本会自动将捆绑的tar.gz存档提取到临时目录中,然后可以在提取时运行任意命令.

使用此工具,您只能向客户端提供一个shell脚本.

然后,此脚本将您的ofbsh模糊脚本和二进制文件压缩到/ tmp中,并透明地运行它们.