介绍
机械可以通过CT三维扫描逆向出结构图纸,硬件也可以通过PCB抄板还原出原来的器件原理图,那么软件可以逆向吗?一般软件在发布的时候,工程师都会刻意编译不带任何调试信息的、优化版本(Release版),供用户使用。尽管如此,还是经常看到有专门的工具可以破解芯片的加密机制,把原始的bin文件拷贝出来,那么这个二进制文件能不能彻底还原为C语言代码呢?
逆向
答案肯定是可以的,像Android和C#的程序都有相应的逆向工具可以破解,比如前些文章我介绍的ILSpy工具;但是还原出的代码一定是跟原作者写的一模一样吗?肯定是有差别的!因为c语言到二进制代码是一条路径的数学映射,二进制代码到c语言有无数种路径;就像y = f(x),它的表达式是唯一的,但如果你要求x = g(y),这就很难了,逆函数会有无数种可能
风险
即便你侥幸还原出了代码,你也很难根据逆向代码领会到原作者的本意;失之毫厘、差之千里,在自动化、物联网、汽车电子、医疗领域,一个寄存器、变量、数据结构、函数调用,它到底发生了多少微妙的变化(范围、阈值、初始值),我们无从知晓,也不知道它的关联有多大,所以没必要冒着设备出错的风险运行侥幸反编译出来的代码
认知
软件是一个硬件设备的灵魂,从知识产权的角度也很好理解一个问题:假设软件是很轻松就能还原出代码的,那么苹果、微软、谷歌这些IT巨头就没有软件产品的技术壁垒,因为任何使用软件的商业活动都可以通过逆向技术来破解,这个世界将无任何知识产权可言!