轉自:http://www.guokr.com/blog/48489/算法
==============================鄭重聲明============================
本文旨在讓你們正確理解「逆向工程」、「反彙編」等概念和過程,切記不可有違法行爲!
=========================聲明完畢,接正文==========================編程
除了自由及開源軟件外,對於網上出現的全部的所謂「綠色版」、「破解版」、「漢化版」軟件,不論從破解方、提供方或者下載方來講,都構成侵權等違法行爲,也就是咱們常說的「盜版」。那麼有沒有人考慮過這些軟件是如何被破解掉的呢?安全
看過電影《變形金剛》的朋友必定還記得下面這個場景(圖)吧,美國之因此擁有這麼多高級的技術原來是經過對威震天進行的逆向工程開發而習得的!這固然是導演杜撰出來的。但「逆向工程」這個技術的確存在。編程語言
逆 向工程的定義爲:經過對某種產品的結構、功能、運做進行分析、分解、研究後,製做出功能相近,但又不徹底同樣的產品過程。「某種產品」能夠爲電子器件、生 化用品、醫藥食品、紡織衣物、機械產品等等。二戰和冷戰期間,逆向工程還被用來對敵對勢力的軍事武器進行分析和信息竊取。對於程序軟件的逆向工程開發,俗 稱「破解」。函數
軟件的破解主要有如下兩種方法:學習
1.暴力破解加密
顧名思義,就是經過暴力破壞程序結構來達到對程序、軟件自由使用的目的。這種方法由於技術含量不高而可能會被大多數黑客和破解高手所不齒,但它卻每每是最有效率的一種方法。其破解思路主要以下:調試
通常不少註冊版軟件在你第一次啓動它們的時候都會彈出「請輸入註冊碼(激活碼)」之類的對話框,或者是「您的剩餘使用天數爲XX」之類的警示窗口。這些軟件的邏輯是這樣的:只有輸入正確的註冊碼才能正常或在期限到後繼續使用該軟件。而暴力破解所要解決的問題就是要改變軟件判斷的這一邏輯,改爲:只有輸入錯誤的(或者根本不輸入)註冊碼才能正常或在期限到後繼續使用該軟件。簡單吧?直接吧?暴力吧?固然,這只是思路,哪一個程序會讓你隨隨便便改變它的運行邏輯的?這時就須要一些必要的技術了。對象
第 一步,查看軟件信息。咱們必須先知道這個軟件是用什麼語言(好比是結構化語言仍是面嚮對象語言)寫出來的,纔好判斷它的語句結構和邏輯。以後要找到這個軟 件的運行入口點。不少軟件爲了在入口點處迷惑破解者,會加入一些「殼」和「花指令」——能夠簡單理解爲就是一段無用代碼或加密方法,會讓人在裏面轉圈圈或 找不到所需信息。這時就須要所謂的「脫殼技術」並正確識別程序入口點。
可以使用軟件:PEiD 0.95blog
第二步,反彙編分析。咱們知道,C、PASCAL等編程語言在通過編譯處理後會被轉成機器語言再被計算機執行。反彙編就是把機器語言反編譯成彙編語言的過程。有兩種反彙編方法:靜態的和動態的。靜態方法就是不調試程序,直接查看軟件的反彙編代碼;動態則須要調試程序。
可以使用軟件:C32Asm、IDA Pro、OllyDbg
第 三步,破解。不少時候,像「請輸入註冊碼(激活碼)」之類的字符串就是包含在程序代碼裏的,咱們只要找到這段字符串,分析其先後文代碼語句邏輯便可。對於 不含有字符串的,能夠查找代碼中有無"MessageBox」(底層API函數,用來彈出對話框)。若是程序邏輯結構簡單則無需動態調試,直接在靜態環境 下修改代碼便可,若是狀況複雜,須要在上述語句(字符串、MessageBox)處設置斷點以供動態調試。找到判斷註冊碼是否爲正確的那條反彙編語句。匯 編語言的邏輯判斷通常是經過跳轉語句來實現的。若是正確則繼續執行代碼段,錯誤則跳入錯誤提示段。這時咱們只須要把「跳」改爲「不跳」便可。對於稍微複雜 些的狀況,咱們也只要根據代碼邏輯,找到正確的代碼執行段便可。修改好代碼保存退出再從新啓動程序,隨便輸入一個錯誤的註冊碼,若是破解成功,這時就會彈 出「恭喜您註冊成功」之類的消息框了。
可以使用軟件:(同上)
2.算法破解
這是真正的逆向工程。網上涌現的各類「註冊機」就是利用這種方法產生的。它與暴力破解大體步驟相同,不一樣之處就在於它不破壞程序代碼,而是經過分析輸入註冊碼後判斷時的反彙編語句代碼,找出算法,從而找到正確的註冊碼。這須要有很強大的反彙編能力和彙編語言知識。
寫 了這麼多,不是想教你們學壞,只是以爲學習具備攻防性質的一些技術,確定是先要知道如何「攻」,才能真正理解如何「防」。而本文僅僅是介紹了逆向工程在軟 件破解應用中的一丁點兒皮毛、雕蟲小技而已。有對計算機和信息安全感興趣的朋友能夠動手嘗試一下,會體會和學習到的更多,但不管成功失敗與否切記都不要把 你破解過的程序傳播出去,這但是違法行爲哦!
更多內容能夠度娘「看雪」(國內作軟件逆向工程分析最爲出色的一個論壇)和維基本文各相關關鍵詞。
另 外,關於軟件加密,你們須要認清的真相是,不可能被破解的密碼術目前是不存在的(最簡單的請參考密碼詞典暴力破解)。如今比較優秀的軟件加密技術都是在延 長破解所需時間或增長破解所需成本上下功夫。好比一個軟件上市後,破解者花了一年時間終於破解掉了密碼,而這個軟件早在半年前就更新換代了,已經沒人用或 者系統已經不支持舊版了。或者一個軟件成本價是100元,而破解者要破解這個軟件所需的成本是500元乃至1000元,那就得不償失了。這是密碼術比較現 實的意義。