stm32防破解方法
stm32防破解方法
STM32系列從問世以來就以優(yōu)異的性能和便宜的價(jià)格深得人心,但是不幸的是樹大招風(fēng),問世不就久就被解密公司破了,從12年的12萬的解密價(jià)格,到13年的6萬,14年一萬,再到現(xiàn)在的五千,相信不用兩年就會(huì)像51一樣淪為幾百塊的白菜價(jià),所以軟加密對(duì)未來的STM32的工程師來說異常重要,以下正式對(duì)各種方式的軟加密和破解方法做一個(gè)總結(jié),以便各位朋友在日后設(shè)計(jì)軟加密的時(shí)候不要給破解的人留下漏洞。
stm32防破解方法1:最簡(jiǎn)單的軟加密不用反匯編,直接在機(jī)器碼中就可以先到FF1FE8F7,因?yàn)镾TM32機(jī)器碼是小端格式,這個(gè)地址實(shí)際就是芯片ID地址,破解的人只需要在程序中找到一塊空白的位置,然后將解密的那個(gè)芯片的ID復(fù)制到這里,再將程序中出現(xiàn)的那個(gè)1FFFF7E8改為存放母片的那個(gè)ID就破解了,這種方法和你程序采用的什么算法加密毫無關(guān)系,防破解處理方法是在程序加密的時(shí)候不要直接讀芯片ID,應(yīng)采用幾個(gè)變量運(yùn)算合成ID地址再間接的去讀,注意不能用立即數(shù)合成,因?yàn)槟菢泳幾g器還是會(huì)給你優(yōu)化成一個(gè)立即數(shù)的。
stm32防破解方法2:就算在程序中找不到明顯的讀ID指令也是可以破解的,方法就是仿真跟蹤,仿真跟蹤前需要反匯編,THUMB2的文檔中每條指令生成的機(jī)器碼有詳細(xì)的說明,隨便都可以找個(gè)做上位機(jī)的寫個(gè)自動(dòng)反匯編工具,之后再人工修改下就可以了,其實(shí)還有一種更簡(jiǎn)單的方法,就是將機(jī)器碼定義成DCI XXXXH這樣的格式,導(dǎo)入KEIL編譯能通過,然后仿真,KEIL會(huì)自動(dòng)的幫你反匯編,接下來就是單步執(zhí)行,延時(shí)類函數(shù)跳過,這時(shí)候要密切注視R0到R15,不管你用什么方法得到的ID地址,最終一定會(huì)出現(xiàn)再這幾個(gè)寄存器中,防破解的方法一個(gè)是檢驗(yàn)ID號(hào)的時(shí)候不要在開機(jī)就檢驗(yàn),要在特定的硬件條件下才檢驗(yàn)ID,然后如果不合法程序就自毀,這樣就只能通過JTAG硬件仿真了。所以產(chǎn)品上市的時(shí)候切記將其它IO口轉(zhuǎn)到JTAG口,這樣就占用了JTAG,仿真就不行了
stm32防破解方法3:是不是這樣就安全了?不是的,你可以禁用JTAG,人家同樣可以修改指令開啟JTAG,最好的方式是在程序關(guān)鍵的代碼塊做CRC檢驗(yàn),這樣只要關(guān)鍵指令被修改過,就可以發(fā)現(xiàn),剩下的自己看著辦……
stm32防破解方法4:其實(shí)沒有破不了的軟加密,只是一個(gè)時(shí)間和成本的問題,但是也不能讓人家那么輕易的就破解了,除了上面的防破解的方法之外還可以在程序中特定條件下做多次檢驗(yàn),檢驗(yàn)的時(shí)候不要用簡(jiǎn)單的判斷真假跳轉(zhuǎn),應(yīng)該用檢驗(yàn)的結(jié)果做程序下一步執(zhí)行的參數(shù),這樣別人破出來的產(chǎn)品原以為沒問題了,但是用起來不穩(wěn)定,或者性能差,或者老死機(jī)等。除了這些還可以外掛加密芯片,以增加破解的成本,更多防破解的方法