gpt4 book ai didi

linux - 从已编译的 bash 脚本中检索纯文本脚本

转载 作者:IT王子 更新时间:2023-10-29 01:00:20 25 4
gpt4 key购买 nike

前段时间,我为我的学校写了一些 bash 脚本。我认为“保护”它们会很聪明,所以我用 shc 将它们编译成一个二进制文件。几周后,我丢失了未编译的脚本,现在我只剩下二进制文件了。

有没有办法从 shc 生成的二进制文件中检索脚本?我查看了 shc 的源代码,想找到一种反编译二进制文件的方法,但没有成功。

最佳答案

使用 shc 编译您的脚本并不能保护它们。您不会以这种方式获得更多安全性。 shc 编译的二进制文件在启动时解密并将脚本加载到内存中。然后,您可以在启动二进制文件后立即对它进行段错误并从核心转储中检索您的脚本。

这是一个名为 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

我们将转储文件中的数据通过管道传输到字符串,然后它将向我们显示文件中的所有可打印字符,现在我们可以在垃圾之间看到原始脚本:

...
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 调整核心文件大小。很简单,对吧?

关于linux - 从已编译的 bash 脚本中检索纯文本脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3408373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com