1. 程式人生 > >互聯網軟件如何防破解

互聯網軟件如何防破解

div 組織 公開 如果 天下 成功 內存 部分 pan

     國內推廣軟件,你要面對的最大問題莫過於軟件被破解了。很多軟件作者反映說,原來軟件在被破解前交費註冊的人還不少,但被破解後收入就直線下降,連成本都收不回來。您想,有了免費的東西人們還交那個錢幹什麽?
    
在這裏,我借鑒了一個軟件作者的防破解經驗:發行1.0版時2.0版已經寫的差不多的。發行1.0版時要把1.0版的防破解或者註冊算法寫的簡單些等著別人去破解。一但出現1.0的破解,等待幾周,這幾周的時間足以使網上1.0的破解版遍天下。

然後,分析破解過程更改2.0版算法(層層加密,復雜再復雜),雖無法根除破解但可以浪費破解者的時間和耐力!一般情況下,在網上一搜你的軟件已經有破解版了(1.0的)新的破解者很少會再去破解,何況2.0版本更復雜些。我的一個軟件用了此法,

推出一月後被破解組織破解,公開破解過程及註冊算法,並做成破解教程。其實破解從某種意義上說是幫我宣傳了軟件。我在一個月後推出早已經寫好的新版本,還註冊成了“特別版”以迷惑想要破解版的人。使用上述方法後至少在我更新了幾次軟件後的今天仍沒出現破解。
但在網上搜破解版、特別版、註冊版到處都是,可沒一個是真的。其實一些破解高手只是想試探自己的能力,破解一個軟件後,一般會把目標定在下一個軟件上。不過如果你的軟件成為人手必備的工具,此法怕是不靈了。
另外,從技術上講也有一些防破解的方法。
假設你的註冊部分有300行,你可以分成30個inline函數調用(一定要inline),func1(),func2()... func30(). 將他們隨意放到程序的各個部分,一定不能放在一起。

不要用Memcpy等常用系統調用拷貝註冊碼,盡可能自己寫,像Memcpy很好寫,性能差點無所謂。經過編譯後inline函數展開,註冊部分和其他代碼混在一起,他要寫出註冊機就很困難,因為要向在幾十萬甚至上百萬匯編代碼裏找出有用的註冊部分那簡直就像是在大海裏撈針。

另外註冊碼也不要放在一起,假設你的註冊碼是12位,千萬不要用一個12位的數組放註冊碼,你可以在程序的不同位置定義12個全局字符變量,每個放一位,這樣註冊碼在內存就不連續了。最好再加密處理一下(簡單的字符異或就可以),驗證時再解密。
只要破解者找不到你驗證結束的地方,暴力和Loader破解也沒有可能。很重要的一點是不要用連續內存保存驗證用到的變量,盡量將用到的驗證臨時變量分散定義在程序的不同處,再在驗證中,不斷轉移一些值到其他變量中,對付暴力和Loader會比較有效。


沒有必要用復雜的加密算法,更容易成為追蹤的目標。只要你將註冊部分隱藏的足夠好,也沒有漏洞,你花1天寫的加密算法,破解者可能會花100-1000倍的時間破解。大部分人都會放棄。你將註冊做在一起,就像將你的財寶放在現代保險箱裏,雖然非常堅固難以解密,對於開鎖高手兩分鐘就打開了。
對於一些比較專業的破解者采用上面的方法也是很有效的但是,還是要避免一些低級失誤例如:不要在內存中直接出現註冊碼和明顯的註冊碼比較部分不要給用戶太多的有關註冊驗證的信息,也不要接收到註冊碼後立刻就進行比較。在軟件的不同功能處實現驗證時的好處還有就是不會立刻執行到驗證代碼註冊碼,
可以分多次驗證,也可以分成幾部分驗證,還可以分成幾層驗證驗證時,可以盡量多執行一些無用的操作,加上一些象遞歸之類難於調試追蹤的代碼,但在其中要穿插實現軟件功能的代碼,否則人家直接就跳了過去。反正就是越不引人註意越好,亦即越亂越好。
其實要想徹底防止破解也是不現實的,除了研究一下破解方法,在發布前加殼外,並采用以上所說的方法外,不斷升級程序也是比較好的方法。
總之,推廣軟件對於搞慣了技術的軟件作者來說一開始會走一些彎路,但只要不斷學習成功者的經驗,不斷吸取自己失敗的教訓,你也會成功的。最後,祝大家個個都成為共享高手

互聯網軟件如何防破解