Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 逆向工程自动生成C?_Python_C_Reverse Engineering_Cython - Fatal编程技术网

Python 逆向工程自动生成C?

Python 逆向工程自动生成C?,python,c,reverse-engineering,cython,Python,C,Reverse Engineering,Cython,对自动生成的C代码进行反向工程有多容易?我正在从事一个Python项目,作为我工作的一部分,我正在使用Cython编译代码以提高速度 这确实有助于提高速度,但我担心,在我工作的地方,有些人会试图“窥视”代码,并找出它的作用 Cython代码基本上是一个自动生成的C语言。对它进行反向工程很难吗 是否有任何建议可以使代码更安全,使逆向工程更难实现?(我假设只要付出足够的努力,一切都可以进行逆向工程)。好吧——试着更直接地回答你的问题:大多数自动生成的C代码都相当难看,所以需要有人有足够的动力进行逆向

对自动生成的C代码进行反向工程有多容易?我正在从事一个Python项目,作为我工作的一部分,我正在使用Cython编译代码以提高速度


这确实有助于提高速度,但我担心,在我工作的地方,有些人会试图“窥视”代码,并找出它的作用

Cython代码基本上是一个自动生成的C语言。对它进行反向工程很难吗

是否有任何建议可以使代码更安全,使逆向工程更难实现?(我假设只要付出足够的努力,一切都可以进行逆向工程)。

好吧——试着更直接地回答你的问题:大多数自动生成的C代码都相当难看,所以需要有人有足够的动力进行逆向工程。同时,我不相信我从来没有看过Cython产生了什么,所以我不确定它看起来怎么样

此外,许多自动生成的代码都是以状态机表的形式完成的,大多数程序员觉得即使最好也很难遵循这种形式。趋势(在许多情况下)是有一个通用框架,框架在运行时或多或少地“解释”数据表。这并不一定是不可能遵循的,但它与大多数典型的代码有足够的不同,大多数人会很快放弃它(如果他们做得太多,他们通常会浪费大量时间查看框架而不是数据,这在这种情况下才是真正重要的)

不过,我要重复一次,我很确定我还没有看过Cython生产的产品,所以我不能肯定地说太多

有(或至少曾经有过)商业混淆器旨在使C源代码难以理解。我怀疑Perl的可用性已经从他们那里抢走了很多市场份额,但是如果你仔细看看,你可能仍然能够找到并使用它


如果没有这一点,编写一个自己的模糊处理程序并不是非常困难,但是有效性的程度可能会随着您愿意投入的精力而有所不同。只需系统地将任何有意义的变量名重命名为
\uu
\u
就可以做很多事情(例如,
利润=销售-成本;
更有意义。然而,根据所讨论的机器生成的代码,这可能不会真正完成很多工作——混淆通用框架可能不会对理解代码的功能产生太大影响——如果他们理解了您所遵循的过程,他们可以简单地复制正确的框架代码,并将特定于您的程序的部分移植到未混淆的框架中。

您应该仔细看看Cython生成的代码。例如,为了帮助调试,它将完整的Python源代码复制到生成的文件中,在为其生成C代码之前标记每个源代码行。这使得您很容易找到感兴趣的代码部分

一个非常好的特性是,您可以使用“-A”(annotate)选项编译代码,它将在包含带注释的Python代码的C文件旁边吐出一个HTML文件。当您单击一行时,您将看到该行的C代码。作为奖励,它用深黄色标记进行大量Python处理的行,这样您就可以得到一个简单的指示器,在哪里寻找潜在的优化


Cython现在还提供了特殊的gdb支持,因此您可以进行Cython源代码级调试等。

啊,我想我错过了您刚才提到的编译模块,而我只是指Cython生成的源代码。我同意Jerry的观点,只要您禁用gdb支持(默认设置)并去掉调试符号,从编译的模块中提取有用的东西是相当棘手的。这是因为C编译器将在所有地方对助手函数进行大量内联,并应用各种低级代码优化,从而使提取原始宏级代码模式变得更加困难。但是,您将看到对CPython的命名C-API调用,并且还将看到您自己的代码中的函数名。Cython不是专门为代码混淆而设计的,恰恰相反。但可读性汇编肯定从来都不是设计目标。

编译C代码并只分发编译后的版本如何?“我担心在我工作的地方,有些人会试图“窥视”代码并找出它的用途。”你和某人一起工作,但他们看不到你的源代码?斯文:是的,唯一的“分布式”版本是编译版本。我只是担心,不知道要弄清楚代码的作用有多难。杰瑞:在一些公司里,有些团体相互竞争,每个团体都想保留自己的专有信息。@user54009:也许你应该写一个模糊器——可能是你简历的好素材,你显然需要更新它;显然,找一份新的/不同的工作应该是你的首要任务。@Jerry:+1在同一家公司从事间谍活动。。。我不知道该说什么…谢谢杰瑞给我这个详细的回答。