軟體為何總能被破解?
軟體為何總能被破解?那些大企業能開發很厲害的軟體,難道不能找到一種方式防止破解嗎?
軟體的加解密從dos時代就已存在(其實在沒有win的時候依舊有人搞),並非是windows時代的產物。
05、06年之前,軟體使用網路驗證的不多,大多是本地驗證,又分為以下幾種大類:
1.單純的通過演算法判斷註冊碼是否正確
2.註冊表驗證
3.重啟驗證(dll、reg、keyfile)
接下來的幾年,又逢acp、asp、穿山甲等曾經的強殼與採用虛擬化保護為主流的殼(如VMP、TMD)的交替時代,至此迎來了殼保護的時代。
再之後,到了09年左右,興起了大範圍的網路驗證,從最初的發包形式到現在的雲端驗證諸如此類一直沿用至今。
與此同時,因為很多人的水平不是很好,而殼開始提供授權功能,很多人又喜歡上了殼授權。
最終,到了現在虛擬化泛濫的時代。為什麼說是虛擬化泛濫呢?現在可以看到諸多軟體作者哪怕是不懂vm,也可以用過殼的方式,進行加密,大大的提高了自己軟體的強度,而且不必考慮自己水平問題。
-----------------------------------------------------------------------------------------------------------------------------------------
ps:不過哪怕是用了vm,也只能說擋住大部分人,對於剩下的那部分人來說,vm只是繁瑣些,時間問題而已。套用樓上的話「只要你軟體的本身價值大於破解的價值,你才會相對安全些」
1.商業軟體對外只放出Demo版本
2.功能性代碼放到雲端,客戶端僅開介面提供調用。
3.盡量的分散開使用返回數據校驗
4.選擇一個你用的最順手的殼。(註:強殼如果你不會用,和一般的殼什麼區別。)
5.功能性代碼全部虛擬化。(對於編程語言最好和殼的vm功能相匹配,例如:vmp的vm引擎很好,但是也只能對delphi的程序做到不留頭尾的虛擬化。)
6.大量使用sdk嵌套。
7.如果你的軟體真的有價值,建議開發成x64。(國內近年興起的速成破解小子基本不懂64位調試)
8.自身一定要學習逆向。
因為軟體最終是運行在用戶的電腦上的,所以理論上來講,用戶對軟體如何運行,有絕對的控制權。因此,只要有人付出了足夠的努力,就一定能夠破解。
就好比,你告訴別人一個秘密,然後讓他保證不要告訴別人——這太可笑了。
比喻來說的話,每個存在你的電腦上的軟體就像是一本用某種奇怪的外語寫的超級長的教程,這份教程的作用是告訴你的電腦應該做些什麼事、怎麼做。
雖然是用奇怪的外語寫的,而且非常非常長(那些大型軟體可以想像成有幾十億甚至幾百億頁),但畢竟是一本在你電腦上的書,你能查閱你也能篡改。對普通人來說可能太過於龐大和複雜而且讀不懂,但是對於具有相關知識的人是可以找到特定的部分、篡改之,來實現改變軟體功能的目的的。
由於截至目前軟體還是必須要在本地運行的,所以說到底,軟體破解面對的壁壘僅僅是複雜度,不存在得不到全本書的困難。即便是需要聯網驗證,甚至需要聯網下載代碼、內容的軟體,最終這些代碼還是會存在本地的,因為不在本地就不能運行。
至於破解過程,基本上說就是專業人員花一些時間找到在哪裡修改,然後嘗試理解這些關鍵部分都做了什麼,最後做出繞過驗證的修改。有時候他們只要讀懂軟體序列號是如何驗證的,然後自己寫這麼一本書來生成可以通過驗證的序列號。有時候他們乾脆整個去掉這本書里關於驗證的章節。所有那些聯網驗證、加密驗證的破解也只是複雜一些,需要替換較多處驗證點而且還需要破解加密,且加密往往比較複雜。但不等於不能破解。
所以此處反對一些答案說存在不可破解的軟體。只要軟體還是需要在本地運行的,你就總能獲得這本書的所有內容。即便用加密獨立硬體存儲部分關鍵代碼,這部分代碼也是可能被攻破的,畢竟它們還是在你的電腦上,只是存在另外的地方有一些保護而已。這些保護本身其實是脆弱的,因為非關鍵代碼還是要訪問這些代碼的,所以訪問的方法就會被破解者知道。
我能想到唯一理論上可能無法破解的軟體模式就是將關鍵代碼放在某種特殊設備內運行,且這個設備通過獨立的加密網路連接中心服務來獲得代碼,只對軟體的其他部分開放輸入參數和輸出結果。但即便這樣做,還是存在被破解的可能。
順便說到這個可以去說Intel的可信計算平台(Intel? Trusted Execution Technology)。這是目前民用的唯一一種接近於阻止破解的平台,原理是通過完全驗證的執行鏈來防止被篡改的軟體被執行。但是,這種方法仍然不能阻止破解者通過系統外的方法來繞過驗證,例如偽造可驗證的序列號,偽造驗證伺服器等。世界上沒有絕對的防禦,核掩體也有辦法炸穿。
只要你能讓破解的代價大於破解的利益,你的軟體就安全了。
一個很牛逼的大學老師的個性簽名是:
If it runs, it can be cracked.你永遠無法防禦來自未來的攻擊。
如果是保密需求的話,可以保證你在幾年之內無法拿到明文。
但是隨著科技發展,總有一天會破解的是吧。首先:通過網路認證的軟體原理上不能破解,例如」星際爭霸2「。
針對本機運行的程序:
由於軟體最終是編譯成機器碼運行的,所以作為普通用戶原理上是可以看到軟體運行的任何一步的。
所以,只要有能力,原則上就可以破解,也就是開發者設計一個很高的門檻,但是再高也只是個門檻,高度是有限的。
但是通過網路認證的軟體,伺服器可以隨時修改演算法,也就是就算被破解,隨時和以設計新的門檻。另外通過網路也可以讓用戶看不到部分重要的流程。
最後說一下破解這麼不合理為什麼不能解決?
原因是用戶使用的電腦的內部結構和開發者相同,開發者有的用戶也有。
這個開鎖是一樣的,只有通過法律規定例如「非認證人員不得在公共場所攜帶開鎖工具」才能解決。
因為作為一個公民,任何人都對開鎖的技能有學習的潛在能力。
再來說一下銀行卡、身份證為什麼不容易破解?
首先銀行卡很容易破解,主要原因是這是嚴重的犯罪行為。
身份證不容易破解:
第一個也是首要原因是使用非常見協議,解密演算法由國家安全部門和相應的公司的契約關係保障其不被泄漏。(關於這個有究竟有多穩固參看斯諾登時間就知道這實際上更脆弱。)
第二個原因是這是嚴重的犯罪行為。
也就是破解這種行為只能通過各種契約來限制,其中包括法律和公司以及個人之間的契約。
另一種解決辦法就是進入「後互聯網時代」,因為所有數據都互通互聯,破解自然不可能,但是依然有很多時候不能連接互聯網,所以契約還是起的主要作用。
最後再來談一種趨勢:反互聯網的趨勢。
有上述討論可以得出,互聯網正在逐漸取代傳統契約和門檻的作用。
於是傳統契約和門檻和互聯網一樣也是會有膨脹的趨勢的,例如硬體廠商可能和軟體廠商甚至是影音行業合作,提高門檻,就在相應領域擺脫了對互聯網的依賴。
而我猜測這種現象最終會越來越少,因為我對互聯網抱有樂觀態度。
下面再來談一下嵌入式產品的抄襲:
做產品不怕被處女以外的人抄了:LGT 88A 使用狀態機加密,無法破解! (amoBBS 阿莫電子論壇)
可以看出就算是使用「專門」辦法把程序寫入「專門」的晶元里,其他人也會有相應工具逆向獲取到源程序。
另有一種常見的反破解的方法就是「同歸於盡」將晶元鎖死,通過專門的方法熔斷特定的引線使得晶元內容永遠不能更改也無法讀出。
關於硬體我也不是非常清楚,只是了解一點,但是可以發現在各行各業這個問題是很普遍的。
沒有絕對的加密只有相對的加密,在成本和條件以及技術允許的前提盡量加密,就是這樣。
另外其他回答者說的各種演算法能工作的前提是:用戶不是擁有完全所有權的,也就是有一部分數據是通過網路或者其他途徑(例如不容易破解的加密狗)提供的。例如銀行都是聯網的。
可以再考慮:貨幣為什麼不容易偽造?
因為國家一般掌握比較高端的製造技術,相應的機密不外泄,一旦外泄,貨幣還是可以偽造的。
那麼比特幣能偽造嗎?在掌握50%以上算力的之前是不能的,而比特幣就是由互聯網得到的產物。
將兩者比較異同就知道了軟體為什麼總是能破解以及如何防止破解了。
工業革命之前:
一般大部分財產由組織保護,組織由政權保護。
工業革命後大量出現了個人權利:
財產由個人權利保障,個人權利由(該國家的)社會契約保障。
經過電氣革命以及世界大戰的洗禮後,世界一體化等等的出現之後:
這部分我還沒有完全思考清楚,但是明顯是比上一個階段高級的。
最後再梳理一下互聯網出現之前:
軟體產權和硬體產權一般由個人產權保護,個人產權依靠契約維護。
軟體產權自身出現了可以自己維護自己利益的情況。
這是一個全新的領域。
微軟都看通了,不信看win8的metro程序,混淆?加密?對不起,木有啊!
能夠在感染的一瞬間殺死宿主的病毒同樣會瞬間滅絕。
而軟體更麻煩,反盜版一直是一個損傷正版用戶利益,來強迫一些人成為正版的做法。
理論上可以做一個極難破解的軟體,而它同時會阻止正版用戶購買它,嚴重時會出現消費者搞絕對不買之類的運動。全面防守 與 定點突破 哪個更容易? 軟體的安全也符合木桶理論. 破解者只需找到你最短的一塊就可以了.
BUG是沒完沒了的
因為有很大的市場需要,以需要為目標導向,所以很多人破解
不是所有的吧,遊戲軟體也是軟體,但是時刻聯網驗證的壓根沒法破解,一些應用類軟體好破解,是不能一直保持最新
基本上應用軟體都使用系統提供的API,只要你對一套cpu的彙編語言足夠了解,把每個API產生的二進位碼都翻譯出來,你基本上就贏了
軟體使用量和創造的成本決定了它是否值得破解,有需求就會有破解,軟體開發商應該更多的關注軟體不被破解還是提高銷售量上需要做一個權衡,盜版軟體是不是幫助軟體提供商佔據了一定的市場份額?雖然沒有拿到錢但是提高了使用量?
不太懂,感覺:
首先,肯定存在軟體破解不了,我們實驗室用的德國人開發的遙感影像分析軟體,至今未見網上有破解,因為軟體跟硬體綁定,也可能是軟體使用者少導致。
核心的,一款軟體開發出來是為了實現功能,而不是防止破解。為了完全防止破解可能會花費比開發軟體功能本身更多的時間物力人力財力,本末倒置了。
再者,能破解不是什麼壞事,軟體可以普及開來供人下載學習研究,也就是打開市場了,花錢買的人也就多了。
首先軟體並不是都能破解的。
比如銀行的電腦端(使用動態密碼,對就是RSA的)目前就無法破解。
比如UNIX LINUX的軟體也比較難破解。
容易破解的是常用小軟體(運行在win系統下的)原因是用戶數量大(參與破解的人多)win系統設計的固有缺陷(許可權管理較簡單)
調試工具多,應用軟體的執行層級遠低於編譯軟體執行層級。可以用softIEC 等軟體動態反編譯為彙編代碼,找到加密模塊和彙編代碼,通過分析代碼反推出加密原理。寫出破解補丁包。
有本好書 段鋼寫的 《加密與解密1》 《加密與解密2》
所以,綜上所述。不是軟體總能被破解。推薦閱讀:
※電腦為什麼不能像電視機一樣即開即用呢?
※眼睛距顯示器的最適合高度是多少?
※Windows 7 電腦無法開機,因為有三個系統文件(exe可執行文件)被360安全衛士(小紅傘也報毒了)錯當木馬殺掉(文件名不記得了),怎麼辦?
※電腦文件多了,如何管理?
※6000以內的筆記本,做設計和修圖用,有什麼推薦?