具有唯一ID的MCU在程序加密上有獨(dú)特的優(yōu)勢(shì),就是利用這唯一ID對(duì)程序加密,使程序只能在這唯一ID上使用,做到程序不能直接硬拷貝。具體做法就是在燒錄程序時(shí)先讀出MCU的唯一ID,然后把這ID寫(xiě)入程序中,目標(biāo)程序中要有判別這唯一ID的函數(shù),程序運(yùn)行時(shí)要對(duì)ID進(jìn)行核對(duì),如果不對(duì),則程序非正常運(yùn)行。做的高級(jí)點(diǎn)在程序空間開(kāi)辟16-64字節(jié)的空間,把這唯一ID號(hào)加上一些隨機(jī)數(shù)據(jù)使用DES或其他加密算法進(jìn)行加密,然后燒錄到該MCU中。同時(shí)計(jì)算該程序的校驗(yàn)和(最好是unsigned long)一并燒錄的MCU中, 目標(biāo)程序運(yùn)行時(shí)不定時(shí)計(jì)算自己的校驗(yàn)和,發(fā)現(xiàn)不對(duì)則程序非正常運(yùn)行。程序運(yùn)行時(shí)解密這些數(shù)據(jù),然后再與唯一ID對(duì)照,如果錯(cuò)誤則不正常運(yùn)行。這樣做的目的是讓非法拷貝程序難道增加,必須讀懂程序,然后再修改相關(guān)方才能成功。這樣給非法拷貝增加了相當(dāng)難度。
要做到以上的程序加密,就要有個(gè)自定義程序燒錄工具。本人在研究了STC11F系列的燒錄時(shí)序后開(kāi)發(fā)了專用燒錄工具,燒錄時(shí)先燒錄一個(gè)專門讀唯一ID的程序,然后運(yùn)行這程序,讀出ID,然后進(jìn)行DES加密處變成16字節(jié)數(shù)后加入到真正的目標(biāo)程序然后燒錄這唯一適合該MCU的程序到該MCU。由于這些過(guò)程都是由程序控制的,與燒錄一個(gè)程序沒(méi)什么本質(zhì)的區(qū)別,還可脫機(jī)燒錄,非常方便。 |