首先,我們來看一下破解版本是如何生成的。

使用調(diào)試器創(chuàng)建軟件的崩潰版本。

(調(diào)試器是一種特殊類型的軟件,它允許程序員將軟件分解成不同的組成部分,以便發(fā)現(xiàn)錯誤,從而消除錯誤。 此外,調(diào)試器可以用于逆向工程,或者查看軟件內(nèi)部的內(nèi)容,以了解其邏輯。 后一種方法主要被惡意軟件研究人員用來研究惡意軟件(或計(jì)算機(jī)病毒)的內(nèi)部。 但是它也可以被攻擊者用來“破解”(或者繞過)合法的軟件注冊,或者有時候用來改變軟件的正常行為,例如向其中注入惡意代碼。)

對于這個示例,假設(shè)正在被“破解”的軟件被編譯成本機(jī)代碼,而不是基于 .NET 或 JavaScript 的應(yīng)用程序。 (否則查看它的源代碼就顯得有些瑣碎了。) 編譯后的本機(jī)代碼要研究起來有點(diǎn)棘手。 (本機(jī)意味著代碼直接由 CPU、 GPU 或其他硬件執(zhí)行。)

因此,讓我們假設(shè)攻擊者的目標(biāo)是繞過軟件中的注冊邏輯,這樣他就不必為此付費(fèi)。

為了簡單起見,讓我們假設(shè)檢查軟件注冊的原始邏輯是用 c + + 編寫的,類似于下面的代碼片段:

在本代碼示例中,“ RegistrationName”和“ RegistrationCode”是合法軟件用戶在付費(fèi)購買許可證后將收到的特殊文本字符串。 (名字通常是那個人的真實(shí)姓名或者他的電子郵件地址,代碼是一些與名字相關(guān)的特殊字符串。)

在上面的邏輯中,名為“ isRegistrationCodeGood ()”的函數(shù)將檢查“ RegistrationName”和“ RegistrationCode”是否被某些專有方法接受。 如果是的話,它將返回 true。 否則就是錯誤的。 該外部代碼將指定執(zhí)行將遵循的分支(或范圍)。

因此,上面的邏輯要么顯示注冊失敗或退出:

或者,如果注冊代碼和名稱匹配,它將使用名為“ rememberRegistrationParameters ()”的功能將注冊詳細(xì)信息保存在持久存儲中(如文件系統(tǒng)或系統(tǒng)注冊中心) ,然后顯示感謝用戶注冊的消息:

“破解者”顯然希望為他輸入的任何注冊代碼獲得第二個結(jié)果。 但是他們有一個問題。 他們沒有 c++ 源代碼。

因此,攻擊者唯一的辦法就是反匯編二進(jìn)制代碼(總是以 .exe 和 .dll 文件,并且大部分是 Unix 可執(zhí)行文件的應(yīng)用程序包) 然后,攻擊者將使用調(diào)試器來研究二進(jìn)制代碼,并試圖找到我上面提到的注冊邏輯。

接下來,您可以看到我在 c + + 中展示的代碼片段的流程圖,該代碼片段是通過低級調(diào)試器提供的。 或者,代碼在編譯后將以二進(jìn)制形式讀取:

(為了可讀性,我在右邊添加了帶有函數(shù)和變量名的注釋。 它們不會出現(xiàn)在攻擊者可以看到的代碼中。)

(要理解上面顯示的內(nèi)容,攻擊者必須對本機(jī)代碼的匯編語言指令有很好的了解。)

我還需要指出,對于攻擊者來說,擁有上面這樣的反匯編代碼片段是最終的結(jié)果。 對他來說,主要的困難是如何在數(shù)以百萬計(jì)的其他類似代碼行中找到它。 這就是他們面臨的主要挑戰(zhàn)。 沒有多少人能做到這一點(diǎn),這就是為什么軟件“破解”是一種特殊技能。


因此,在軟件二進(jìn)制文件中找到上面的代碼片段之后,“黑客”有兩個選擇:

1)修改(或修補(bǔ))二進(jìn)制文件。

