增强对我的Python源代码的保护

2022-05-30 00:00:00 python encryption obfuscation

问题描述

免责声明:我对密码学一无所知,也可以这么说 我的编程技能也是^^

在研究了如何在类似的主题和其他站点上保护我的Python源代码后,大多数人都同意我应该使用Cython将.py文件转换为.pyd,但问题在于我愿意出售代码的空间(外汇交易算法),许多人靠反编译源代码为生。

我想过将pyd文件混淆为额外的安全层,但我不太确定如何做到这一点,我仍然不知道混淆是否有助于使pyd代码或assembly版本更难阅读,或者两者兼而有之!!

我知道任何东西都可以被破解,我只是想找到一个解决方案,让黑客的事情变得更困难,不再值得他们花时间!


解决方案

以下是使用几个简单操作和exec函数进行代码混淆的示例。代码的混淆部分是fib函数。看看你能否确定它是什么。

from base64 import b64decode

code1 = b'CbaKdTwxFl317Zq13s3agdfQZWHwXZ7JV7vVvwiwhhJNEIgbaV1HoDR54/KoeVW1UArBeEVEhWfB1iDMDrzSz6NI6oIpxDs3A4/Ai9QQxUo0g2ri26Bd9zpunDy1ZUsUOPJgz1nWMB7KMMQ7AilCSZu0Vqugu1wouuPgisoznaoNmKvaYgrPXSVPE4BNfH9af5bmva/hjS5FPJwwfkCpX4CCzg2m6H9VzbX4nnSjy8hqNYoPmiRniV5i6yLqSFJ0+shXEQ=='
code2 = b'A9LvExxXfz/dg7OP1O36ofe/CQWVL7LpONexnzWQtz5tIII7SX1nyVJZ09KURHXbcDb8WHR+j0fh9gDsLpzyvcY8n/BH5BNYb+ul+fgwqiZQqjGMhqpX1xpOvFraF2tLGJsO7yu3XnmvGPQXIkdiZLuGf5Gqm3wImsPAqupQ6Nh//cWuQjfvMkkrM6ttExM+GuTsnY/BrQ5lHLxfEiTMLayioWHCyEJ1otmcslTAvroYUOR7kARHqX4QjlafOjxUlaQzGw=='

exec(bytes(x ^ y for x, y in zip(b64decode(code1), b64decode(code2))).decode('utf-8'))
print(fib(200))
现在,您可以采用这个简单的示例,并使其变得越来越复杂,添加加密层等。但底线是,只要攻击者有足够的动机,对其进行反向工程并恢复源代码并不是那么困难。

另一方面,这会使代码更难维护和调试。因此,有可能让攻击者做一些工作来恢复您的源代码,但您可能会认为这不值得。

编辑:一些评论认为这是一个糟糕的例子,因为它是一个捏造的软弱的稻草人,不知何故让"真正的"商业混淆者看起来不好。这并不是我的本意,但在我的经验中,戴着黑帽的商业模糊效果并不会增加太多。一如既往,这取决于您的威胁模型。如果您担心有人实际上在为您的代码进行反向工程而获得报酬,出于以下原因,商业混淆程序的价值微乎其微:

  1. 我可以自己买模糊处理程序,并弄清楚它所做的转换。这让我比一些剧本小子有了很大的优势。

  2. 大部分仍是一次性工作。当软件经过修改时,它通常变化很小。我从最初的辛勤工作中获得的反向工程源代码将使我能够从下一次修订中快速恢复更改。换句话说,我可以将我最初的努力摊销到许多后续版本上。我也可以同样轻松地返回到以前的版本。

  3. 因为我可以在我正在执行的代码中执行一次exec,所以将这个简单的示例扩展到任意级别的嵌套是很简单的。您可以免费获得从昂贵的商业模糊处理程序中获得的基本好处。

  4. 商业混淆器仍然有我上面提到的所有缺点。您的代码会有错误,您需要从用户那里收到关于这些错误的反馈,但现在您必须对您收到的错误信息进行去模糊处理。是的,商业产品在这里会有工具来帮助你,但即便如此,这也只是一个麻烦。如果您确实支付了模糊处理产品的费用,请确保您直接购买了反模糊处理工具的终身许可证。

    /li>

如果您的目标是让诚实的人保持诚实,那么您不需要商业混淆工具。如果您的目标是用有限的预算阻止决心坚定的黑客对您的代码进行反向工程,那么商业产品将无法阻止他们。这两者之间可能有一个中间地带,商业是可行的,但我还没有发现是这样的。

相关文章