blu*_*ers 2 c perl reverse-engineering code-access-security
有一个声称符合C的客户端比sudo"编译"Perl字节码等更难进行逆向工程.任何人都有办法证明或反驳这一点?
我不太了解perl,但我会举一些例子说明为什么将编译成汇编的代码转换为如此丑陋.
逆向工程c代码最丑陋的是编译删除了所有类型信息.这种名称和类型的缺乏是IMO最糟糕的部分.
在动态类型语言中,编译器需要保留更多有关该语言的信息.特别是字段/方法/ ...的名称,因为这些字符串通常是不可能找到每个用途的字符串.
还有很多其他丑陋的东西.比如整个程序优化使用不同的寄存器来每次传递参数.函数被内联,因此在很多地方出现了一个简单的函数,由于优化,它们的形式通常略有不同.
堆栈中的相同寄存器和字节由函数内的不同内容重用.使用堆栈上的数组变得特别难看.因为你无法知道数组的大小和结束的位置.
然后有微优化可能会令人讨厌.例如,我曾花费大约15分钟来反转曾经类似的简单函数return x/1600.因为编译器认为分区很慢并且将该分区重写为常量,分为几个乘法加法和按位运算.
| 归档时间: |
|
| 查看次数: |
1983 次 |
| 最近记录: |