【问题标题】:Protect/encrypt R package code for distribution [closed]保护/加密 R 包代码以进行分发 [关闭]
【发布时间】:2018-08-08 03:34:25
【问题描述】:

我正在用 R 编写一个包,并希望保护/加密代码。基本上,在查看我的包代码时,它应该是加密的并且不可读。我已经读到有人加密了他的代码(1),但是我没有找到更多关于它的信息。我知道我可以用 C/C++ 编写代码并编译它,但是我想让它在 R 中并在那里“protect”它。

我的问题是:这可能吗,这怎么可能?

感谢您的回答!

参考:

(1)link

【问题讨论】:

  • 如果您需要保护代码,请通过合法方式进行。混淆对所有人来说都是浪费时间。

标签: r obfuscation


【解决方案1】:

您是否尝试关注该主题?

https://stat.ethz.ch/pipermail/r-help/2011-July/282717.html

在某些时候,R 代码必须由 R 解释器处理。如果你给某人加密代码,你必须给他们解密密钥,这样 R 才能运行它。也许你可以把钥匙藏在某个地方,希望他们找不到。但他们必须有权访问它才能以某种方式生成纯文本 R 代码。

这适用于您在计算机上运行或查看的所有程序或文件。加密的 PDF 文件?不,它们只是混淆,一旦你找到解密密钥,你就可以解密它们。即使是用 C 或 C++ 编写的以二进制形式分发的代码,也可以通过足够的时间、工具和足够聪明的黑客进行逆向工程。

您希望它受到保护,将其保存在您的服务器上,并且只允许通过网络 API 进行访问。

【讨论】:

  • 感谢您的回答!你知道可能有任何 PoC 实现吗?非常感谢您的回答!
  • PoC 我的意思是Proof of Concept
  • 不,我只有概念。编写一个包含加密 zip 代码文件的包,然后在加载包时解密 zip(密码在 .First.lib 中)并加载其中的代码。你能看到裂开的缺陷吗?
  • 是的,但是,您的主要假设是attacker 拥有无限资源。这引发的问题可能是每个安全系统的问题,没有什么是真正安全的!
【解决方案2】:

我最近不得不做类似的事情,这并不容易。但我设法完成了。混淆和/或加密脚本是可能的。问题是,你有时间投入吗?您需要确保您使用的任何“混淆/加密”方法都非常难以破解且非常耗时,并且不会减慢脚本的执行时间。

如果您希望快速加密 Rscript 代码,您可以使用 this site

我使用上述站点测试了以下 rcode,它产生了一个非常令人生畏的输出,但不知何故奏效了:

#!/usr/bin/env Rscript
for (i in 1:100){
    if (i%%3==0) if (i%%5==0) print("fizzbuzz") else print("fizz") else
    if (i%%5==0) print("buzz") else
    print(i)
}

如果您确实有一些时间,并且希望自己加密脚本,使用您自己的即兴方法,您将需要使用 openssl 命令。为什么?因为它似乎是大多数(如果不是所有)Unix 系统都可用的一种加密工具。我已经验证它存在于 Linux(ubuntu、centos、redhat、mac)和 AIX 上。

使用 Openssl 加密文件或脚本的最简单方法是:

1. cat <your-script> | openssl aes-128-cbc -a -salt -k "specify-a-password" > yourscript.enc

OR

2. openssl aes-128-cbc -a -salt -in <path-to-your-script> -k "yourpassword"

使用 Openssl 解密脚本(注意“-d”):

1. cat yourscript.enc | openssl aes-128-cbc -a -d -salt -k "specify-a-password" > yourscript.dec

OR

2. openssl aes-128-cbc -a -d -salt -in <path-to-your-script> -k "yourpassword" > yourscript.dec

这里的技巧是自动提供密码,这样您的用户就无需在每次想要运行脚本时都指定密码。或者这就是你想要的?

【讨论】:

  • 感谢您的信息。很遗憾,本网站不提供免费试用。
猜你喜欢
  • 2022-06-10
  • 2012-07-20
  • 2017-10-10
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 2021-09-27
相关资源
最近更新 更多