- C++反匯編與逆向分析技術揭秘(第2版)
- 錢林松 張延清
- 2569字
- 2021-09-27 17:05:06
前言
為什么要寫這本書
“時下的IDE很多都是極其優秀的,拜其所賜,職場上的程序員多出十幾倍,但是又有多少人能理解程序內部的機制呢?”
——侯捷[1]
隨著軟件技術的發展及其在各個領域的廣泛應用,對軟件進行逆向分析,通過閱讀其反匯編代碼推斷數據結構、體系結構和程序設計思路的需求越來越多。逆向分析技術能幫助我們更好地研究和學習先進的軟件技術,特別是當我們非常想知道某個軟件的某些功能是如何實現的而手頭又沒有合適的資料時。
如果能夠利用逆向技術去研究一些一流軟件的設計思想和實現方法,那么我們的軟件技術水平將會得到極大的提升。目前,國內關于逆向分析技術的資料實在不多,大中專院校的計算機相關專業對此技術也沒有足夠的重視。
有很多人認為研究程序的內部原理會破壞“黑盒子”的封裝性,但是如果我們只是在別人搭建好的平臺上做開發,那么始終只能使用別人提供的未開源的SDK,會一直受牽制。如果我們能夠充分掌握逆向分析方法,就可以洞悉各種SDK的實現原理,學習各種一流軟件采用的先進技術,取長補短,為我所用。若能如此,實為我國軟件產業之幸。
我當初學習逆向技術時完全靠自學,且不說這方面的書籍,就連相關的文檔和資料也極度匱乏。在這種條件下,雖然很努力地鉆研,但學習進度非常緩慢,花費幾天幾夜分析一個軟件的關鍵算法是常有的事。如果當初能有一本全面講解反匯編與逆向分析技術的書,我不僅能節省很多時間和精力,還能少走很多彎路。因為有了這段經歷,我斗膽爭先,決定將自己多年來在反匯編與逆向分析技術領域的經驗和心得整理出來與大家分享,希望更多的開發人員在掌握這項技術后能更好地將其應用到軟件開發實踐中,從而提高我國軟件行業的整體水平。
讀者對象
無論大家從事哪個行業,在開始閱讀本書之前,都需要具備以下幾個方面的基礎知識。
- 數據結構的基礎知識,如棧結構存取元素的特點等。
- 匯編的基礎知識,如尋址方式和指令的使用等。
- C/C++語言的基礎知識,如指針、虛函數和繼承的概念等。
- 熟悉Visual Studio 2019的常用功能,如觀察某變量的地址、單步跟蹤等。
具備了上面這些基礎知識,就可以根據自己的實際需求學習本書的內容。
如果你是一位軟件研發人員,你將通過本書更深入地了解C++語法的實現機制,對產品知其然更知其所以然。在精讀反匯編代碼后,你的調試水平也會得到質的提升。
如果你是一位反病毒分析人員或者電子證據司法取證分析人員,通過逆向分析惡意軟件樣本,你可以進行取證分析處理,例如,分析開發者的編寫習慣、推斷開發者的編程水平,甚至可以進一步判定某病毒樣本是否與其他病毒出自同一人之手。
如果你是一位高等院校計算機相關專業的學生(本科或本科以上),你可以通過學習書中的軟件逆向分析技術來拓展思路,為未來進軍軟件研發行業打下基礎。
第2版的更新內容
- 重新設計了所有的示例。
- 所有的反匯編代碼均使用最新的Visual Studio 2019編譯器編譯。
- 增加最新的Clang編譯器反匯編代碼講解。
- 增加最新的GCC編譯器反匯編代碼講解。
- 增加所有主流編譯器64位程序反匯編代碼講解。
- 隨書文件增加所有示例單獨的源碼和所有編譯器編譯后的可執行程序。
- 根據最新編譯器刪除了一些過時的內容,增加了一些新的內容。
- 增加和更新了病毒分析示例。
本書特色
我結合自己的學習經歷和對C++反匯編與逆向分析技術的了解將全書劃分為三個部分。
第一部分 準備工作(第1章)
在軟件開發過程中,程序員會使用一些調試工具,以便高效地找出軟件中存在的錯誤。在逆向分析領域,分析者也要利用相關工具分析軟件行為,驗證分析結果。本書第一部分簡單介紹了幾款常用的逆向分析輔助工具和軟件。
第二部分 C++反匯編揭秘(第2~13章)
評估一位軟件開發者的能力,一是看設計能力,二是看調試水平。一般來說,大師級的程序員對軟件逆向分析技術都有深入的理解,他們在編寫高級語言代碼的同時,心里還會浮現對應的匯編代碼,在寫程序的時候就已經非常了解最終產品的模樣,達到了人機合一的境界,所以在調試Bug的時候游刃有余。逆向分析技術重在代碼的調試和分析,如果你本來就是一位技術不錯的程序員,學習這部分內容就是對你“內功”的鍛煉,這部分內容可以幫助你徹底掌握C/C++各種特性的底層機制,不僅能做到知其然,還能知其所以然。這部分以C/C++語法為導向,以各編譯器為例,解析每個C/C++知識點的匯編表現形式,通過整理其反匯編代碼梳理流程和脈絡。這部分內容重在講方法,授人以漁,不重劍招,但重劍意。
第三部分 逆向分析技術應用(第14~18章)
這是本書的最后一部分,以理論與實踐相結合的方式,通過對具體程序的分析來加深大家對前面所學理論知識的理解,從而快速積累實戰經驗。第14章分析了PE文件分析工具PEiD的工作原理,第15章分析了調試器OllyDbg的工作原理,第16章對大灰狼遠控木馬進行了逆向分析,第17章對WannaCry勒索病毒進行了逆向分析,第18章講解了反匯編代碼的重建與編譯。通過這部分內容的學習,大家可以領略逆向分析技術的魔力。
如何閱讀本書
逆向分析技術具有很強的綜合性和實踐性,要掌握這項技術需要耐心和毅力。建議大家從最簡單的程序入手,按照本書安排的順序逐章閱讀,一邊看書,一邊積極地思考和總結。對于一些理論知識,如果你興趣不大,在初學階段可以跳過,待以后需要提高時再回過頭來閱讀。可以暫時跳過的知識我都在書中做了說明。
隨著時間的推移,你會逐漸形成一套分析代碼的個人風格和習慣。這樣一來,任何軟件在你眼中都沒有了神秘感。
勘誤和支持
由于個人能力有限,書中的疏漏在所難免,還請各位同行和讀者多多批評指正。本書的討論和勘誤放在看雪論壇(http://bbs.pediy.com/)的圖書項目版塊中,我們會在這里發布本書的勘誤和其他對大家有用的增值服務。大家也可以在這里發表對本書的意見和建議,更重要的是,大家還能在這里結交到一些志同道合的朋友。同時,也歡迎大家通過QQ(159262378)或E-mail(ollydbg@foxmail.com)聯系我。由于平時上網較少,如果回復不及時,還請諒解。
致謝
在本書寫作的過程中,我得到過很多同行的指點和幫助,在此表示感謝,感謝唐培、田青、王金龍、吳超、秦頌浩、李常坤、薛曉昊、黃震、何錫寧、劉帥等人(排名不分先后)。還有很多朋友在我寫作本書的過程中給予了幫助,在這里一并表示感謝。
特別感謝本書的編輯楊福川、羅詞亮和韓蕊,他們花費了許多時間和精力校正本書的各類錯誤。正是他們的敬業和努力,才使得本書能在保證質量的前提下順利出版。
錢林松
2021年3月于武漢
[1]著名技術專家和IT教育工作者,尤其精通C++和MFC,計算機圖書作家、譯者和書評人。
- Java面向對象軟件開發
- Learning RabbitMQ
- Mastering Ubuntu Server
- 深入淺出DPDK
- C語言程序設計
- 零基礎學Python數據分析(升級版)
- Mastering JBoss Enterprise Application Platform 7
- Java零基礎實戰
- BeagleBone Robotic Projects(Second Edition)
- 3ds Max印象 電視欄目包裝動畫與特效制作
- C指針原理揭秘:基于底層實現機制
- Machine Learning for Developers
- SQL Server on Linux
- INSTANT Premium Drupal Themes
- 量子計算機編程:從入門到實踐