2)對“ isRegistrationCodeGood ()”函數(shù)進(jìn)行逆向工程,并復(fù)制其邏輯以創(chuàng)建所謂的“ KeyGen”或“ Key Generator”

讓我們回顧一下:

第一個選擇很簡單。 因?yàn)楣粽咭呀?jīng)到了這一步,所以他對 Intel x64指令集非常了解。 因此,他們只需將地址00007FF645671418(在屏幕截圖中用紅色圈出)的“ jnz short loc 7ff645671430”的條件跳轉(zhuǎn)為無條件跳轉(zhuǎn),或“ jmp short loc 7ff645671430”。 這將有效地刪除任何失敗的注冊代碼條目,任何用戶類型將被接受為一個有效的注冊。

還要注意,這種修改可以通過將二進(jìn)制代碼中的一個字節(jié)從0x75改為0xEB 來實(shí)現(xiàn):

但是這種方法帶來了修改原始二進(jìn)制文件的“代價(jià)”。 為此,攻擊者需要編寫他自己的“修補(bǔ)程序”(或者一個小的可執(zhí)行程序,它將應(yīng)用我上面描述的修改) 對于攻擊者來說,這種方法的缺點(diǎn)是修補(bǔ)原始可執(zhí)行文件會破壞其數(shù)字簽名,這可能會警告終端用戶或供應(yīng)商。 此外,攻擊者制造的“修補(bǔ)程序”可以很容易地被終端用戶的防病毒軟件標(biāo)記和阻止,或者引導(dǎo)犯罪調(diào)查人員找到攻擊者的身份。

第二個選擇有點(diǎn)棘手。 攻擊者必須研究“ isRegistrationCodeGood ()”功能,然后將其復(fù)制到自己的小程序中,這個程序可以有效地復(fù)制原始軟件中實(shí)現(xiàn)的邏輯,并讓他根據(jù)任何名稱生成注冊代碼,從而使該軟件的任何肆無忌憚的用戶無需支付費(fèi)用即可注冊該軟件。

許多主要軟件產(chǎn)品的供應(yīng)商了解第二種方法的潛在影響,并試圖通過要求所謂的“身份驗(yàn)證”來防止這種影響。這基本上是注冊后的第二步,軟件向公司的網(wǎng)絡(luò)服務(wù)器提交注冊名稱,該服務(wù)器返回對軟件的響應(yīng),判斷代碼是否合法。 這是微軟在購買 Windows (他們稱之為“激活 Windows”)時做的,也是 Adobe 和許多其他公司做的。 第二步可以在軟件運(yùn)行時在幕后進(jìn)行,如果是非法獲得的,通常會導(dǎo)致先前的注冊被取消。


現(xiàn)在你知道軟件是如何“破解”的了。

現(xiàn)在來回答為什么不可能防止它。 歸根結(jié)底,任何軟件代碼都需要由 CPU (如果是二進(jìn)制本機(jī)代碼)或由解釋器或 JIT 編譯器(如果是 JavaScript 或 Net 代碼) 這意味著,如果有一種方法可以閱讀 / 解釋某些內(nèi)容,不管它有多么復(fù)雜或令人費(fèi)解,具有足夠知識和持久性的攻擊者也能夠閱讀它,從而破解它。

有一種觀點(diǎn)認(rèn)為基于云的軟件更安全,這是事實(shí),因?yàn)樗?二進(jìn)制)代碼保留在服務(wù)器上,最終用戶不能直接訪問它。 盡管基于云的軟件無疑是未來的發(fā)展方向,但它也有一些主要的缺點(diǎn),這些缺點(diǎn)使得它永遠(yuǎn)無法完全取代傳統(tǒng)的軟件。 舉幾個例子:

  • 不是每個人都有互聯(lián)網(wǎng)連接,或者愿意上傳他們的數(shù)據(jù)。 此外,某人的互聯(lián)網(wǎng)連接可能非常昂貴或過于緩慢,使軟件運(yùn)行差.
  • 那么就有一個問題了,分布式計(jì)算.。例如,由于為每個玩家渲染每一個場景需要大量的計(jì)算資源,暴雪娛樂公司永遠(yuǎn)不可能在他們的服務(wù)器上完全運(yùn)行魔獸世界。 因此,讓每個用戶的計(jì)算機(jī)代替進(jìn)行渲染是符合他們最大利益的

