山外有山,天外有天,學無止境,做產品,搞技術更是如此。沒有任何個人及公司能夠閉門造車研發(fā)出好產品來,需要不斷的學習別人先進的東西,取長補短,這樣人類才能不斷的進步,社會才能不斷的發(fā)展。當今社會,商品經濟環(huán)境早已成為主流,學習、創(chuàng)新能力變得越來越重要,沒有學習,就不可能有創(chuàng)新。
要學習、學會先進技術,對于嵌入式產品而言,要了解硬件原理,有電路板就可以,這也容易獲得,買個設備就可以了。而對于嵌入式軟件,最好莫過于得到源代碼。而源代碼是公司的命脈,外界的人不可能獲得。除非去偷,這是犯法傷德的事,可不能干。就沒有其它方法了?非也,那就是以技攻技,即以更前沿、更具技術含量的方案去解決,我這里稱這方法為逆向分析。
第一步,得有被學習、研究的對象,花錢買要學習的產品。這步沒有技術含量,只是商務運作。商品經濟下,只要有錢,應該就可以解決。
第二步,將設備的核心,即CPU的程序讀出來,得到二進制即BIN程序文件。這個步驟,需要專業(yè)人士操作,非專業(yè)人士勿試。
第三步,將第二步得到的BIN程序文件進行反匯編,得到可閱讀性強的匯編源代碼,這樣,就可以完全學習了。只有讀懂了,才能夠修正、創(chuàng)新。這個步驟,涉及的面比較廣,首先是需要解決反匯編工具的問題,必須要有支持本CPU的反匯編工具。其次是要有看得懂本CPU匯編程序的工程師 。
第四步,也是最高境界了,就是將第三步獲得的已看懂的匯編程序,精準的翻譯成更為直觀的C語言程序。有此C源代碼為基礎,就可以任意發(fā)揮創(chuàng)新了。這一步要求工程師不僅兼?zhèn)鋮R編語言及C語言,對耐心、細心要求也高,工程師對這項枯燥的工作,一定要感興趣,否則再牛的工程師,也往往讓項目做失敗。
也只有那些有超強研發(fā)實力的公司才能完全擁有上面各步驟中所需技能的工程師,而對于中小型公司,很難湊齊這些專業(yè)工程師。不過對于中國來說,由于咱們對計算機方面,特別是單片機方面的研究、應用,起步相對國外發(fā)達國家,要晚很多,往往是國外推出了新單片機,國人勤奮學會應用,所以從應用的層面講,國人研究得還是比較透的,咱們好多單片機都做不出來,但應用的熟練程度,絕不遜于國外發(fā)達國家,這樣就自然而然的產生了不少對相應單片機有深入了解的高手,這些高手,能很輕易的讀取已經硬件加密過的CPU里的程序,再者,國內有這方面的市場需求,所以,中國在硬件解密方面的實力是相當強的。這就為逆向工程提供了堅實的基礎,在中國,可以很輕易找到單片機硬件破解、讀取CPU里程序的工程師。
但對于好多有技術含量的項目,就算硬件破解出來了,得到了BIN程序文件,要反匯編分析也非易事,有的甚至還進行了軟加密,要順利逆向分析,必須要有好的反匯編工具,這點至關重要。另外就是要有資深的既懂匯編又懂C的工程師,這類的工程師,相對硬件破解工程師來說,要稍難找些。對于有逆向分析需求的中小公司,不一定要本公司具備相應的工程師,完全可以找專業(yè)、專職的逆向公司或個人,這樣應該會更能有效解決問題。
上面談的全是逆向分析的內容,但如何防逆向分析呢?公司上下齊心,辛辛苦苦做出一個產品出來,如果一下子就被別人給逆向分析出來,這個損失是巨大的。任何產品,理論上都可以成功被逆向分析出來,只是逆向分析的難度問題。如果單片機的硬件加密及軟件加密做得足夠強大,大大增加逆向分析的難度,這樣逆向時間勢必要成倍增加,這樣從逆向時間及成本上,讓逆向者自我放棄。具體有下面幾種方法加強防逆向分析:
1. 盡量選擇新推出的穩(wěn)定的單片機,這個尺度有點難把握,但可以選擇大公司新推出的芯片,這類公司新推的芯片,穩(wěn)定性方面應該會有所保障的,如TI、NXP、Atmel、ST意法等。
2. 盡量選擇性價比高的16位或32位單片機代替8位單片機,如STM32F10X系列,這類系列的單片機逆向是相當有難度的,且價格跟一些8位機差不多。16位的如MSP430系列。
3. 盡量在程序中增加軟加密代碼,這樣就算成功硬破解,得到了程序,燒錄到芯片中,也無法正常運行,還必須要進行軟解密。有些單片機自帶有軟加密特性可用于軟加密,如果艾特梅爾的Atmega系列及ST的STM32F10X系列,但有些就沒有,像51及MSP430,很少有此特性,這樣要實現軟加密,就必須另外帶一個芯片,結合程序實現軟加密。
4. 燒錄程序時,將單片機硬件提供的加密位,全部置為加密狀態(tài)。