如果我们想要混淆脚本代码,那么我们可以Shell 脚本编译器工具 (SHC) ,使用 shc 将 bash/shell 脚本编译为二进制文件,隐藏源代码并防止被被人修改的功能。由于在大多数操作系统上默认是不安装的,我们 mac 上可以使用 brew 安装,或在基于 Debian 的 Linux 系统上使用 apt 安装它。或者,我们可以从这里 (github存储库) 安装它并运行 make。

我们从这个 bash 脚本开始

#!/bin/bash
echo "Linux迷 How are you $1?"

构建编译后的脚本

来构建我们可以运行的文件

linuxmi@linuxmi:~/www.linuxmi.com$ shc -f linuxmi.sh

这将创建一个 linuxmi.sh.x,这是我们编译后的可执行文件,而 linuxmi.sh.x.c 则是 C 编译后的文件。

SHC 经过两个步骤:SHC 从 shell 脚本生成相当广泛、高度专业化的 C 源代码,然后使用 C 编译器对其进行编译以创建二进制程序。

第一步,SHC 生成一个扩展名为x.c的文件;然后在 $CC 环境变量中定义的 C 编译器在第二步中对其进行编译,以创建扩展名为 .x 的文件。

我们现在可以将文件重命名为类似于如下的文件

linuxmi@linuxmi:~/www.linuxmi.com$ mv linuxmi.sh.x linuxmi

注意:如果我们看到有一些错误,但输出文件已创建并按预期运行,那么通常可以忽略这些错误。

测试编译版本

我们要做的最后一件事是确保过程中一切顺利。我们首先使用 chmod a+x linuxmi。 接下来我们测试它的输出。在我们的例子中运行如下:

linuxmi@linuxmi:~/www.linuxmi.com$ ./linuxmi linuxmi.com

输出如下:

Linux迷 How are you linuxmi.com?

OK。

总结

如果你需要保护 Bash 脚本,不被别人知道与修改,那么 SHC 可能是你的最佳选择。它是目前最流行的将 (Bash) shell 脚本转换为可执行程序的免费工具。

不过,shc 编译器生成的二进制程序并不是真正安全的,你仍然可以通过一些努力来重建原始源代码。

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

shc 也不是 C 编译器之类的编译器,而是对 shell 脚本进行编码和加密,并生成具有附加到期功能的 C 源代码。

发表评论