有一个客户声称编译后的C比sudo“编译”的Perl字节码或类似代码更难进行反向工程。有谁有办法证明或反驳这一点吗?
发布于 2011-03-12 04:51:56
我对perl了解不多,但我将举一些例子说明为什么将编译后的代码反向编译为汇编是如此丑陋。
逆向工程c代码最丑陋的一点是,编译过程会移除所有类型信息。完全缺乏名称和类型是IMO最糟糕的部分。
在动态类型语言中,编译器需要保存更多有关这方面的信息。尤其是字段/方法/的名称...因为这些通常是字符串,不可能找到所有用途。
还有很多其他丑陋的东西。例如每次使用不同的寄存器来传递参数的整个程序优化。函数是内联的,因此一个简单的函数出现在许多地方,通常由于优化而以略有不同的形式出现。
堆栈上的相同寄存器和字节被函数中的不同内容重用。堆栈上的数组变得特别丑陋。因为您无法知道数组有多大以及它在哪里结束。
然后还有一些微优化,这可能会让人感到恼火。例如,有一次我花了15分钟来逆转一个简单的函数,这个函数曾经类似于return x/1600。因为编译器认为除法很慢,所以用一个常量将除法重写为几个乘法、加法和按位运算。
发布于 2011-03-12 05:11:44
Perl非常容易reverse engineer。选择的工具是vi、vim、emacs或记事本。
发布于 2011-03-12 05:24:33
这确实提出了一个问题,为什么他们担心逆向工程。将机器代码转换回与原始源代码相似的代码比通常的字节码更难,但对于大多数邪恶的活动来说,这是无关紧要的。如果有人想复制你的秘密或破坏你的安全,他们可以做得足够多,而不用把它变成你的原始源代码的完美表示。
https://stackoverflow.com/questions/5278036
复制相似问题