加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 19:35:56 所属栏目:Linux 来源:网络整理
导读:前段时间,我为我的学校写了一些bash脚本.我认为“保护”它们会非常聪明,所以我用shc将它们编译成二进制文件.几周后,我丢失了未编译的脚本,现在我只剩下我的二进制文件了. 有没有办法从shc生成的二进制文件中检索脚本?我查看了shc的源代码,找到了一种没有运

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

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

最佳答案
使用shc编译脚本不会保护它们.你不会以这种方式获得更多安全性. shc编译的二进制文件解密并在启动时将脚本加载到内存中.然后,您可以在启动二进制文件后立即对其进行分段并从coredump中检索脚本.

这是一个名为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调整核心文件大小.
很简单吧?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读