互聯網軟件如何防破解

     國內推廣軟件,你要面對的最大問題莫過於軟件被破解了。不少軟件做者反映說,原來軟件在被破解前交費註冊的人還很多,但被破解後收入就直線降低,連成本都收不回來。您想,有了免費的東西人們還交那個錢幹什麼?
    
在這裏,我借鑑了一個軟件做者的防破解經驗:發行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倍的時間破解。大部分人都會放棄。你將註冊作在一塊兒,就像將你的財寶放在現代保險箱裏,雖然很是堅固難以解密,對於開鎖高手兩分鐘就打開了。
對於一些比較專業的破解者採用上面的方法也是頗有效的可是,仍是要避免一些低級失誤例如:不要在內存中直接出現註冊碼和明顯的註冊碼比較部分不要給用戶太多的有關注冊驗證的信息,也不要接收到註冊碼後馬上就進行比較。在軟件的不一樣功能處實現驗證時的好處還有就是不會馬上執行到驗證代碼註冊碼,
能夠分屢次驗證,也能夠分紅幾部分驗證,還能夠分紅幾層驗證驗證時,能夠儘可能多執行一些無用的操做,加上一些象遞歸之類難於調試追蹤的代碼,但在其中要穿插實現軟件功能的代碼,不然人家直接就跳了過去。反正就是越不引人注意越好,亦即越亂越好。
其實要想完全防止破解也是不現實的,除了研究一下破解方法,在發佈前加殼外,並採用以上所說的方法外,不斷升級程序也是比較好的方法。
總之,推廣軟件對於搞慣了技術的軟件做者來講一開始會走一些彎路,但只要不斷學習成功者的經驗,不斷吸收本身失敗的教訓,你也會成功的。最後,祝你們個個都成爲共享高手
相關文章
相關標籤/搜索