軟件如何防破解
有矛就有盾,再好的盾也有茅可以刺破一樣,世界上很多nb的軟件用了好多nb的防破解技術(shù),結(jié)果還是被強(qiáng)大的破解愛好者一一攻破,如微軟操作系統(tǒng),OFFICE系列還不是出一款被破一款么?對(duì)于軟件開發(fā)者,要對(duì)自己開發(fā)出的軟件要做到絕對(duì)安全是比較困難的。
經(jīng)過多年來從事軟件加密及破解,單純從技術(shù)角度很難徹底的防止破解,一心研究那些防破解技術(shù),如軟件加殼,軟件內(nèi)部設(shè)置調(diào)試陷阱,序列號(hào),授權(quán)認(rèn)證,從軟件的應(yīng)用層/內(nèi)核層去防破解。不管做得多好,你只要軟件放在破解者手上都有被破解的時(shí)候。下面舉幾個(gè)破解例子思路:
例子一:有一些數(shù)據(jù)安全保護(hù)軟件(還是打廣告打得好的大公司軟件),也就是透明加密,美其明曰加密用了國際最高強(qiáng)度的AES加密算法,內(nèi)部員工可以正常打開但無法把文件泄露出去。但凡知道這類軟件的原理那么要把一個(gè)加密的文件解密出來就很容易的,比如通過注入,讀內(nèi)存等,截獲解密API,這些方法壓根就不需要知道你軟件里加密用的是什么算法,因?yàn)槠平庹咦罱K只需要把數(shù)據(jù)搞出來即可。
例子二:有一些金融指標(biāo)保護(hù)軟件,通過整體加密的方式(即把指標(biāo)放在金融軟件里面),然后通過引導(dǎo)程序來做授權(quán)認(rèn)證,金融軟件界面入口修改為不可操作(如禁止打開)等手段,最后通過某些公開的軟件簡(jiǎn)單打包一下,讓人感覺是一套完整的加密保護(hù)方案,但簡(jiǎn)單分析后漏洞百出,不用多長時(shí)間就可以完全破了
例子三:有一些通過卡號(hào)來限制使用的軟件,如過期后軟件就不可用。市場(chǎng)上很多這類軟件,只是簡(jiǎn)單的通過這么個(gè)單一條件來做限制。殊不知通過OD這樣的破解軟件簡(jiǎn)單跟蹤一下就能定位到,可以說是秒破不為過
看完上面這幾個(gè)軟件保護(hù)的例子,好象對(duì)我們軟件開發(fā)者或者數(shù)據(jù)需要保護(hù)者有點(diǎn)絕望,我們辛苦做出來的軟件,花大量時(shí)間錄的視頻就被人這么無情的破了,的確對(duì)我們是一大打擊。
經(jīng)過我多年對(duì)軟件的攻與防,總結(jié)如下:軟件防破解其實(shí)不是單一技術(shù)就能解決的問題,而是一個(gè)綜合的工程學(xué)問題
下面從以下幾點(diǎn)來思考如何做軟件的防破解
1、防破解還是要做的,做為軟件開發(fā)者,軟件防破解肯定是需要的,軟件防護(hù)目的不是為了完全防止不被破解,而是盡可能的做到增加破解成本。比如一個(gè)軟件破解需要半小時(shí)跟需要一天是完全不同的成本,需要一天跟需要半個(gè)月又是完全一樣的成本,只要做到了盡可能的增加破解成本,那么至少可以減少70%的破解可能性,因?yàn)槭忻嫔掀平庹吆芏嘀皇杖€(gè)幾百塊幾千塊,如果破解個(gè)軟件需要10天半個(gè)月,那么這類破解者可能就直接放棄了。
2、站在破解者角度去開發(fā)軟件,期望自個(gè)軟件做出來后不被破解,那么就要站在破解者的角度去思考自已軟件是否存在漏洞,思考整個(gè)業(yè)務(wù)流程是否嚴(yán)謹(jǐn),防破解流程是否存在漏洞。許多軟件開發(fā)者開發(fā)出一個(gè)產(chǎn)品后可能還專門找人去破解,找安全漏洞,許多注重安全的軟件公司還專門成立了軟件攻防實(shí)驗(yàn)室
3、為自己軟件產(chǎn)品做煙幕彈,即開發(fā)“破解版”,在軟件正式版發(fā)布后,同時(shí)制作一個(gè)假的“破解版”,也就是從軟件表面上讓大家認(rèn)為這是個(gè)破解版,實(shí)際上用了一小段時(shí)間后,就發(fā)現(xiàn)這個(gè)破解版是不可用的,或是不好用的,這個(gè)時(shí)候你的“破解版”再適時(shí)彈出“破解失效,請(qǐng)到××處購買正式版”等宣傳話語。然后你把這個(gè)假的破解版找?guī)讉€(gè)知名的破解網(wǎng)站上傳,這個(gè)時(shí)候真的破解版還沒出假的破解版就已經(jīng)滿天飛了,這樣的情況下大多數(shù)用戶都不可能下載到真正的破解版,并且用上了你的破解版后,定會(huì)對(duì)破解版大失所望,認(rèn)為網(wǎng)上流傳的破解版都不可用,這樣就更有可能購買你的正式版軟件。
4、把核心的計(jì)算放到服務(wù)器上,如果把所有數(shù)據(jù)放在本地計(jì)算不管如何做防護(hù)都無法保障安全,但是如果把一些核心的計(jì)算算法及數(shù)據(jù)放在服務(wù)器上,并且軟件的功能運(yùn)行依賴這些服務(wù)器上的算法及數(shù)據(jù)。并且這些數(shù)據(jù)及算法是不可偽造的,那么破解者就算把本地的整個(gè)軟件還原成源代碼,也不一定可以正常使用軟件。
5、服務(wù)為本,盡量讓你的軟件提供的是一種服務(wù),而不是某項(xiàng)技術(shù)本身,如果僅僅是某項(xiàng)技術(shù),軟件一被破解,用戶拿到破解版的軟件就不再需要你了;如果是服務(wù),即使用戶得到了可用的破解版,他可能還是需要轉(zhuǎn)而尋求你獲得技術(shù)支持,通過這種策略也可以避免破解帶來的巨大損失。
6、分散校驗(yàn)保護(hù)法,很多時(shí)候如果只是一種保護(hù)驗(yàn)證法,無法有效的保護(hù)軟件。但是如果在多個(gè)業(yè)務(wù)場(chǎng)景用不同的保護(hù)機(jī)制,會(huì)讓破解者崩潰掉:如單一算法都不復(fù)雜,估計(jì)單個(gè)破的話也容易,但所有算法不是全部用于同一時(shí)間同一處進(jìn)行注冊(cè)碼的驗(yàn)證,而是分散到軟件的不同功能,不同時(shí)間來驗(yàn)證,有的是軟件啟動(dòng),有的是點(diǎn)某個(gè)按鈕的時(shí)候,有的是當(dāng)時(shí)間達(dá)到某個(gè)條件的時(shí)候,破解者往往是把軟件啟動(dòng)時(shí)候的驗(yàn)證給破掉,但是他在使用過程中又會(huì)經(jīng)常隨機(jī)的遇到很多驗(yàn)證失敗的提示,而且這些過程隨機(jī),可能除了作者,沒人知道這背后有多少處驗(yàn)證,這些驗(yàn)證又是什么時(shí)候觸發(fā),所以這種做法能讓破解者抓狂的說。另外很多破解者僅僅是為了破解而破解,自己本身又不用被破解的軟件,往往是啟動(dòng)階段的驗(yàn)證一破解掉,就認(rèn)為大功告成的開始發(fā)布“成功”破解版。
7、試用版就是試用版,如果你打算做一個(gè)試用版那么就需要做到就算你這個(gè)軟件被人完全破了,它依然還是試用版。很多做軟件產(chǎn)品的程序員,在軟件里區(qū)別正式版和試用版就僅僅是靠注冊(cè)碼驗(yàn)證而已,這種情況下,只要試用版被破解,那正式版就到手了,而正確的思路應(yīng)該是,正式版不提供公開下載,只有用戶付費(fèi)后才提供下載地址,公開發(fā)布的試用版里徹底不放提供正式版的數(shù)據(jù)的代碼,造成的結(jié)果是,很多破解者得到試用版后就破解,令他們高興的是,軟件很容易破解,但令他們沮喪的是,破解成功后,試用版還是試用版,改有的功能還是沒有。這個(gè)招式適合軟件使用量不是特別大的用戶,依我的看法,95%的軟件使用量都不算大,所以這招其實(shí)大家皆可用之。
在我實(shí)踐的過程中,以上幾點(diǎn)對(duì)于防破解都是行之有效的,大家可以嘗試一下,對(duì)軟件加密及破解感興趣的可留言交流