如何加密或使外壳脚本不可读?


9

我该如何加密或加扰我的shell脚本,以使肉眼看不到它?两种方法均可接受,请提供具体步骤。


我认为shc有一些缺点:我在github(obash)上有一个正在进行的项目,试图解决这些问题。您可能想看看它是否更适合于shc。
louigi600

Answers:


11

SHC

您可以尝试在该网站上标题为“ 如何使用SHC在Linux上加密Bash Shell脚本 ”中概述的步骤。本文讨论了称为SHC-Shell脚本编译器的工具的使用。

URL资源

这是一个必须使用gcc / g ++构建的可执行文件。

用法

$ ./shc -f random.sh

一旦运行它,您的shell脚本random.sh将被转换成以下文件:

-rwx-wx--x. 1 ramesh ramesh 11752 Mar 27 01:12 random.sh.x

这是万无一失的吗?

没有对SHC工具使用的方法进行很好的分析,该方法表明它并不太强大,如果您知道自己在做什么,就可以绕开它。该文章发布在linuxjournal.com网站上,标题为:偏执狂企鹅 -Shell 加密实用程序shc的局限性

注意:这些类的工具可能更好地描述为混淆器。


@sim谢谢。有什么办法可以解密该脚本?
2013年

@Ram-是的,这绝对不是万无一失的。你想藏什么 用户/密码信息还是脚本的工作方式?
slm

@sim我试图隐藏脚本的工作方式?
拉姆2013年

@Ram-好的,那可能还可以,我不建议您尝试隐藏密码。当我尝试使用此应用程序时,计算机上的行为有点奇怪。我会尝试一下,但是生成的可执行文件好像在后台启动一样,我必须执行命令fg将其带到前台,然后才能正常工作。我还在寻找替代品。
slm

9
尽管名称如此,SHC并不会以任何有意义的方式对脚本进行加密。加密意味着它在使用前已被解密。如果脚本可以执行,则必须先对其进行解密,然后才能将其提取。转换程序以使其在不更改其行为的情况下变得更难理解,这称为混淆。这是非常非常非常不值得的,对于shell脚本,这是对其用途的高估。
吉尔(Gilles)“所以,别再邪恶了”

29

如果要加密Shell脚本,请使用GPG。谁想要运行您的脚本,当然都必须先对其解密。

如果您希望某人能够运行该脚本但不读取该脚本,则这是一个完全不同的问题,与加密无关。这称为混淆

如果您在该脚本中有密码或其他机密信息,则不会产生任何混淆。脚本迟早会使用密码来执行某项操作,届时,所有想要查找密码的人都会清楚看到密码。

如果您因为害怕别人会复制脚本而想隐藏脚本的工作方式,那就别管它了。没人在乎。

如果您因为对脚本的质量感到羞耻而想要隐藏脚本,请对其进行修复。

如果您想隐藏脚本的工作原理以隐藏脚本的工作原理,则该脚本是不可行的。有人可以在您的脚本执行时查看它,并观察它在做什么。

如果您已经读了那么多书,但仍然想“加密”脚本,那么您会误解一些主要问题。不要将脚本发送给任何人,也不要以纯文本格式发送。


4
为“没人关心” +1。除了有些需要注意之外-我会看一个混淆的shell脚本,并认为“我绝对不可能在我的系统上运行它”。
cas 2013年

1
抱歉,人们确实在乎,这很重要。您有一个透视图,并且存在另一个透视图。两者都会吸引。同时,下面的答案对我来说很有效。在大多数情况下,我们希望保护免受偶然的黑客/用户攻击。很好地理解,坚定的黑客会破坏一切。
尼尔

@anil您只是在防范那些不聪明或没有能力对源代码执行任何操作的人员。它可能会使您感觉更好,但并不能使您更安全。
吉尔斯(Gilles)'所以

@吉尔斯也许我读错了你。我实际上是在试图防止有能力对源代码做点什么的人(源代码=脚本的内容)。只有这些人可能不知道如何破解加密文件,而不会费心费力找出方法。反对真正坚决的_我同意,没有真正好的防御措施。
尼尔

11

搜索互联网时得到了此信息,由Claudio P.提供。

  1. 编写脚本(script-base.sh)

    #!/bin/sh 
    echo "Hello World" 
  2. 加密脚本(输入密码):

    openssl enc -e -aes-256-cbc -a -in script-base.sh > script-enc 
  3. 写de Wrapper(script-final.sh):

    #!/bin/sh 
    openssl enc -d -aes-256-cbc -a -in script-enc | sh - 
  4. 运行“ script-final.sh”,输入密码,该脚本将运行,而无需在磁盘上写入纯文本脚本。


1

基本上,您可以混淆但不能编译脚本。原因很简单,因为shell脚本是解释为单个命令,需要由系统一一执行,并且您可以看到这些命令由系统一一执行sh -x并带有标志(也许还有-v旗)

对于大多数程序员而言,这足以理解正在发生的事情。

您可以模糊变量和一般流程,如果你想要的话,但你不能混淆你的程序执行的命令indvidual -这对于shell脚本通常是所有这些的。

最简单的解决方案可能是以C之类的编译语言重写Shell脚本。


1
如果确定足够,甚至可以编译和逆向工程二进制文件。
约瑟夫R.13年

3
所有可执行文件都可以进行逆向工程。这里的要求是它应该是不可读肉眼
托尔比约恩Ravn的安德森

我知道。我只是给以后的读者留下笔记。
Joseph R.

-2

如果您希望对公众隐藏脚本,请尝试将其提交到此站点

尽管许多人可能不同意对以解释语言编写的脚本的源代码进行加密或混淆的想法,但我理解人们为什么要这样做。

作为一个多次被盗的人,我根本不在乎“混淆”或“加密”是否是一种忌讳。只要我的脚本受到保护并且可以像加密之前一样工作,我就很满意。我再也不会允许别人接受我的想法并付诸实践。不,用编译语言编写脚本是没有选择的。我不知道怎么去。

无论如何,如果您不想使用上述站点,请尝试使用最新版本的shc。我相信他们已经在github中对其进行了更新,以解决其他人提到的许多安全问题。在google“ shc github ”中输入以下内容,您会看到许多可用的选项,可以尝试一下。

祝好运!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.