保护/加密R包代码以进行分发

Ann*_*lee 10 obfuscation r

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

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

我感谢你的回答!

参考:

(1)链接

Spa*_*man 18

你尝试过那个帖子吗?

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

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

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

你想让它保护的,你把它放在你的服务器上,并只允许通过网络API访问.

  • 是的,但是,您的主要假设是“攻击者”拥有无限的资源。这引起的问题可能是每个安全系统的问题,没有什么是真正安全的! (2认同)

Roy*_*ell 5

我最近不得不做类似的事情,这并不容易。但是我设法做到了。可以对脚本进行混淆和/或加密。问题是,您是否有时间专门研究它?您需要确保使用哪种“混淆/加密”方法破解起来都非常困难且耗时,并且不会减慢脚本的执行时间。

如果您希望快速加密Rscript代码,可以使用此站点进行加密。

我使用上述站点测试了以下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)
}
Run Code Online (Sandbox Code Playgroud)

如果您确实有时间,并且希望使用自己的简易方法自己加密脚本,则可以使用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"
Run Code Online (Sandbox Code Playgroud)

要使用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
Run Code Online (Sandbox Code Playgroud)

这里的窍门是自动提供密码,这样您的用户不必在每次运行脚本时都指定密码。也许那就是您想要的?