有可能通过观察计算机硬件获取内部程序算法吗

硬件执行程序的方式主要有两种:一种是程序存储在ROM里面,如EEPROM、Flash memory,在这种方式下,是有可能通过特殊设备读取里面的程序,不过读取出来的一般是编译好的程序段,如机器语言或者汇编语言,要获取源码比较困难,只能进行反编译和重新解释;另外一种是把程序“硬化”了,也就是将程序生成了底层的布局布线(硬核),然后通过流片光刻到芯片上,这种方式下可以通过反向工程获得芯片的布局布线,但是要解释成源码就更困难了。大名鼎鼎的Mobileye就是通过这种方式将自己的算法硬化到芯片上,可以很好的保护自己的知识产权。
■网友
黑盒环境,一般是很难观察出的,除非问题规模不大,而且可以分离特定输入和输出,才可以找出其中的规律。和软件系统是一个道理,在架构之美书中有一个例子,"混乱大都市"架构,一个软件以一个混乱的架构去进行维护,最终难以维护,只得重新学习这个架构,最后把这个软件模块和依赖画到纸上,定睛一看,这明明就是纽约地铁图,别说外部观察了,在内部都不可能全面的理解,硬件机器亦如此。
■网友
一个字,能!严谨一些来讲,理论上能。更严谨得来讲,理论上理想条件下能。再严谨一些的话,不能。 计算机程序运行机制这事儿,还是冯诺依曼老爷子的坑了,老爷子说,一切可以运行的计算机程序,都是要存储在计算机中的。既然能存起来,那就客观存在,既然客观存在,那就能通过某种方式观察。理论上讲,行,没问题。 那要怎么观察呢?首先我们要能够看到这个程序,这是第一步,也是最基本的,这需要足够精密的设备,精密到可以观察或者测量半导体芯片中存储单位的状态,如果不能测量,只能观察的话,那这设备就需要更更更精密了。(这种显微镜,目前来看是没有了,所以只能是理想条件下) 这只是第一步哦,第一步如果通过这种方式获得了算法的机器语言表示,运气好的话,现有手段是可以反编译得到所需算法的,当然,前提是运气好。 但是呢,一切问题的解决办法还是要回归问题的本质,不就是想要算法么?要算法不就是为了运行么?程序是就是用来运行的啊,既然程序是运行的,我们就可以观察其运行过程,获取其原始代码,然后再行反编译。这成本虽然可能也不低,但比起前者,那是低得多得多得多了。 所以对待一个待破解的硬件,根本不可能选择单纯的观察的手段,因为总有更好的办法啊。既然没有人那么做,自然,不可能。
■网友
【有可能通过观察计算机硬件获取内部程序算法吗】 感觉可以,毕竟算法通过程序来实现,程序是靠芯片的运算来实现,芯片的运算能力是靠里面的寄存器类似的东西来实现,就是高低电平来实现,总而言之,高级程序最终不就变成机器语言101100010000,这样的电平高低,可以观察出来呀,只是估计没人看的懂要实现什么算法吧。

■网友
可以的,前提是你对硬件特别熟悉,程序又特别简单,死板固化,通过观察程序运行所产生的物理相关动作以及检测硬件电压,电流的变化,有了这些过程和数据对硬件进行由硬件逆推程序,这样反向倒逼可以得到程序,然而这是理论,运用到实践上困难太大,没谁会这样搞,毕竟没有谁会为一个巨简单看起来弱到爆的程序花掉一大笔钱外加精力和时间,去把硬件里的程序搞出来。有这闲情完全可以重新撸出一大堆代码了。


    推荐阅读