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

Kal*_*lis 2 bash exe converter elf

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

Cha*_*ffy 9

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

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

它不会小

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

它不会更快

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

它不会是有效的混淆

就拿shc,例如:它的字面通过脚本的原始源作为命令行参数.因此,只需通过读取/proc或使用命令行参数即可读取该源strace.

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


fan*_*ton 1

就在这里。这是一个名为“shc”(Shell Compiler )的小项目。您可以在他们的Github 存储库上找到更多信息

我知道我大约 2 年前使用过它,效果很好。

  • 所以,我阅读了 shc 的源码。它甚至根本不**解析** bash 源代码;相反,它会生成一个模糊的可执行文件,仅**调用 bash**,并以原始脚本的源代码作为参数。一个需要 bash 副本才能运行的程序真的可以说是编译 bash 脚本吗? (5认同)
  • 引用 `shc` 的手册页:“shc 本身不是像 cc 这样的编译器,它而是对 shell 脚本进行编码和加密,并生成具有附加过期功能的 C 源代码。然后它使用系统编译器来编译一个剥离的二进制文件的行为与原始脚本完全相同。执行后,编译后的二进制文件将解密并使用 shell -c 选项执行代码。不幸的是,它不会像真正的 C 程序那样给您带来任何速度提升。” (2认同)