代码混淆?
时间:2020-03-06 14:38:44 来源:igfitidea点击:
因此,我对复活节彩蛋情有独钟...这可以追溯到我是复活节彩蛋档案馆发现社区的一部分。
但是,我也做了很多开源编程。
我想知道的是,我们认为什么是系统地和方法地混淆代码的最佳方法。
首选使用PHP / Python / C / C ++的示例,但如果对方法进行了正确的解释,则可以使用其他语言的示例。
解决方案
在这种情况下,我们应该使用/编写一个"混淆器"。一个为我们完成工作的程序。
Salamander混淆器可用于混淆.Net程序,但是它更多的是防止反编译,因此不完全是我们需要的。
学习C语言混淆的好地方是国际混淆C代码竞赛
问题是如何在看得见的情况下(开放源代码)创建看似没有混淆的代码,而又不会执行其他功能。
一些明显的方法:
- 删除注释和尽可能多的空格,而又不会破坏内容
- 连接线
- 将变量和函数重命名为无意义(最好为1个字符)
- 完全优化地编译代码。完全剥离二进制文件。
- 在代码上使用反编译器。
我可以保证结果将是完全不可读的,以至我们甚至无法阅读它;)
对于系统的和系统的代码混淆,我们无法击败Perl。如果我们希望将某些内容编译为二进制文件,那么总会有APL。
如果目标是.NET框架,则将复活节彩蛋源代码作为二进制字符串放入资源文件中。然后,我们可以让自己的初始化例程之一获取它,对其进行解码,然后将其编译到内存中。我们可以使用反射来调用它。
如果我们需要有关编译到内存和调用生成的程序集的技术方面的帮助,我可以为我们提供我编写的库以及使用该库的示例程序。
我们可以使用此技术来加载插件,这是合法的事情,并且在初始化程序中是合理的。
本着重命名符号的精神:通过用相同的名称命名不同的变量来过度使用范围和可见性规则。