擅长:python、mysql、java
<p>需要联机服务来验证和解密要运行的代码。你知道吗</p>
<p>这几乎是最琐碎的python/操作系统知识无法绕过的唯一方法。这也是在windows上工作的唯一方法,windows对打开的文件有一个锁,这会阻止脚本删除它自己。你知道吗</p>
<p>以下是如何实现这一目标的粗略指南:</p>
<ul>
<li>编写程序。<strong>不要分发。</strong></li>
<li>编写Web服务器。
<ul>
<li>这个web服务器将接收一个带有序列号的POST(例如)。你知道吗</li>
<li>然后它会在数据库的某个部分中查找该序列号,并记录该序列号的使用时间。你知道吗</li>
<li>如果序列号没有被使用太多次-返回一个解密密钥。你知道吗</li>
</ul></li>
<li>编写你分发的程序。
<ul>
<li>这将包含一个填充程序,用一个特定的序列号来命中Web服务器。你知道吗</li>
<li>然后它将使用从web服务器返回的键来<a href="https://stackoverflow.com/questions/2490334/simple-way-to-encode-a-string-according-to-a-password">decrypt your code</a>,然后是<a href="https://stackoverflow.com/questions/701802/how-do-i-execute-a-string-containing-python-code-in-python">run it</a>。你知道吗</li>
</ul></li>
</ul>
<p>虽然这种方法可行,但仍有缺点</p>
<ul>
<li>它要求您为每个想要运行它的人创建一个新的发行版。你知道吗</li>
<li>它对工作的网络连接和活动的服务器有很强的依赖性。你知道吗</li>
<li>如果您没有使用安全连接,则可能会嗅出密钥。你知道吗</li>
<li>每次<em>解密</em>都会被记录,而不是每次成功执行。根据程序的性质,这可能是一个缺点,因为运行程序的失败尝试仍将计入其使用限制。你知道吗</li>
<li>最大的问题是:如果用户在序列号过期之前编辑了你的shim,只需打印序列号,他们就可以跳过你的shim,直接提供密钥。你知道吗</li>
</ul>
<p>基本上-你不能在python中成功地做到这一点。然而,做了以上这些,你就增加了人们意识到他们已经被你的程序拒之门外,直到为时已晚的机会。一旦网络服务器停止分发密钥-就这样。你知道吗</p>