这个问题与另一个有关 。我只是想知道哪些技术适用,哪些技术可以在现实世界中找到来混淆 Python 程序(类似的问题可以在这里和这里的stackoverflow 上找到)。
mikeazo 提到他的程序提供了一个自定义的 Python 解释器,但其他技术是什么?它们的效率如何?
这个问题与另一个有关 。我只是想知道哪些技术适用,哪些技术可以在现实世界中找到来混淆 Python 程序(类似的问题可以在这里和这里的stackoverflow 上找到)。
mikeazo 提到他的程序提供了一个自定义的 Python 解释器,但其他技术是什么?它们的效率如何?
以下是使用自定义解释器打包 Python 应用程序时可以使用的技巧。
dis
有助于逆向工程的模块(基本上对未混淆的 Python 程序进行逆向工程,注意您认为有用的所有模块/技术并将它们从自定义解释器中删除)PyRunString()
. 否则,他们可以附加调试器并运行任意 Python 代码。我不知道任何特定的 Python 混淆工具(可能是因为想要编写混淆代码的那种人不会用 Python 来做,除了娱乐/教育)。
但是,如果我确实需要混淆 Python 代码,我可能会使用您用于任何语言程序的相同技术。缺少工具意味着您需要编写自己的混淆器,但这并不难。
基本上,想想你会做什么来对程序进行逆向工程并将其转换为更难。
让你的不变量变得复杂。将程序不变量转换为诸如`(x ** y) % p == 457' 或“这个数据结构代表一个弦图”之类的东西。这种不变量极不可能被静态或动态分析工具猜到,人类需要很长时间才能弄清楚。
将不同方法的逻辑混合在一起。采取每一个好的设计实践并做相反的事情。将方法的一部分随机内联到其他方法中,然后重新排列代码。复制 CFG 的部分并在两个版本的对应点之间随机插入跳转,然后对它们进行变异,使它们不会明显重复。
添加打包机。如果您只在实际需要执行代码时解密部分代码,并且使结果取决于程序状态,因此很难提前确定密钥,那么奖励指针。尽量确保原始程序永远不会立即出现在内存中。
混淆的主要挑战是它需要理解程序并且通常会损害性能。更极端的混淆仅适用于性能无关紧要且经受严密审查很重要的情况(即恶意软件)。
这个免费工具将混淆多模块 Python 源代码,同时保留从 3rd 方库导入的标识符。其他标识符也可以免于混淆。我在一个多年的项目中为自己使用它,但决定其他人也可以从中受益。