首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >逆向工程自动生成C?

逆向工程自动生成C?
EN

Stack Overflow用户
提问于 2011-04-01 07:18:23
回答 3查看 2.6K关注 0票数 7

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

这确实在速度方面有所帮助,但我担心在我工作的地方,有些人会试图“偷看”代码并弄清楚它是做什么的。

Cython代码基本上是一个自动生成的C语言,是不是很难对其进行逆向工程?

有什么建议可以让代码更安全,更难进行反向工程吗?(我假设只要付出足够的努力,一切都可以逆向工程。)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-01 07:51:16

好的--试着更直接地回答你的问题:大多数自动生成的C代码都相当丑陋,所以需要有人相当积极地对其进行逆向工程。同时,我不相信我从来没有看过Cython生成的东西,所以我不确定它看起来是什么样子。

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

但是,我要重复一遍,我非常确定我还没有看过Cython产生的内容,所以我不能很确定地对它说太多。

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

如果没有这一点,编写自己的混淆程序并不是很困难,但效率的程度可能会随着您愿意投入的工作量而有所不同。系统地将任何有意义的变量名重命名为___可以做很多事情(例如,profit = sales - costs;_ = _I_ - _i_;更有意义)。然而,根据所讨论的机器生成的代码,这可能不会真正完成很多事情--混淆一个通用框架可能不会对理解您的代码有多大影响--如果他们弄清楚了您正在遵循的过程,他们也许能够简单地复制正确的框架代码,并将特定于您的程序的部分移植到非混淆框架中。

票数 6
EN

Stack Overflow用户

发布于 2011-04-16 22:38:38

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

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

现在在Cython中也有特殊的gdb支持,所以你可以做Cython源代码级的调试等等。

票数 2
EN

Stack Overflow用户

发布于 2011-04-16 22:55:33

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5507531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档