我想要做的是保护Python程序不被没有计算机知识的人窃取。我接受程序被盗版的必然性,我想做的就是保护它免受普通用户的侵害。
我提出了两个想法。 1.)通过在线检查日期和时间来设置时间限制。 I.E.下载时间10天。 2.)检查下载它的计算机的IP或名称,并使程序仅在该计算机上运行。 (以防止朋友简单地共享文件)。
这两个问题是我需要“动态”创建一个.py文件,然后使用像pytoexe这样的东西将它变成.exe,这样用户就不需要Python了安装。
第二个问题是我理解ip的变化并获取计算机名称存在安全风险,可能会吓跑用户。
总结一下,这是我的两个问题: 1.)在python中有一个好方法只允许程序在那台计算机上运行吗? 2.)实现exe的“动态”创建的最佳方法是什么? (我打算在我的电脑上托管网站并学习php(?)/ servers。
我有中等程度的c / c ++和基本的html / css,java和python经验。
感谢您的时间!
答案 0 :(得分:4)
但是,如果你是老板认为c编译满意,你可以使用cython将你的python代码编译为c代码,然后使用gcc编译c代码。
点击此处查看如何构建setup.py脚本。
http://docs.cython.org/src/reference/compilation.html#compiling-with-distutils
您可以使用--embed
选项将python嵌入到生成的c代码中:
# will generate the target.c
$ cython target.py --embed
答案 1 :(得分:1)
为每个用户提供一个具有唯一键的自定义安装程序。当它运行时,它会联系服务器(使用密钥)并请求实际程序。在服务器端,检查密钥是否有效,如果是,请提供使用密钥自定义的程序,并将密钥标记为已使用。安装程序将程序保存在用户可以访问的某个位置,并创建一个隐藏文件,其中包含计算机内部某处的密钥,“普通用户”不会想到它。程序运行时,它首先要做的是检查隐藏文件是否存在以及它是否包含正确的密钥,如果没有则拒绝运行。
(我假设解压缩可执行文件并阅读源代码超出了“普通用户”的能力(读取:“grandma”),所以使用py2exe就可以了。)
答案 2 :(得分:0)
为避免与互联网上的任何内容联系,您可以使用以下方式“加密”您的程序:
exec
调用解密的字符串。重要部分为print "hello world"
的示例:
def getMyMac():
return 123456789L # for testing now
return uuid.getnode() # this would be the real thing
def strxor(s, key):
key *= len(s) / len(key) + 1
return ''.join(chr(ord(key[i]) ^ ord(s[i])) for i in range(len(s)))
def performVitalCode():
code = 'A@ZZA\x16\x15P\\]^\\\x14BYET]\x13'
# I found that code by entering:
# strxor('print "hello world"', str(getMyMac()))
realCode = strxor(code, str(getMyMac()))
exec realCode
getMyMac()
或所以这不是解决问题的“安全”方法。
但是,如果一个只有很少计算机知识的人将你的代码提供给其他人而没有任何进一步的信息(可能是通过将其放在论坛或类似网站上),接收者将无法开箱即用
最后,我需要指出的是,每个代码链接到特定计算机都可能成为代码合法用户的麻烦。如果我使用的程序因为切换到不同的硬件而停止工作(可能只是因为我得到了一台新的笔记本电脑),我通常会生气并诅咒该代码的作者。您可能不想惹恼您的客户。
答案 3 :(得分:0)
这似乎是一件事情的组合。像其他人所建议的那样封装python是捆绑的好方法。您也可以考虑混淆,正如另一个StackOverflow线程中所述:
参考文献:
http://freecode.com/projects/pyobfuscate
至于制作它以便有人不能只是下载你的程序并在其他地方运行或分发它,你是否愿意给最终用户带来不便? :)
正如其他人已经提到的那样,您可以使用特定于用户的ID生成编译和捆绑的代码。这样,如果/当应用程序打电话回家时,您可以跟踪使用情况。
如果您的最终用户/客户满足以下要求:
您可以使安装过程执行以下操作:
如果他们决定在VM捆绑包中共享该程序,他们仍然需要一个活动帐户来获取密钥。
注意,这并不妨碍某人绕过哈希检查。但对于普通用户来说,这将成为阻止人们放弃或转售您的计划的好方法。
请记住,没有一个系统是万无一失的。