所有軟體都可以被破解嗎?為什麼網上破解軟體那麼多,軟體開發者難道沒有好的辦法防止其軟體被破解嗎?
實際上,任何一個靠註冊碼作為一個開關來限制程序功能的程序,都是理論可破解的。
為什麼可以破解呢?這還得從程序的構造開始說起。一個付費軟體一般都是這樣的——在你的程序上做了一些小的限制,讓你無法使用付費版的某些功能;亦或是給你一個使用時間的限定,在這個"規定的"時間內,超過這個時間你就不得不花錢去把這個軟體請回來。
那麼,cracker又是怎麼給這些程序加上"無期徒刑"的呢?我們知道,這些軟體之所以能夠限定你程序的功能,靠的是一個授權驗證。這個驗證可以多種多樣,可以是電腦的註冊表,也可以是系統時間,還可以是版本號,再或者是網路的一個http請求……總之,如果你不符合這個條件了,程序就會根據作者的設定,把相應的功能鎖死。
但是呢,問題也正是出在了這裡。程序的功能是完全的,只是因為一些原因被關閉了而已。而cracker要做的,就是強行啟動這些被關閉的功能。強行啟動這些被關閉的功能,cracker可謂是絞盡腦汁,用盡手法。我們最常見的破解手法就是硬性修改程序的機器碼,cracker拿到一個程序之後,通過ollydbg這樣的軟體來將驗證的邏輯修改掉,達到突破授權驗證的目的。不理解?好,我們來看看這一個小的邏輯:01:讀取名稱叫做zhuce.txt的文件
02:如果這個文件存在,跳到0403:提示用戶輸入註冊碼04:系統檢測輸入的註冊碼是否正確05:如果註冊碼不正確,跳到0806:註冊碼寫入到zhuce.txt文件裡面07:註冊碼驗證通過,啟用限制功能,本邏輯執行完畢
08:註冊碼校驗失敗,停用限制功能,本邏輯執行完畢
這就是一個典型的註冊碼驗證系統。如果我們要修改這個邏輯,我們應該怎麼改呢?
如果按照上面的說法,cracker們會修改第05行邏輯,改成下面的:05:如果註冊碼正確,跳到08
或者索性修改成
05:這是一行空指令,啥都不幹
這樣整個程序的邏輯就被修改了,也就達到了軟體破解的目的。
當然,cracker們也可以在04行下斷點,從堆棧中強行揪出cpu正在對比的註冊碼,從而拿到真正的註冊碼來進行註冊。這個簡單的原理,被大批量應用之後就成了我們目前看到的這一切。那麼,為什麼破解的軟體那麼多呢?
破解軟體好比寫代碼,刷github,挖web漏洞一樣,這是一種興趣。cracker們喜歡破掉軟體之後的那種成就感,所以,被破解的軟體日益增多。其實,我也是破解過軟體的,這種感覺我著實清楚。在cracker們看來,沒有什麼比破解掉一個軟體之後的成就感更為開心了。還記得我們當年剛剛寫出一個hello world程序,在屏幕上成功輸出第一句話時的心情嗎?「哇,我可以指揮電腦幹一件事呀!」同樣,對於cracker的心情也是一樣的:
「哇,我能夠用我的超能力來改變這一切呀!」因此,cracker總是樂此不疲的破軟體,一個個軟體接連被破,開發者看在眼裡,疼在心裡。當開發者知道了這一切的來龍去脈之後,開發者就會想辦法去阻止破解的行為,阻止的方法無非就是給破解的過程增加難度和干擾。
於是,殼誕生了。殼可以將一個程序給套在裡面,可以非常直觀的理解為一個程序的外殼。開發者加的外殼,一般都是一些保護殼,到目前為止還沒有發現為了防破解而給自己的軟體加單純的壓縮殼的。
保護殼的保護機理一般都是反調試器、反虛擬機、垃圾指令、代碼虛擬化(或者混淆)等,程序運行起來是沒有什麼太大問題的,但是讓一個cracker的逆向過程變得異常艱辛。但是加殼有了,相對應的脫殼也就會出現。由於殼的濫用,這引起了一些cracker大牛的注意。cracker大牛通過分析殼的運作機理,模擬殼的環境,通過隱藏調試器等方式躲過殼的反調試功能。畢竟能運行的東西總是理論可修改的,在大牛們的研究下,一個個脫殼機或者脫殼教程就這麼出現了。直到現在,加殼和脫殼之間的較量,仍然是那麼激烈……既然殼被脫了,開發者還是不甘心。於是想到了暗樁。
暗樁代碼,一般正常使用情況下是不會觸發的。它到底是什麼呢?它有可能是一小段自校驗代碼,在你修改了他的程序之後,程序發現自己被修改而自動退出。也可能是一小段警告代碼,給你來個小的框框,提示「XXX你個逗13別修改我的程序!」這類的東西。心懷惡意的開發者則是喜歡使用威力更大的東西,比如給你來個藍屏,格式化你的硬碟,給你加硬碟鎖(江民硬碟鎖是典型的例子),或者是潛伏一段時間,當你的程序使用一段時間後突然清空程序中的全部數據,讓你損失慘重。暗樁無疑是cracker們最頭疼的問題,當然有了暗樁,就有相應的去暗樁手段。cracker為了防止這類代碼的破壞,總是喜歡在虛擬機內搞這些東西,即便是不幸中招,也可以利用虛擬機的快照來實現時光倒流。而去暗樁的手段無非兩種,第一是摸清楚所有的暗樁,盡量不去觸發它;第二是和破解軟體一樣,硬性修改這些代碼。
就這樣,本地驗證逐漸的沒落了……
雲的時代正在崛起。有一些軟體,本身代碼是不全的,比如軟體下載下來就是一個試用版,相應的功能根本就沒有,當你購買了這個軟體之後會給你一個完整版的軟體。
這下可好,除非cracker去入侵開發者的伺服器,或者是共享自己的已付費版,否則是沒法破解這個軟體的。同樣的道理,有些軟體代碼也是不全的,但是和上面的方式有點不同——它依賴於網路來工作。一些數據的處理和計算,是在伺服器上進行的。比如圖片雲識別,當你購買了這個服務之後,你就可以在軟體上登錄你的賬號,然後將一張圖片通過這個軟體發到伺服器上去,伺服器驗證了你的授權信息有效之後進行識別,並將識別結果返還給你。而整個核心的過程沒有在你的軟體上實現,又談何破解?破解的方法一樣,除非cracker去入侵伺服器,否則沒有辦法破解的。但是,你會發現,無論是什麼樣的軟體,都是理論可破解的。即便是雲計算,cracker還有最後一招,入侵伺服器。
也就是說,破解軟體不是不可能,而是一個時間問題和價值問題。假設一個付費軟體做的非常贊,破解它要花費一年多的時間,而作者的定價僅僅是1元就可以終身免費,那麼誰還會花那麼多時間去破解這個軟體呢?
所以說,話歸到底,每個軟體都是理論可破解的,破解它只是一個時間和價值問題。以下複製自「為什麼即使世界最知名的軟體程序,也無法阻止被人破解的命運?」 - shotgun http://www.zhihu.com/question/27448355/answer/36735119
破解和反破解是技術對抗,核心問題是成本和收益。在PC架構上,由於所有的代碼都要送到CPU去執行,所以除了在線防破解之外,離線程序從「理論」上來說都是可以破解的,但實際操作中有難易之分,也有值不值得的區別。
先說破解者,破解軟體無非是為了名或者利,如果一個軟體難度太大,而且破解後帶來的名利收入不足,破解帶來的法律風險太高,那自然沒有人有動力去做破解。某些專業軟體就是如此,因為用戶使用量太少,而最終用戶是用來生產的,往往出於軟體穩定性、法律等原因不會考慮購買盜版,所以沒有破解者。
再說軟體開發者,高級防破解技術是需要付出代價的:性能、穩定性、可擴充性、易用性、易讀性都會受到影響,如果採用高級技術帶來的好處沒有遠大於採用法律手段,那麼這些技術就不會被採用。歐美版權保護比較充分,因此很多軟體都是採用Paper license,也就是純用法律來控制。
此外,在互聯網免費思維的今天,個人軟體易破解本來也是一種潛在的營銷手段,某軟中國最喜歡跟是用盜版的用戶談正版化,每次10%,小刀子割肉。
再多說句,在線防破解也不是堅不可摧的,伺服器被入侵(索尼罪大惡極,民不聊生:),或者密碼演算法被破解,或者大客戶Key泄露,都可以導致防破解手段無效。
@潘安仁 所提到的安全軟體不容易破解,那是因為,這是人家的臉面,當然要護好不被你打了,而且萬一被病毒破解,那就不是盜版影響收入的問題了。但是代價也是很大的,殺病毒軟體越來越消耗資源。
說個笑話,有一次某個客戶自己開發了一套軟體,還買了一個防破解插件,請我們測試破解難度,某K姓大牛用了三天,然後很鬱悶的說:「還挺難搞的,花了三天」。我一看,破錯了,把人家防破解插件給破了......創建於 2015-01-08是的,破解只有難度大小問題,只有值不值的問題,幾乎所有程序都可以被破解。
現在唯一防破解比較成功的方式是聯網運行,而且不是簡單的聯網驗證。
而是要將關鍵運算放到伺服器上進行,才會比較有效。(是的,我說的就是網路遊戲。)任何單機軟體,只要有價值,就幾乎很快就會被破解。
特別是像Windows,Office,PS,這種有用有很貴的軟體。又或者你是專用硬體運行,如PS3或者是Wii,那麼破解難度可能稍大一些,不過也就是稍大而已。為什麼會被破解,因為軟體發布後其防守方式就已經固定了,而破解者卻是具有無窮可能性的人。一個固定的防守套路,怎麼可能防得過千變萬化的攻擊呢?弄得破解太複雜,破解後不能保證使用的話,盜版用戶就會少很多無損破解也是用戶體驗,盜版用戶也是潛在客戶
沒有破解前,驗證註冊碼的代碼基本上是這樣:
如果 (輸入的註冊碼 等於 正確的註冊碼)
{
開始運行程序;
}
否則
{
註冊碼錯誤!
}
如果 (輸入的註冊碼 不等於 正確的註冊碼)
{
開始運行程序;
}
否則
{
註冊碼錯誤!
}
這本書我看了一半了,裡面對軟體保護的各種方案做了較為全面的論述,很多技術我也是第一次學習到。
結論是:是的,以目前的技術條件,只要足夠長的時間和足夠多的金錢投入,所有軟體或者程序都會被別人破解。即使這些程序是運行在特定的CPU和操作系統上的(PS3);或者這些程序是需要訪問晶元內部一個特殊的邏輯電路的(例如加密狗),而這個邏輯電路表面又是請化學家用特殊材料處理過的(通信領域);又或者這個程序處理的數據是經過特殊感測器獲取的。在這樣的條件下,程序都曾經有過被破解了例子。我這裡說以目前的技術條件,是因為量子通信技術的發展還有很長的路要走,目前不敢妄加評論。
這裡說,足夠長的時間和足夠多的金錢投入,指的是別人如果破解你的程序需要極高的成本,例如上面舉例的材料的例子,那別人可能會放棄,乾脆自己另起爐灶實現一個功能相同的吧。
所以,現在趨勢是 雲服務化
簡單的說,服務和計算核心放在雲上,下端軟體只是採集,和展示。
最簡單的是 ,微信那裡來的盜版?比如說,原來本地化的商品零售管理,在線下只做售賣系統,查詢,統計報表均做上端。這樣剩下的就是只能抄,不能盜咯
或者說,盜版的成本變高。1、如果你能拿到軟體的所有數據(不管加不加密)那理論上都是可破解的,區別在於你破解的成本和人家更新的速度關係,你花一年破解,人家半年換個授權演算法,就沒破解意義,如果你拿到的軟體是demo或者本身沒有授權程序(或者功能數據)的數據(代碼),就只有部分破解可能了,2、不是說開發不出高強度的授權方案,開發團隊也要評估自己註冊授權的成本,加密狗強度夠高,買軟體帶個小硬體不一定有人願意買了,自己製作起來也麻煩。說白了就是一個成本的平衡。希望能解答你的問題哈
開源+買服務,這個問題,事實上可以用熱力學定律的一些問題解決,,(有空回答完整,正在忙於對付考試)
對的 所有軟體都可以破解 時間問題和值不值的問題 破解與反破解基本和矛與盾關係差不多吧...軟體開發者如果加密過於複雜 可能會影響程序運行效率 體積過大 兼容性不好等問題 畢竟 你要加殼加密也得往上碼代碼不是么?要是購買其他加密插件不是還得花錢么?這不都是成本么?能做的事情也就是增加點破解難度好了 提高一下破解門檻 把像我這樣的入門者攔在門外就是了
推薦閱讀:
※有哪些適合 Surface Pro 4 使用的,不能錯過的好軟體?
※常用的導航/路徑規劃軟體都用到哪些演算法?
※軟體安裝在系統盤和非系統盤有什麼區別?
※如何配置startlsback?就是那款可以讓任務欄全透明的軟體
※Windows Media Player 為什麼這麼弱?