最佳答案
使用shc编译脚本不会保护它们.你不会以这种方式获得更多安全性. shc编译的二进制文件解密并在启动时将脚本加载到内存中.然后,您可以在启动二进制文件后立即对其进行分段并从coredump中检索脚本.
原文链接:https://www.f2er.com/linux/440833.html这是一个名为test.sh的小例子脚本:
#! /bin/bash
echo "starting script and doing stuff"
sleep 1
echo "finished doing stuff"
用shc编译它:
shc -f test.sh
将其作为后台进程启动并立即进行分段:
./test.sh.x& ( sleep 0.2 && kill -SIGSEGV $! )
sleep 0.2将为二进制文件提供足够的时间来启动和解密原始脚本.变量$!包含最后一个后台进程启动的pid,因此我们可以使用分段错误信号SIGSEGV轻松杀死它(与kill -11 $相同!).
[1] + segmentation fault (core dumped) ./test.sh.x
现在我们可以在转储中搜索原始脚本:
cat core | strings
我们将dumpfile中的数据传递给字符串,然后将向我们显示文件中的所有可打印字符,现在我们可以看到垃圾之间的原始脚本:
...
4.0.37(2)-release
BASH_VERSINFO
BASH_VERSINFO
release
i686-pc-linux-gnu
BASH_EXECUTION_STRING
BASH_EXECUTION_STRING
#! /bin/bash
echo "starting script and doing stuff"
sleep 1
echo "finished doing stuff"
1000
EUID
EUID
1000
...
如果脚本很大,可能你必须用ulimit调整核心文件大小.
很简单吧?