【问题标题】:Compile shell script to make it totally unreadable编译 shell 脚本使其完全不可读
【发布时间】:2015-12-02 18:08:14
【问题描述】:

我需要编译我的 shell 脚本,因为我想保护它的源代码。我已经读过shc,但我也读到它并不完全安全,因为只要有少量知识(或大脑和谷歌),任何用户都可以“反编译”它。有没有办法编译我的脚本以使其可执行,但完全不可读且“无法编译”?

【问题讨论】:

  • 没有。想一想,bash 必须能够阅读到足以理解并运行它,如果 bash 可以做到,那么人类也可以(可能使用 bash 内置的调试工具)。您可以做一些事情来混淆代码,但最多只会减慢某人的速度。
  • 因为只要有少量知识(或大脑和谷歌),任何用户都可以*'反编译'*它。少量知识...用于理解反编译的 C代码?
  • 我们可以永远争论小/中/大量知识的含义,但事实是,反汇编/反编译代码并弄清楚它在做什么并不难。任何人都应该依靠其难度来保护 IP 或任何海报试图保护的东西,这当然不是那么难。
  • 您可以简单地使用 Perl。它在设计上是不可读的。
  • 在解决这个问题之前,您应该运行strace 以查看通过调用外部程序不可避免地会泄漏多少信息。大多数 shell 脚本是 99.99% 的外部程序和 0.01% 的实际 sh。

标签: bash shell unix debian


【解决方案1】:

你只能让它更难被人类阅读。脚本是纯文本文件,它们必须能够被脚本解释器读取。

【讨论】:

    【解决方案2】:

    我制作了自己的 bash 混淆器 (obash),其中提取脚本所需的密钥不存储在脚本中(但这使得脚本不可分发)。有一个选项可以生成静态可重用二进制文件,但只能在具有多个兼容性级别(内核系统调用接口、glibc、基本二进制兼容性)的系统上执行。 制作可重新分发的二进制文件还意味着在生成的二进制文件中存储一个密钥,但存储的密钥需要在使用前进行操作。 您可能想尝试看看 obash 是否比 shc 为您提供更好的服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      相关资源
      最近更新 更多