我通过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
答案 0 :(得分:2)
我认为这不会起作用
“编译的二进制文件仍将依赖于shell 在shell代码的第一行中指定(即 #!/ bin / sh),因此shc不会创建完全独立的 二进制文件“。
答案 1 :(得分: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框上运行。
答案 2 :(得分:0)
您必须为需要支持的每个体系结构和操作系统执行此操作。在任何情况下,使用此方法进行分发似乎没有任何好处。它增加了依赖性并使交付变得复杂,我很确定“shc”编译器实现的任何混淆都很容易被逆转。