作為一個軟件開發(fā)者,我顯然不喜歡有人盜用軟件許可證。 但是不得不接受它。 好消息是,沒有多少人愿意付出更多努力去尋找一個破解版本的軟件。 對于那些下載了修補(bǔ)程序的人來說,主要的問題是,通過下載修補(bǔ)程序、攻擊者的 KeyGen 或 Patcher,他們實(shí)際上是在“信任”攻擊者,不會在其中放入任何不是“在軟件包上做廣告”的“討厭的”東西(比如木馬、惡意軟件或鍵盤記錄器) 所以對于這些人來說,問題就變成了——用軟件許可證來潛在地感染你的系統(tǒng),這值得嗎?

另一邊,一些開發(fā)人員對任何試圖竊取他們的軟件許可證的行為反應(yīng)大。 他們試圖實(shí)現(xiàn)各種各樣的對策——從欺騙反向工程師,到在代碼中添加陷阱(如果代碼檢測到代碼正在被調(diào)試,可能會做一些討厭的事情) ,到模糊處理或擾亂代碼,到實(shí)施各種復(fù)雜的 DRM 方案,再到阻止來自某些國家的用戶。 我個人盡量避開所有這些措施。 原因如下:

A)任何類型的反逆向工程策略都可以被具有足夠持久性的攻擊者繞過。 那么,既然我可以投入時間為我的軟件添加一些有用的東西,使其對合法用戶更有效率,為什么還要浪費(fèi)我的時間呢?

B) 一些代碼包可能會用防病毒軟件,這顯然不利于該軟件的市場營銷。 它還為開發(fā)人員調(diào)試軟件制造了不必要的復(fù)雜性。

C) 在代碼中添加陷阱也會對你的合法用戶造成“誤射” ,這真的會激怒他們,甚至可能導(dǎo)致法律訴訟。

D) 任何數(shù)字版權(quán)保護(hù)計(jì)劃都可能捕獲100個非法用戶,給10,000個合法用戶帶來極大的不便。 那么為什么要這樣對待你的好客戶呢?

E) 我們的統(tǒng)計(jì)數(shù)據(jù)顯示,大約75% 的非法許可證來自中國、俄羅斯、巴西等國家,這些國家的違法行為最為嚴(yán)重。 然而,對我們來說最主要的問題是,如果我們強(qiáng)制執(zhí)行數(shù)字版權(quán)管理或者增加一些強(qiáng)大的注冊認(rèn)證,許多想要繞過我們的注冊的人只會使用一個被盜的信用卡號碼。 我們無法控制它。 我們的系統(tǒng)將使用它發(fā)送給他們一個合法的許可證。 因此,我們將失去為許可證支付的錢,加上信用卡公司將征收額外的扣款費(fèi)用到我們的帳戶,這可能范圍從0.25美元到20美元,除了許可證成本。

F) 正如在評論中指出的,有些公司實(shí)際上可能從允許盜版他們的軟件中獲益。 例如,微軟從使用 Windows 操作系統(tǒng)的用戶那里獲得了大量的免費(fèi)宣傳,Adobe 的 Photoshop 也是如此。 我同意這個觀點(diǎn)。


所以我現(xiàn)在的哲學(xué)是---- 如果有人想更進(jìn)一步,偷走我們的軟件,那就去做吧! 不管怎樣,他們做到了這一步,所以他們可能有一個很好的理由。 從積極的一面來看,還有很多其他客戶欣賞開發(fā)軟件的工作,這些工作遠(yuǎn)遠(yuǎn)超過了那些沒有開發(fā)軟件的客戶。

【翻譯自】

1.《關(guān)于怎么下載ps破解版,你需要知道這些為什么開發(fā)者不阻止破解版的產(chǎn)生?》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《關(guān)于怎么下載ps破解版,你需要知道這些為什么開發(fā)者不阻止破解版的產(chǎn)生?》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實(shí),對其原創(chuàng)性、真實(shí)性、完整性、及時性不作任何保證。

3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/gl/3028422.html