在受控 Linux 服务器上保持 Python 代码私有
Keeping Python Code Private On Controlled Linux Server
我想看看我是否可以在以下情况下保护我的 python 源代码:
- 我正在管理一台 linux 服务器,我是唯一拥有 root 权限的服务器
- 我的用户在此服务器上已分离用户帐户
- 我想找到一种方法在此服务器上安装私有纯 python 模块,以便我的用户可以导入该模块,他们无法访问代码
有没有办法做这样的事情?
查看此页面:
https://www.packagr.app/?ref=Medium
私人套餐功能每月收费10美元。如果你能付钱,继续这个安装过程,link如下:
https://medium.com/packagr/creating-and-sharing-private-python-packages-151a95e10735
如果您无法支付要求的价格,还有其他方法可以实现包裹的完全隐私。您可以使用 .pyc 扩展名。当您在本地导入模块时,这种类型的文件由 python 自动创建。该文件的内容是原始模块,但采用字节格式。问题是您不能通过简单地在一行中导入来执行或 'import' 这种文件。要执行此类文件,您需要执行此操作。
有你的原始模块源代码,例如:
def abc():
countries = ["United States", "Poland", "Russia", "Portugal", "France", "Germany"]
for country in countries:
print(country)
if __name__ == "__main__":
print("countries")
然后你把文件编译成.pyc。这可以使用模块 "py_compile":
来完成
py_compile.compile('test.py', 'mypyc.pyc')
那么你应该只向服务器提供这个文件。为了使用它,服务器中的每个用户都需要将这些行添加到他们的文件中:
import marshal
s = open('mypyc.pyc', 'rb')
s.seek(8) # go past first eight bytes
code_obj = marshal.load(s)
然后,执行code_obj:
exec(code_obj)
终于可以使用模块的功能了。在这个例子中:
abc()
不过暂时可以通过模块看到的内容:
print(code_obj)
这让这东西没用了。您可以做的是使用以下命令限制控制台输出:
sudo dmesg -n 1
如果这样做,您将限制控制台的每一个输出。因此,您可以强制用户将程序的输出重定向到一个新文件,然后通过 vim 读取该文件。但是,另一个问题出现了,他们可以通过这样做将模块的源代码写入一个新文件:
with open('readme.txt', 'w') as f:
f.write(code_obj)
然后,您应该创建一个 bash 文件,该文件始终 运行 以限制创建开头包含一组特定八个字符的文件。然后,将这个八字节组合添加到模块的开头。这样,您就可以防止用户复制该模块。可能还有更多选项可用,但我认为这可以解决您的问题。
听起来你想要一个代码混淆工具,如果没有一些非常专门的逆向工程,通过重命名变量、函数、模块等,用乱码替换它们的名称,就可以使代码不可读。
如果一台计算机可以执行代码,那么拥有该计算机管理员权限的人也可以读取编译后的代码,无一例外。如果你不想让别人窃取你的逻辑,你就会混淆。如果你不希望人们盗版你的软件(免费使用它),你可以添加一些软件保护(研究其他订阅软件是如何保护的)并混淆它们,所以很难绕过限制并且明显违反知识产权法。
或者(如果合适,通常是这样),您可能希望 运行 您自己的服务器上的代码并发布一个 API 供您的客户使用。为了方便起见,您还可以开发 public API 的抽象供客户使用。这根本不会让客户访问代码;客户端间接要求服务器做某事,如果一切正常(例如,客户端有一个有效的订阅),服务器就会执行。
我想看看我是否可以在以下情况下保护我的 python 源代码:
- 我正在管理一台 linux 服务器,我是唯一拥有 root 权限的服务器
- 我的用户在此服务器上已分离用户帐户
- 我想找到一种方法在此服务器上安装私有纯 python 模块,以便我的用户可以导入该模块,他们无法访问代码
有没有办法做这样的事情?
查看此页面: https://www.packagr.app/?ref=Medium
私人套餐功能每月收费10美元。如果你能付钱,继续这个安装过程,link如下:
https://medium.com/packagr/creating-and-sharing-private-python-packages-151a95e10735
如果您无法支付要求的价格,还有其他方法可以实现包裹的完全隐私。您可以使用 .pyc 扩展名。当您在本地导入模块时,这种类型的文件由 python 自动创建。该文件的内容是原始模块,但采用字节格式。问题是您不能通过简单地在一行中导入来执行或 'import' 这种文件。要执行此类文件,您需要执行此操作。
有你的原始模块源代码,例如:
def abc(): countries = ["United States", "Poland", "Russia", "Portugal", "France", "Germany"] for country in countries: print(country) if __name__ == "__main__": print("countries")
然后你把文件编译成.pyc。这可以使用模块 "py_compile":
来完成py_compile.compile('test.py', 'mypyc.pyc')
那么你应该只向服务器提供这个文件。为了使用它,服务器中的每个用户都需要将这些行添加到他们的文件中:
import marshal s = open('mypyc.pyc', 'rb') s.seek(8) # go past first eight bytes code_obj = marshal.load(s)
然后,执行code_obj:
exec(code_obj)
终于可以使用模块的功能了。在这个例子中:
abc()
不过暂时可以通过模块看到的内容:
print(code_obj)
这让这东西没用了。您可以做的是使用以下命令限制控制台输出:
sudo dmesg -n 1
如果这样做,您将限制控制台的每一个输出。因此,您可以强制用户将程序的输出重定向到一个新文件,然后通过 vim 读取该文件。但是,另一个问题出现了,他们可以通过这样做将模块的源代码写入一个新文件:
with open('readme.txt', 'w') as f:
f.write(code_obj)
然后,您应该创建一个 bash 文件,该文件始终 运行 以限制创建开头包含一组特定八个字符的文件。然后,将这个八字节组合添加到模块的开头。这样,您就可以防止用户复制该模块。可能还有更多选项可用,但我认为这可以解决您的问题。
听起来你想要一个代码混淆工具,如果没有一些非常专门的逆向工程,通过重命名变量、函数、模块等,用乱码替换它们的名称,就可以使代码不可读。
如果一台计算机可以执行代码,那么拥有该计算机管理员权限的人也可以读取编译后的代码,无一例外。如果你不想让别人窃取你的逻辑,你就会混淆。如果你不希望人们盗版你的软件(免费使用它),你可以添加一些软件保护(研究其他订阅软件是如何保护的)并混淆它们,所以很难绕过限制并且明显违反知识产权法。
或者(如果合适,通常是这样),您可能希望 运行 您自己的服务器上的代码并发布一个 API 供您的客户使用。为了方便起见,您还可以开发 public API 的抽象供客户使用。这根本不会让客户访问代码;客户端间接要求服务器做某事,如果一切正常(例如,客户端有一个有效的订阅),服务器就会执行。