山外有山,天外有天,学无止境,做产品,搞技术更是如此。没有任何个人及公司能够闭门造车研发出好产品来,需要不断的学习别人先进的东西,取长补短,这样人类才能不断的进步,社会才能不断的发展。当今社会,商品经济环境早已成为主流,学习、创新能力变得越来越重要,没有学习,就不可能有创新。
要学习、学会先进技术,对于嵌入式产品而言,要了解硬件原理,有电路板就可以,这也容易获得,买个设备就可以了。而对于嵌入式软件,最好莫过于得到源代码。而源代码是公司的命脉,外界的人不可能获得。除非去偷,这是犯法伤德的事,可不能干。就没有其它方法了?非也,那就是以技攻技,即以更前沿、更具技术含量的方案去解决,我这里称这方法为逆向分析。
第一步,得有被学习、研究的对象,花钱买要学习的产品。这步没有技术含量,只是商务运作。商品经济下,只要有钱,应该就可以解决。
第二步,将设备的核心,即CPU的程序读出来,得到二进制即BIN程序文件。这个步骤,需要专业人士操作,非专业人士勿试。
第三步,将第二步得到的BIN程序文件进行反汇编,得到可阅读性强的汇编源代码,这样,就可以完全学习了。只有读懂了,才能够修正、创新。这个步骤,涉及的面比较广,首先是需要解决反汇编工具的问题,必须要有支持本CPU的反汇编工具。其次是要有看得懂本CPU汇编程序的工程师 。
第四步,也是最高境界了,就是将第三步获得的已看懂的汇编程序,精准的翻译成更为直观的C语言程序。有此C源代码为基础,就可以任意发挥创新了。这一步要求工程师不仅兼备汇编语言及C语言,对耐心、细心要求也高,工程师对这项枯燥的工作,一定要感兴趣,否则再牛的工程师,也往往让项目做失败。
也只有那些有超强研发实力的公司才能完全拥有上面各步骤中所需技能的工程师,而对于中小型公司,很难凑齐这些专业工程师。不过对于中国来说,由于咱们对计算机方面,特别是单片机方面的研究、应用,起步相对国外发达国家,要晚很多,往往是国外推出了新单片机,国人勤奋学会应用,所以从应用的层面讲,国人研究得还是比较透的,咱们好多单片机都做不出来,但应用的熟练程度,绝不逊于国外发达国家,这样就自然而然的产生了不少对相应单片机有深入了解的高手,这些高手,能很轻易的读取已经硬件加密过的CPU里的程序,再者,国内有这方面的市场需求,所以,中国在硬件解密方面的实力是相当强的。这就为逆向工程提供了坚实的基础,在中国,可以很轻易找到单片机硬件破解、读取CPU里程序的工程师。
但对于好多有技术含量的项目,就算硬件破解出来了,得到了BIN程序文件,要反汇编分析也非易事,有的甚至还进行了软加密,要顺利逆向分析,必须要有好的反汇编工具,这点至关重要。另外就是要有资深的既懂汇编又懂C的工程师,这类的工程师,相对硬件破解工程师来说,要稍难找些。对于有逆向分析需求的中小公司,不一定要本公司具备相应的工程师,完全可以找专业、专职的逆向公司或个人,这样应该会更能有效解决问题。
上面谈的全是逆向分析的内容,但如何防逆向分析呢?公司上下齐心,辛辛苦苦做出一个产品出来,如果一下子就被别人给逆向分析出来,这个损失是巨大的。任何产品,理论上都可以成功被逆向分析出来,只是逆向分析的难度问题。如果单片机的硬件加密及软件加密做得足够强大,大大增加逆向分析的难度,这样逆向时间势必要成倍增加,这样从逆向时间及成本上,让逆向者自我放弃。具体有下面几种方法加强防逆向分析:
1. 尽量选择新推出的稳定的单片机,这个尺度有点难把握,但可以选择大公司新推出的芯片,这类公司新推的芯片,稳定性方面应该会有所保障的,如TI、NXP、Atmel、ST意法等。
2. 尽量选择性价比高的16位或32位单片机代替8位单片机,如STM32F10X系列,这类系列的单片机逆向是相当有难度的,且价格跟一些8位机差不多。16位的如MSP430系列。
3. 尽量在程序中增加软加密代码,这样就算成功硬破解,得到了程序,烧录到芯片中,也无法正常运行,还必须要进行软解密。有些单片机自带有软加密特性可用于软加密,如果艾特梅尔的Atmega系列及ST的STM32F10X系列,但有些就没有,像51及MSP430,很少有此特性,这样要实现软加密,就必须另外带一个芯片,结合程序实现软加密。
4. 烧录程序时,将单片机硬件提供的加密位,全部置为加密状态。