0

我通过 SHC 从 linux 服务器上的 bash 脚本创建了一个二进制可执行文件。创建的二进制文件在 linux 机器上运行良好,但在 Mac 上却出错了。如何将我的 bash 文件转换为能够在任何地方运行的二进制可执行文件(ubuntu、CentOS、Mac、Cygwin)?

    shc -v -r -T -f ir16fetcher.sh
    mv ir16fetcher.sh.x ir16fetcher

我的 bash 脚本的 Shebang

    #!/bin/bash

在 Linux 机器上

    ./ir16installer 
    USAGE  : ir16fetcher <servername/ip address> [the n th latest build - optional. Default 1]
    EXAMPLE: ir16fetcher jagger 2
    EXAMPLE: ir16fetcher 167.116.6.155
    REQUIRE: Please make sure conf file in installation folder ~/IRinstall/ir16 & ~/IRinstall/irmanager

在我的 Mac 上

    ./ir16installer 
    -bash: ./ir16installer: cannot execute binary file
4

3 回答 3

2

我觉得行不通

"编译后的二进制文件仍将依赖于 shell 代码第一行中指定的 shell(即 #!/bin/sh),因此 shc 不会创建完全独立的二进制文件。

来自http://www.datsi.fi.upm.es/~frosal/sources/shc.html

于 2013-06-21T07:59:36.813 回答
1

如果这里的目标是“隐藏”您的源代码,然后让代码的“隐藏”副本在您列出的 Unix 操作系统上可执行,那么加密确实是您唯一的选择。

我这样说是因为加密工具在每个基本 Unix 安装中都可用。出于您的目的,这是一件非常好的事情,因为您无需下载或配置任何其他内容。它们就在那里,作为操作系统自然安装的一部分。其中一种工具称为 openssl。

使用 openssl 加密您的文件/脚本:

echo precious-content | openssl aes-128-cbc -a -salt -k mypassword
U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z

使用 openssl 解密您的文件/脚本:

echo U2FsdGVkX1+K6tvItr9eEI4yC4nZPK8b6o4fc0DR/Vzh7HqpE96se8Fu/BhM314z | openssl aes-128-cbc -a -d -salt -k mypassword
precious-content

现在,要让 openssl 自动执行您希望它执行的操作,而无需花费数小时自己的时间找出方法,您可以将脚本粘贴到www.EnScryption.com 之类的站点。该站点将为您生成代码的“可执行”版本,然后您可以在任何 Mac、Ubuntu、RedHat、CentOS 机器上运行。

于 2016-06-26T21:57:10.237 回答
0

您必须为需要支持的每个架构和操作系统执行此操作。无论如何,使用这种方法进行分发似乎并没有任何好处。它增加了依赖项并使交付复杂化,而且我很确定“shc”编译器实现的任何混淆都很容易逆转。

于 2013-06-26T16:29:24.323 回答