如何缩小/混淆bash脚本

Chr*_*ian 22 bash shell obfuscation minify

当然,bash文件不能真正模糊,并且总是可读的.而且我不想将它们包装在一些二进制包中.重命名局部变量不值得麻烦.

但是有一个可靠的简单bash混淆器或minifier,至少删除所有的缩进,所有空行和所有空格而不破坏任何东西?特别是评论并注释掉了可能包含敏感文档或信息的脚本部分?

我会害怕简单的grep/sed-lines这样做,因为当然不能修改" HEREDOCs ",因此需要进行一些真正的解析.

也许有一个工具可以做到这一点,这将是伟大的!

c00*_*ter 28

:P这里有点搞笑.

假设您的脚本已命名,origin并且已将模糊的脚本命名obsf.

这是origin:

#!/bin/sh
echo "fooo"
Run Code Online (Sandbox Code Playgroud)

这是 obsf

$ echo "echo $(base64 origin)" > obsf
$ cat obsf
echo IyEvYmluL3NoCmVjaG8gImZvb28iCg==
$ chmod +x obsf
Run Code Online (Sandbox Code Playgroud)

现在rm origin运行obsf如下:

$ sh obsf | base64 -d | sh
fooo
Run Code Online (Sandbox Code Playgroud)

嘿:3

  • 我不明白这应该是什么."基础64加密"脚本是愚蠢的.我只是想摆脱原始脚本中的评论和其他有用的东西. (2认同)

Vse*_*aga 10

这是我为bash脚本缩小创建的工具:https://github.com/precious/bash_minifier - 它尝试删除所有注释和尽可能多的空格/制表符/换行符.它也可以在这里作为服务https://bash-minifier.appspot.com/.

要缩小bash脚本,请运行以下命令:

python minifier.py /path/to/shell/script.sh
Run Code Online (Sandbox Code Playgroud)

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。- [来自评论](/review/low-quality-posts/16128568) (2认同)

Dan*_*ray 7

即使这是一个老问题,它似乎在谷歌上很受欢迎.我也在寻找一个bash minifer/obfuscator,并且不喜欢答案中的那个.

我也不想添加乱码或编译脚本.所以我写了一个在Perl中做了我想要的东西,然后把它放在GitHub上,网址是https://github.com/Aralhach/bashobfus/tree/master
它可以:

  • 压扁缩进
  • 删除全行注释(初始hashbang(#!)除外)和空行
  • 重命名基本声明中的所有小写变量(以避免重命名像PATH这样的变量),for循环,数组访问和'read'语句.

可能会出现一些失败的情况,但我使用相当大的bash脚本对其进行了测试,并列出了列出的变量替换案例.它还将变量留在单引号(')中 - 这在打印AWK脚本时弹出 - 但当语句已在双引号(")内时替换单引号(') - 这在打印时弹出MySQL声明.

这让我觉得我已经涵盖了所有大用途,但我以前错了.如果您发现任何错误,请随时报告(或修复它们!:D).我还在考虑添加一个功能,将短线连接成一个带有";"的线路.但在截止日期前,案件分析太多了.

我希望人们觉得它很有用!

  • 做得好!我很快就会尝试一下。到目前为止的一条评论:它看起来不支持heredocs。您可以在 bash <<<EOF 中编写,然后放入一些文本,直到出现 EOF 行。我认为你不能在那里处理数据。请参阅http://en.wikipedia.org/wiki/Here_document#Here_strings (2认同)

Edu*_*omo 5

原始文件script.sh

#!/usr/bin/env bash
echo "foo"
Run Code Online (Sandbox Code Playgroud)

创建 other.sh

$ echo '#!/usr/bin/env bash' > other.sh
$ echo "echo '$(base64 script.sh)' | base64 -d | sh" >> other.sh
$ chmod +x other.sh
Run Code Online (Sandbox Code Playgroud)

结果(cat other.sh):

#!/usr/bin/env bash
echo 'IyEvdXNyL2Jpbi9lbnYgYmFzaAplY2hvICJmb28iCg==' | base64 -d | sh
Run Code Online (Sandbox Code Playgroud)

尝试:

$ ./other.sh
foo
Run Code Online (Sandbox Code Playgroud)

  • 简单明了,工作完美。感谢分享 (2认同)