我想知道是否有编译C,C ++和Python代码的方法,以便无法在Linux上进行反向工程?

我听说在Windows上有一些方法可以完成它,但是我正在Linux上工作。

我想安全地编译我的代码(发行版或最终版本)。

UPDATE

至少我想让普通用户很难反汇编

我正在使用GCC for C和C ++,如果您向我介绍适用于Python的最佳编译器,我也将非常感谢。

评论

布鲁斯·施耐尔(Bruce Schneier)的专栏今天链接了有关该领域研究的文章:eprint.iacr.org/2013/451.pdf该论文可能不会告诉您如何解决此问题,但是它将为您提供多少研究的好主意麻烦到你了。

#1 楼

您不能阻止逆向工程。您可以使它或多或少地变得困难,但是您不能阻止它。否。

更新

好吧,作者用一个更清晰的问题对其进行了更新……这是可以做的事情:


二进制文件中的符号。至少。
混淆代码。这可能会有所帮助:https://stackoverflow.com/questions/4111808/c-c-compiler-generating-obfuscated-code。
打包或保护二进制文件。抱歉,我知道没有适用于Linux的好的保护器。

关于Python代码...如果足够幸运,可以使用Shedskin编译为本机代码,然后应用讨论的相同技术之前。如果没有,您可以尝试使用Cython而不是Python。另外,这里还有一个关于混淆Python代码的问题。

PS:无论如何,我认为代码保护被高估了。您不能阻止一个坚定的个人或团队对软件进行逆向工程,有时这会浪费时间和金钱。

评论


好的..这正是我想要的..编译器怎么可能?谢谢

–MLSC
2014年2月24日10:18



#2 楼

对于C编译器(gcc),首先要确保您不会错用-g选项进行编译(添加用于调试的符号,基本上是完整的源代码)。

-g产生调试信息以操作系统的本机格式


其次,请尝试使用-s选项:


-s从操作系统中删除所有符号表和重定位信息可执行文件。


没有函数名将很难对其进行反向工程。看看man strip。我还没有尝试过,但是类似


strip --strip-debug objfile


或:


在对象文件上删除--strip不需要的objfile


会很有用。

尽可能多地启用优化-O3。很难阅读优化的程序集,这成为另一个障碍。确实没有防止反汇编和逆向工程的好方法,但是却使它变得更加困难。

对于Python,只提供.pyc字节码文件是绝对可以的。它是Python虚拟机的源代码的编译版本。如何创建.pyc文件?试试这个,也许这就是您所需要的。用户可以像使用源代码文件一样轻松地使用python运行字节码文件。

最后,请尝试在Google上进行代码混淆。混淆C ++代码没有任何意义,但也许有人知道代码混淆是否是Python的好策略。