TOP
瀏覽紀錄
【反詐騙】接到不明來電說:升等為「高級會員」「購物滿意度調查」,這是詐騙!請絕對「不要依照指示操作ATM或網銀」
1/1
無庫存,下單後進貨(採購期約45個工作天)
逆向工程核心原理(簡體書)
人民幣定價:129.8元
定  價:NT$779元
優惠價: 75584
可得紅利積點:17 點

無庫存,下單後進貨(採購期約45個工作天)

商品簡介

作者簡介

名人/編輯推薦

目次

  韓國逆向分析領域龍頭之作!
  逆向分析師必知核心原理大全!
  《逆向工程核心原理》集中講解逆向分析技術及其操作原理,不僅通過通俗易懂的語言介紹了每項技術,更通過豐富的示例使讀者徹底掌握核心部分的原理。閱讀此書不僅可以為逆向分析打下堅實基礎,更能夠獲得恆久保值的技術精髓。
  想成為逆向工程研究員的讀者或正在從事逆向開發工作的開發人員一定會通過本書獲得很大幫助。同時,想成為安全領域專家的人也可從本書輕鬆起步。
 
  《逆向工程核心原理》十分詳盡地介紹了代碼逆向分析的核心原理。作者在Ahnlab 研究所工作多年,書中不僅包括其以此經驗為基礎親自編寫的大量代碼,還包含了逆向工程研究人員必須了解的各種技術和技巧。徹底理解并切實掌握逆向工程這門技術,就能在眾多IT相關領域進行拓展運用,這本《逆向工程核心原理》就是通向逆向工程大門的捷徑。
  想成為逆向工程研究員的讀者或正在從事逆向開發工作的開發人員一定會通過《逆向工程核心原理》獲得很大幫助。同時,想成為安全領域專家的人也可從《逆向工程核心原理》輕松起步。

李承遠
在AhnLab從事惡意代碼分析工作,一直維護著一個逆向分析技術專業學習博客。從接觸逆向分析技術開始就為其迷人魅力深深吸引,對逆向分析技術的傳播及多領域應用非常關注,喜歡讀書、發呆,也嚮往新的挑戰。

武傳海
擅韓語,喜計算機,有多年翻譯經驗,內容涉及多個領域,尤其擅長翻譯各類計算機圖書,已出版多部韓語譯著。

  ★向安全技術專家邁出第一步的必選書!
  最近,越來越多的人開始關心信息技術安全,但是相關領域的安全技術專家仍然十分匱乏。主要有兩方面原因導致這種現象形成:一方面是因為必須做大量準備,努力學習;另一方面是因為市面上缺乏系統講解這類內容的專業書籍。
  信息技術安全領域的圖書很少有講解惡意代碼分析的,本書恰好填補了這一空白。無論是剛開始學習惡意代碼分析的朋友,還是從事惡意代碼分析的專家,都會為本書面世而激動。
  雖然讀者閱讀本書時需要具有基本的彙編語言知識,但是本書內容講解非常細緻,涵蓋了從惡意代碼分析基礎知識到高級技術的全部內容,系統而有條理,語言簡潔,通俗易懂,並在講解中選配了恰當的示例程序,使內容更易理解。對於最近出現的惡意代碼中的各種常用技術,本書都做了詳細講解,無論你是初學者還是分析專家,都能從中獲益。
  信息安全技術涉及各領域,需要知識淵博、經驗豐富的專家。本書將幫你輕鬆邁出成為安全技術專家的第一步。
  ——韓昌奎,ASEC中心主任

  ★如果此刻你手上正捧著這本書,說明你已經被代碼逆向分析的魅力深深吸引了!
  對於剛開始學習代碼逆向分析技術的人而言,需要學習的內容很多,這容易讓人心生畏懼、止步不前。其實不需擔心,本書在學習過程中給出了大量提示,各位借助這些提示可以更好地理解所講的內容。
  本書比較重視代碼逆向分析者的心態引導與培養,在內容講解上也與其他書籍不同,並不是單純的技巧羅列,而是深刻講解了相關技術的深層含義、技術的工作原理以及內部實現結構,這也是本書的重點所在。同時配合豐富示例,讓內容變得更具體形象、更易理解,作者的良苦用心可見一斑。
  你想成為代碼逆向分析員嗎?如果你感到困惑:“我是開發人員,難道也需要讀它嗎?”
  ——鄭官真,CISCO高級研究員
本書將指引你進入美妙又刺激的代碼逆向分析世界,開啟一段神奇之旅!
  軟件逆向工程(代碼逆向分析)是一種探究應用程序內部組成結構及工作原理的技術。歡迎各位來到代碼逆向分析世界,經歷各種神奇的冒險,迎接各種富有趣味的挑戰。
  不論是我們自己編寫的程序,還是其他人編寫的無源碼程序,只要運用逆向分析技術,我們就能輕鬆窺探程序內部結構、掌握工作原理。靈活運用逆向分析技術可以在程序的開發與測試階段發現Bug和漏洞,並直接修改程序文件或內存解決這些隱含的問題。而且,我們還可以藉助逆向分析技術為程序添加新功能,使程序更強大。這就像是一種魔法,魅力無限。
  學習逆向分析技術前並不需要準備太多。下面給各位講講我的經歷。幾年來,我一直維護著一個逆向分析技術學習博客,訪客們問得最多的問題是:“究竟該怎樣學習逆向分析技術?”我結合自身經驗並分析了一些學習失敗的案例後發現,失敗的最大原因並不是學習本身的難度與要學內容的數量,而是對學習逆向技術的恐懼與憂慮——“我連C語言還不懂呢”、“一定要掌握彙編語言嗎”、“OS架構我還沒搞明白”、“不知道怎麼用調試器”、“學完這麼多內容才能真正開始學逆向分析技術啊”,以上這些擔心正是迫使學習者們中途放棄的主要原因。其實,學習逆向分析技術與學習C語言、彙編語言、OS架構、調試器用法等內容是一樣的。將這些內容全部掌握的人已經是專家了,當然不需要這個入門過程。
  你仍對逆向分析技術一無所知?沒關係,不必沮喪,這反而是件好事。因為你會在以後的學習過程中學到很多東西,會變得更聰明、更有價值,誰說這不是件好事呢?
  如果你夢想成為逆向分析工程師,但不知如何入門;如果你是一名程序開發者,又對逆向分析技術非常感興趣,那麼本書將非常適合閱讀。學習逆向分析技術並不像公式一樣背下來就可以了,死記硬背的結果是你會不知道如何靈活運用。學習某些知識技術時,不僅要掌握其本身,還要知道它們的內部機制與工作原理,既知其然又知其所以然,這才是最重要的。所以,本書講解相關知識與技術時,將講解重點放在對其工作原理的分析與說明上,這將更有利於各位真正掌握它們。為什麼本書非常適合作為逆向分析技術的入門書呢?以下是我的幾點理由。
  第一,開發與分析的經驗。一名逆向分析工程師不僅要具備專業的逆向分析技術,還要具有一定的程序開發能力。我以前從事網絡應用程序開發,後來開始做惡意代碼分析工作,慢慢就對逆向分析技術熟悉起來。可以說,我是從程序開發者轉變為逆向分析員的為數不多的人之一。程序開發與逆向分析這兩項技術相輔相成、互為補充、共同發展,形成相得益彰的效果。日常工作中,它們就像一雙翅膀應用於各類業務。分析程序時,人們自然就會從程序開發與逆向分析這兩個角度著手。書中用到的幾乎所有示例都基於我在逆向分析實踐中獲得的知識與經驗,是我親自開發的程序,緊扣各章主題,絕無累贅。
  第二,培訓與演講的經驗。我在公司慢慢有了資歷,隨之而來的培訓、研討會、演講也逐漸多起來。我進行逆向分析技術培訓時,面對的學員大都是初學者,這些機會非常有利於我了解他們遇到的困難與想知道的東西。所以,我一直在用心思考,如何用更易理解的方式傳授要講解的知識,這樣就慢慢形成了自己特有的講解技巧與風格。編寫本書時,我又將這些培訓經驗應用到本書的組織結構、內容講解、示例選擇等各方面,以求將較為難懂的技術以更易懂的方式呈現給各位。
  第三,豐富的溝通經驗。我幾年前就開設了一個逆向技術學習博客並運營至今。剛開始的想法非常簡單,就是想歸納整理自己學到的逆向分析技術。後來訪客越來越多,留下的問題也多起來。我感到很驚訝,之前一直以為韓國是逆向分析技術的“不毛之地”,結果關注逆向分析技術的人比我想得要多,並且他們關注的範圍也非常廣泛。這大大拓寬了我的視野,於是我開始訪問其他逆向分析技術學習博客,接觸到了更多文章與問題,慢慢了解了他們關注的部分。我在此過程中逐漸認識到,初學者們想知道的是逆向分析技術的系統的學習方法。他們入門之後迫切要學習的是專業的逆向分析技術與內部工作原理。有感於此,我就萌生了寫一本系統學習逆向分析技術書的想法,就這樣,在逆向分析與開發、培訓、演講、交流等經驗基礎上,這本逆向分析技術學習入門書誕生了。
  那麼,讀者應該如何使用本書學習逆向分析技術呢?對此,我給出如下幾點建議,供各位參考。
  第一,技術書不是裝飾書架的道具,它們是提高各位技術水平的工具。所以閱讀時要勾畫出重要部分,在書頁空白處寫下自己的想法與心得等。閱讀時,在書頁上記錄相關技術、注意事項、技術優缺點、與作者的不同見解等,讓它成為只屬於你的書。讀完這樣一本逆向分析技術書後,不知不覺間就構建出自己獨特的逆向分析世界,最終成為代碼逆向分析專家。
  第二,擁有積極樂觀的心態。逆向分析是一項深奧的技術,會涉及OS底層知識。要學的內容很多,並且大部分內容需要親自測試並確認才能最終理解。必須用積極樂觀的心態對待這一過程,學習逆向技術無關聰明與否,只跟投入時間的多少有關。學習時,不要太急躁,請保持輕鬆的心態。
  第三,不斷挑戰。逆向分析不盡如人意時,不要停下來,要嘗試其他方法,不斷挑戰。要相信一定會有解決的方法,可能幾年前早已有人成功過了。搜索相關資料並不斷嘗試,不僅能提高自身技術水平,解決問題後,心裡還能感受到一種成就感。這樣的成功經驗一點點積累起來,自信心就會大大增強,自身的逆向分析水平也會得到明顯提高。這種從經驗中獲得的自信會不知不覺地對逆向分析過程產生積極影響,讓逆向分析往更好的方向發展。
  希望本書能夠幫助各位把“心願表”上的願望一一實現,也希望各位把本書講解的知識、技術廣泛應用到逆向分析過程中,發揮更大的作用。謝謝。
  感謝
  動筆容易寫完難。我隻身一人是無法完成本書的,寫作過程中得到了很多人的關心、支持與鼓勵,沒有他們就不會有本書。藉此機會,我向所有給予幫助的人表示最誠摯的謝意。
  首先,感謝愛妻素英,謝謝你一直以來相信我、默默支持我,你的微笑是我的能量之源。還要感謝我的兩個寶貝兒子浩俊、姜憲,你們的陪伴讓疲勞煙消雲散,讓我心裡始終充滿幸福。還有我的父母,你們總是關心著我和我的工作。正是你們給了我戰勝一切困難的勇氣,衷心感謝你們。
  其次,要感謝崔景哲先生,您的稱讚與鼓勵一直激勵著我寫完全書。還要感謝韓昌圭先生與鄭寬鎮先生,兩位前輩寫的推薦詞使本書增色不少。我早在動筆時就囑託二位為本書寫推薦語了。請一定允許我為兩位的新書寫推薦詞。
  再次,向Insight出版社的韓基晟社長以及所有員工,特別是趙岩熹編輯表示最誠摯的謝意。他將一塊粗糙的原石打磨成了珍貴的寶石,我以後寫書也會無條件請他負責。
  最後,對關注本書的同事、公司實習生,以及博客訪客們表示感謝。你們總是熱心地詢問:“什麼時候出書啊?”你們的關心最終促成我寫完全書。還要感謝購買本書的讀者們,你們的夢想與熱情一直鼓舞著我。
  李承遠

目錄

第一部分代碼逆向技術基礎

第1章關於逆向工程2
1.1逆向工程2
1.2代碼逆向工程2
1.2.1逆向分析法2
1.2.2源代碼、十六進制代碼、彙編代碼4
1.2.3 “打補丁”與“破解” 5
1.3代碼逆向準備5
1.3.1目標5
1.3.2激情6
1.3.3谷歌6
1.4學習逆向分析技術的禁忌6
1.4.1貪心6
1.4.2急躁7
1.5逆向分析技術的樂趣7

第2章逆向分析Hello World!程序8
2.1 Hello World!程序8
2.2調試HelloWorld.exe程序9
2.2.1調試目標9
2.2.2開始調試9
2.2.3入口點10
2.2.4跟踪40270C函數10
2.2.5跟踪40104F跳轉語句12
2.2 .6查找main()函數12
2.3進一步熟悉調試器14
2.3.1調試器指令14
2.3.2 “大本營” 15
2.3.3設置“大本營”的四種方法15
2.4快速查找指定代碼的四種方法17
2.4.1代碼執行法18
2.4.2字符串檢索法19
2.4.3 API檢索法(1):在調用代碼中設置斷點20
2.4.4 API檢索法(2):在API代碼中設置斷點21
2.5使用“打補丁”方式修改“Hello World!”字符串23
2.5.1 “打補丁” 23
2 .5.2修改字符串的兩種方法24
2.6小結28

第3章小端序標記法31
3.1字節序31
3.1.1大端序與小端序32
3.1.2在OllyDbg中查看小端序32

第4章IA-32寄存器基本講解34
4.1什麼是CPU寄存器34
4.2 IA-32寄存器34
4.3小結40

第5章棧41
5.1棧41
5. 1.1棧的特徵41
5.1.2棧操作示例41

第6章分析abex' crackme#1 44
6.1 abex' crackme #1 44
6.1.1開始調試45
6.1.2分析代碼45
6.2破解47
6.3將參數壓入棧47
6.4小結48

第7章棧幀49
7.1棧幀49
7.2調試示例:stackframe.exe 49
7.2.1 StackFrame.cpp 50
7.2.2開始執行main()函數&生成棧幀51
7.2.3設置局部變量52
7.2.4 add()函數參數傳遞與調用53
7.2.5開始執行add( )函數&生成棧幀54
7.2.6設置add()函數的局部變量(x, y) 55
7.2.7 ADD運算55
7.2.8刪除函數add()的棧幀&函數執行完畢(返回) 56
7.2.9從棧中刪除函數add()的參數(整理棧) 57
7.2.10調用printf()函數58
7.2.11設置返回值58
7.2.12刪除棧幀&main()函數終止58
7.3設置OllyDbg選項59
7.3.1 Disasm選項59
7.3.2 Analysis1選項60
7.4小結61

第8章abex' crackme #2 62
8.1運行abex' crackme #2 62
8.2 Visual Basic文件的特徵63
8.2.1 VB專用引擎63
8.2.2本地代碼和偽代碼63
8.2.3事件處理程序63
8.2.4未文檔化的結構體63
8.3開始調試63
8.3.1間接調用64
8.3.2 RT_MainStruct結構體64
8.3.3 ThunRTMain()函數65
8.4分析crackme 65
8.4.1檢索字符串65
8.4.2查找字符串地址66
8.4.3生成Serial的算法68
8.4.4預測代碼69
8.4.5讀取Name字符串的代碼69
8.4.6加密循環70
8.4.7加密方法70
8.5小結72

第9章Process Explorer——**優秀的進程管理工具74
9.1 Process Explorer 74
9.2具體有哪些優點呢75
9.3 sysinternals 75

第10章函數調用約定76
10.1函數調用約定76
10.1.1 cdecl 76
10.1.2 stdcall 77
10.1.3 fastcall 78

第11章視頻講座79
11. 1運行79
11.2分析79
11.2.1目標(1):去除消息框79
11.2.2打補丁(1):去除消息框81
11.2.3目標(2):查找註冊碼83
11.3小結85

第12章應當如何學習代碼逆向分析86
12.1逆向工程86
12.1.1任何學習都應當有目標86
12.1.2擁有積極心態86
12.1.3要感受其中的樂趣86
12.1.4讓檢索成為日常生活的一部分87
12.1.5 **重要的是實踐87
12.1.6請保持平和的心態87

第二部分PE文件格式

第13章PE文件格式90
13.1介紹90
13.2 PE文件格式90
13.2.1基本結構91
13.2.2 VA&RVA 92
13.3 PE頭92
13.3.1 DOS頭93
13.3.2 DOS存根94
13.3.3 NT頭94
13.3.4 NT頭:文件頭95
13 .3.5 NT頭:可選頭97
13.3.6節區頭101
13.4 RVA to RAW 104
13.5 IAT 105
13.5.1 DLL 105
13.5.2 IMAGE_IMPORT_DESCRIPTOR 107
13.5.3使用notepad.exe練習108
13.6 EAT 112
13.6.1 IMAGE_EXPORT_DIRECTORY 113
13.6.2使用kernel32.dll練習114
13.7高級PE 116
13.7.1 PEView.exe 116
13.7.2 Patched PE 117
13.8小結118

第14章運行時壓縮121
14.1數據壓縮121
14.1.1無損壓縮121
14.1.2有損壓縮121
14.2運行時壓縮器122
14.2.1壓縮器122
14.2.2保護器123
14.3運行時壓縮測試123

第15章調試UPX壓縮的notepad程序127
15.1 notepad.exe的EP代碼127
15.2 notepad_upx.exe的EP代碼127
15.3跟踪UPX文件129
15.3.1 OllyDbg的跟踪命令129
15.3.2循環#1 129
15.3.3循環#2 130
15.3.4循環#3 131
15 .3.5循環#4 131
15.4快速查找UPX OEP的方法132
15.4.1在POPAD指令後的JMP指令處設置斷點132
15.4.2在棧中設置硬件斷點133
15.5小結133

第16章基址重定位表135
16.1 PE重定位135
16.1.1 DLL/SYS 135
16.1.2 EXE 136
16.2 PE重定位時執行的操作136
16.3 PE重定位操作原理138
16.3.1基址重定位表138
16. 3.2 IMAGE_BASE_RELOCATION結構體139
16.3.3基址重定位表的分析方法139
16.3.4練習141

第17章從可執行文件中刪除.reloc節區142
17.1 .reloc節區142
17.2 reloc.exe 142
17.2.1刪除.reloc節區頭142
17.2.2刪除.reloc節區143
17.2.3修改IMAGE_FILE_HEADER 143
17.2.4修改IMAGE_OPTIONAL_HEADER 144
17.3小結145

第18章UPack PE文件頭詳細分析146
18.1 UPack說明146
18.2使用UPack壓縮notepad.exe 146
18.3使用Stud_PE工具148
18.4比較PE文件頭148
18.4.1原notepad.exe的PE文件頭149
18.4.2 notepad_upack.exe運行時壓縮的PE文件頭149
18.5分析UPack的PE文件頭150
18.5.1重疊文件頭150
18.5.2 IMAGE_FILE_HEADER.SizeOfOptionalHeader 150
18.5.3 IMAGE_OPTIONAL_HEADER.NumberOf-RvaAndSizes 152
18.5.4 IMAGE_SECTION_HEADER 153
18.5.5重疊節區155
18.5.6 RVA to RAW 156
18.5.7導入表(IMAGE_IMPORT_DESCRIPTOR array) 158
18.5.8導入地址表160
18.6小結161

第19章UPack調試查找OEP 162
19.1 OllyDbg運行錯誤162
19.2解碼循環163
19.3設置IAT 165
19.4小結166

第20章“內嵌補丁”練習167
20.1內嵌補丁167
20.2練習:Patchme 168
20.3調試:查看代碼流168
20.4代碼結構172
20.5 “內嵌補丁”練習173
20.5.1補丁代碼要設置在何處呢173
20.5.2製作補丁代碼175
20.5.3執行補丁代碼176
20. 5.4結果確認177

第三部分DLL注入

第21章Windows消息鉤取180
21.1鉤子180
21.2消息鉤子180
21.3 SetWindowsHookEx() 181
21.4鍵盤消息鉤取練習182
21.4. 1練習示例HookMain.exe 182
21.4.2分析源代碼185
21.5調試練習187
21.5.1調試HookMain.exe 188
21.5.2調試Notepad.exe進程內的KeyHook.dll 190
21.6小結192

第22章惡意鍵盤記錄器194
22.1惡意鍵盤記錄器的目標194
22.1.1在線遊戲194
22.1.2網上銀行194
22.1.3商業機密洩露194
22.2鍵盤記錄器的種類與發展趨勢195
22.3防範惡意鍵盤記錄器195
22.4個人信息195

第23章DLL注入197
23.1 DLL注入197
23.2 DLL注入示例198
23.2.1改善功能與修復Bug 198
23.2.2消息鉤取198
23.2.3 API鉤取198
23.2.4其他應用程序199
23.2.5惡意代碼199
23.3 DLL注入的實現方法199
23.4 CreateRemoteThread() 199
23.4.1練習示例myhack.dll 199
23.4.2分析示例源代碼203
23.4.3調試方法208
23.5 AppInit_DLLs 210
23.5.1分析示例源碼211
23.5.2練習示例myhack2.dll 212
23.6 SetWindowsHookEx() 214
23.7小結214

第24章DLL卸載216
24.1 DLL卸載的工作原理216
24.2實現DLL卸載216
24.2.1獲取進程中加載的DLL信息219
24 .2.2獲取目標進程的句柄220
24.2.3獲取FreeLibrary() API地址220
24.2.4在目標進程中運行線程220
24.3 DLL卸載練習220
24.3.1複製文件及運行notepad.exe 220
24.3.2注入myhack.dll 221
24.3.3卸載myhack.dll 222

第25章通過修改PE加載DLL 224
25.1練習文件224
25.1.1 TextView.exe 224
25.1.2 TextView_patched.exe 225
25.2源代碼- myhack3.cpp 227
25.2.1 DllMain() 227
25.2.2 DownloadURL() 228
25.2.3 DropFile() 229
25.2.4 dummy() 230
25.3修改TextView.exe文件的準備工作231
25.3.1修改思路231
25.3.2查看IDT是否有足夠空間231
25.3.3移動IDT 233
25.4修改TextView.exe 235
25.4.1修改導入表的RVA值235
25.4.2刪除綁定導入表235
25.4.3創建新IDT 235
25.4.4設置Name、INT、IAT 236
25.4. 5修改IAT節區的屬性值238
25.5檢測驗證240
25.6小結241

第26章PE Tools 242
26.1 PE Tools 242
26.1.1進程內存轉儲243
26.1.2 PE編輯器245
26.2小結245

第27章代碼注入247
27.1代碼注入247
27. 2 DLL注入與代碼注入247
27.3練習示例249
27.3.1運行notepad.exe 249
27.3.2運行CodeInjection.exe 249
27.3.3彈出消息框250
27.4 CodeInjection.cpp 250
27.4.1 main()函數251
27.4.2 ThreadProc()函數251
27.4.3 InjectCode()函數254
27.5代碼注入調試練習256
27.5.1調試notepad.exe 256
27.5.2設置OllyDbg選項256
27.5.3運行CodeInjection.exe 257
27.5.4線程開始代碼258
27.6小結259

第28章使用彙編語言編寫注入代碼260
28.1目標260
28.2彙編編程260
28.3 OllyDbg的彙編命令260
28.3.1編寫ThreadProc()函數262
28.3.2保存文件265
28.4編寫代碼注入程序266
28.4.1獲取ThreadProc()函數的二進制代碼266
28.4.2 CodeInjection2.cpp 267
28.5調試練習270
28.5.1調試notepad.exe 270
28.5.2設置OllyDbg選項270
28.5.3運行CodeInjection2.exe 271
28.5.4線程起始代碼272
28.6詳細分析272
28.6.1生成棧幀272
28.6.2 THREAD_PARAM結構體指針273
28.6.3 “User32.dll”字符串274
28.6.4壓入“user32.dll”字符串參數274
28.6.5調用LoadLibraryA(“user32.dll”) 275
28.6.6 “MessageBoxA”字符串276
28.6.7調用GetProcAddress( hMod,“MessageBoxA”) 276
28.6.8壓入MessageBoxA()函數的參數1 -MB_OK 277
28.6.9壓入MessageBoxA()函數的參數2 -“ReverseCore” 277
28.6.10壓入MessageBoxA()函數的參數3 -“www.reversecore.com” 278
28.6.11壓入MessageBoxA()函數的參數4 -NULL 279
28.6.12調用MessageBoxA() 279
28.6.13設置ThreadProc()函數的返回值280
28.6.14刪除棧幀及函數返回280
28.7小結280

第四部分API鉤取

第29章API鉤取:逆向分析之“花” 282
29.1鉤取282
29.2 API是什麼282
29.3 API鉤取283
29.3.1正常調用API 283
29.3.2鉤取API調用284
29.4技術圖表284
29.4. 1方法對象(是什麼) 285
29.4.2位置(何處) 285
29.4.3技術(如何) 286
29.4.4 API 286

第30章記事本WriteFile() API鉤取288
30. 1技術圖表—調試技術288
30.2關於調試器的說明289
30.2.1術語289
30.2.2調試器功能289
30.2.3調試器的工作原理289
30.2.4調試事件289
30.3調試技術流程290
30.4練習291
30.5工作原理293
30.5.1棧293
30.5.2執行流295
30.5.3 “脫鉤”&“鉤子” 295
30.6源代碼分析295
30.6.1 main() 296
30.6.2 DebugLoop() 296
30.6.3 EXIT_PROCESS_DEBUG_EVENT 298
30.6.4 CREATE_PROCESS_DEBUG_EVENT-OnCreateProcess-DebugEvent() 298
30.6.5 EXCEPTION_DEBUG_EVENT-OnException- DebugEvent() 300

第31章關於調試器305
31.1 OllyDbg 305
31.2 IDA Pro 305
31.3 WinDbg 306

第32章計算器顯示中文數字308
32.1技術圖表308
32.2選定目標API 309
32.3 IAT鉤取工作原理312
32.4練習示例314
32.5源代碼分析316
32.5.1 DllMain() 316
32.5.2 MySetWindowTextW() 317
32.5.3 hook_iat() 319
32.6調試被注入的DLL文件322
32.6.1 DllMain() 325
32.6.2 hook_iat() 325
32.6.3 MySetWindowTextW() 327
32.7小結328

第33章隱藏進程329
33.1技術圖表329
33.2 API代碼修改技術的原理329
33.2.1鉤取之前330
33.2.2鉤取之後330
33.3進程隱藏332
33.3 .1進程隱藏工作原理332
33.3.2相關API 332
33.3.3隱藏技術的問題333
33.4練習#1(HideProc.exe,stealth.dll) 333
33.4.1運行notepad.exe、procexp.exe、taskmgr.exe 334
33.4.2運行HideProc.exe 334
33.4.3確認stealth.dll注入成功334
33.4.4查看notepad.exe進程是否隱藏成功335
33.4.5取消notepad.exe進程隱藏336
33.5源代碼分析336
33.5.1 HideProc.cpp 336
33.5.2 stealth.cpp 338
33.6全局API鉤取344
33.6.1 Kernel32.CreateProcess() API 344
33.6.2 Ntdll.ZwResumeThread() API 345
33.7練習#2(HideProc2.exe,Stealth2.dll) 345
33.7.1複製stealth2.dll文件到%SYSTEM%文件夾中345
33.7.2運行HideProc2.exe -hide 346
33.7.3運行ProcExp.exe¬epad.exe 346
33.7.4運行HideProc2.exe -show 347
33.8源代碼分析348
33.8.1 HideProc2.cpp 348
33.8.2 stealth2.cpp 348
33.9利用“熱補丁”技術鉤取API 350
33.9.1 API代碼修改技術的問題350
33.9.2 “熱補丁”(修改7個字節代碼) 350
33.10練習# 3:stealth3.dll 353
33.11源代碼分析353
33.12使用“熱補丁”API鉤取技術時需要考慮的問題356
33.13小結357

第34章高級全局API鉤取:IE連接控制359
34.1目標API 359
34.2 IE進程結構361
34.3關於全局API鉤取的概念362
34.3.1常規API鉤取363
34.3.2全局API鉤取363
34.4 ntdll!ZwResumeThread() API 364
34. 5練習示例:控制IE網絡連接368
34.5.1運行IE 368
34.5.2注入DLL 369
34.5.3創建新選項卡369
34.5.4嘗試連接網站370
34.5.5卸載DLL 371
34.5.6課外練習372
34.6示例源代碼372
34.6.1 DllMain() 372
34.6.2 NewInternetConnectW() 373
34.6.3 NewZwResumeThread() 374
34.7小結375

第35章優秀分析工具的五種標準376
35.1工具376
35.2代碼逆向分析工程師376
35.3優秀分析工具的五種標準376
35.3.1精簡工具數量377
35.3.2工具功能簡單、使用方便377
35.3.3完全掌握各種功能377
35.3.4不斷升級更新377
35.3.5理解工具的核心工作原理377
35.4熟練程度的重要性377

第五部分64位&Windows內核6

第36章64位計算380
36.1 64位計算環境380
36.1.1 64位CPU 380
36.1.2 64位OS 381
36.1.3 Win32 API 381
36.1.4 WOW64 381
36.1.5練習:WOW64Test 384
36.2編譯64位文件385
36.2.1 Microsoft Windows SDK(Software Development Kit) 386
36.2.2設置Visual C++ 2010 Express環境386

第37章x64處理器389
37.1 x64中新增或變更的項目389
37.1.1 64位389
37.1 .2內存389
37.1.3通用寄存器389
37.1.4 CALL/JMP指令390
37.1.5函數調用約定391
37.1.6棧&棧幀392
37.2練習:Stack32.exe & Stack64.exe 392
37.2.1 Stack32.exe 392
37.2.2 Stack64.exe 394
37.3小結397

第38章PE32+ 398
38.1 PE32+(PE+、PE64) 398
38.1.1 IMAGE_NT_HEADERS 398
38.1.2 IMAGE_FILE_HEADER 398
38.1.3 IMAGE_OPTIONAL_HEADER 399
38.1.4 IMAGE_THUNK_DATA 401
38. 1.5 IMAGE_TLS_DIRECTORY 403

第39章WinDbg 405
39.1 WinDbg 405
39.1.1 WinDbg的特徵405
39.1.2運行WinDbg 406
39.1.3內核調試407
39.1.4 WinDbg基本指令409

第40章64位調試411
40.1 x64環境下的調試器411
40.2 64位調試411
40.3 PE32:WOW64Test_x86.exe 413
40.3.1 EP代碼414
40.3.2 Startup代碼414
40.3.3 main()函數415
40.4 PE32+:WOW64Test_x64.exe 416
40.4.1系統斷點416
40.4.2 EP代碼417
40.4.3 Startup代碼418
40.4.4 main()函數420
40.5小結423

第41章ASLR 424
41.1 Windows內核版本424
41.2 ASLR 424
41.3 Visual C++ 424
41.4 ASLR .exe 425
41.4.1節區信息426
41.4.2 IMAGE_FILE_HEADER\Characteristics 427
41.4.3 IMAGE_OPTIONAL_HEADER\DLL Characteristics 428
41.5練習:刪除ASLR功能428

第42章內核6中的會話430
42. 1會話430
42.2會話0隔離機制432
42.3增強安全性432

第43章內核6中的DLL注入433
43.1再現DLL注入失敗433
43.1.1源代碼433
43.1.2注入測試435
43.2原因分析436
43.2.1調試#1 436
43.2.2調試#2 438
43.3練習:使CreateRemoteThread()正常工作440
43.3.1方法#1:修改CreateSuspended參數值440
43.3.2方法#2:操縱條件分支441
43.4稍作整理443
43.5 InjectDll_new.exe 443
43.5.1 InjectDll_new.cpp 443
43.5.2注入練習446

第44章InjDll.exe:DLL注入專用工具448
44.1 InjDll.exe 448
44.1.1使用方法448
44.1.2使用示例449
44.1.3注意事項450

第六部分高級逆向分析技術

第45章TLS回調函數452
45.1練習#1:HelloTls.exe 452
45.2 TLS 453
45.2.1 IMAGE_DATA_DIRECTORY[9] 453
45.2.2 IMAGE_TLS_DIRECTORY 454
45.2.3回調函數地址數組454
45.3 TLS回調函數455
45.4練習#2:TlsTest.exe 456
45.4.1 DLL_PROCESS_ATTACH 457
45.4.2 DLL_THREAD_ATTACH 457
45.4.3 DLL_THREAD_DETACH 457
45.4.4 DLL_PROCESS_DETACH 457
45.5調試TLS回調函數458
45.6手工添加TLS回調函數459
45.6.1修改前的原程序460
45.6.2設計規劃460
45.6.3編輯PE文件頭461
45.6.4設置IMAGE_TLS_DIRECTORY結構體463
45. 6.5編寫TLS回調函數464
45.6.6 **終完成464
45.7小結465

第46章TEB 466
46.1 TEB 466
46.1.1 TEB結構體的定義466
46.1.2 TEB結構體成員466
46.1.3重要成員469
46.2 TEB訪問方法470
46.2.1 Ntdll.NtCurrentTeb() 470
46.2.2 FS段寄存器471
46.3小結472

第47章PEB 473
47.1 PEB 473
47.1.1 PEB訪問方法473
47.1.2 PEB結構體的定義474
47. 1.3 PEB結構體的成員475
47.2 PEB的重要成員477
47.2.1 PEB.BeingDebugged 478
47.2.2 PEB.ImageBaseAddress 478
47.2.3 PEB.Ldr 479
47.2.4 PEB.ProcessHeap & PEB.NtGlobalFlag 480
47.3小結480

第48章SEH 481
48.1 SEH 481
48.2 SEH練習示例#1 481
48.2.1正常運行481
48.2.2調試運行482
48.3 OS的異常處理方法484
48.3.1正常運行時的異常處理方法484
48.3.2調試運行時的異常處理方法484
48.4異常485
48.4.1 EXCEPTION_ACCESS_VIOLATION(C0000005) 486
48.4.2 EXCEPTION_BREAKPOINT(80000003 ) 486
48.4.3 EXCEPTION_ILLEGAL_INSTRUCTION(C000001D) 488
48.4.4 EXCEPTION_INT_DIVIDE_BY_ZERO(C0000094) 488
48.4.5 EXCEPTION_SINGLE_STEP(80000004) 489
48.5 SEH詳細說明489
48.5.1 SEH鏈489
48.5 .2異常處理函數的定義489
48.5.3 TEB.NtTib.ExceptionList 491
48.5.4 SEH安裝方法492
48.6 SEH練習示例#2(seh.exe) 492
48.6.1查看SEH鏈493
48.6.2添加SEH 493
48.6.3發生異常494
48.6.4查看異常處理器參數494
48.6.5調試異常處理器496
48.6.6刪除SEH 498
48.7設置OllyDbg選項499
48.7.1忽略KERNEL32中發生的內存非法訪問異常500
48.7.2向被調試者派送異常500
48.7.3其他異常處理500
48.7.4簡單練習500
48.8小結501

第49章IA-32指令502
49.1 IA-32指令502
49.2常用術語502
49.2. 1反彙編器503
49.2.2反編譯器504
49.2.3反編譯簡介504
49.3 IA-32指令格式506
49.3.1指令前綴507
49.3.2操作碼507
49. 3.3 ModR/M 507
49.3.4 SIB 508
49.3.5位移508
49.3.6立即數509
49.4指令解析手冊509
49.4.1下載IA-32用戶手冊509
49.4.2打印指令解析手冊509
49.5指令解析練習510
49.5.1操作碼映射510
49.5.2操作數511
49.5. 3 ModR/M 512
49.5.4 Group 514
49.5.5前綴516
49.5.6雙字節操作碼518
49.5.7移位值&立即數519
49.5.8 SIB 520
49 .6指令解析課外練習524
49.7小結524

第七部分反調試技術

第50章反調試技術526
50.1反調試技術526
50.1.1依賴性526
50.1.2多種反調試技術526
50.2反調試破解技術526
50.3反調試技術的分類527
50.3.1靜態反調試技術528
50.3.2動態反調試技術528

第51章靜態反調試技術529
51.1靜態反調試的目的529
51.2 PEB 529
51.2.1 BeingDebugged(+0x2) 531
51.2.2 Ldr(+0xC) 531
51.2.3 Process Heap(+0x18) 532
51.2.4 NtGlobalFlag(+0x68) 533
51.2.5練習: StaAD_PEB.exe 534
51.2.6破解之法534
51.3 NtQueryInformationProcess() 537
51.3.1 ProcessDebugPort(0x7) 538
51.3.2 ProcessDebugObjectHandle(0x1E) 539
51.3.3 ProcessDebugFlags(0x1F) 539
51. 3.4練習:StaAD_NtQIP.exe 540
51.3.5破解之法540
51.4 NtQuerySystemInformation() 542
51.4.1 SystemKernelDebugger-Information(0x23) 544
51.4.2練習:StaAD_NtQSI.exe 545
51.4.3破解之法545
51.5 NtQueryObject() 545
51.6 ZwSetInformationThread() 549
51.6.1練習:StaAD_ZwSIT.exe 549
51.6.2破解之法550
51.7 TLS回調函數550
51.8 ETC 551
51.8.1練習:StaAD_FindWindow.exe 551
51.8.2破解之法551
51.9小結553

第52章動態反調試技術554
52.1動態反調試技術的目的554
52.2異常554
52.2.1 SEH 554
52.2. 2 SetUnhandledException-Filter() 558
52.3 Timing Check 562
52.3.1時間間隔測量法562
52.3.2 RDTSC 563
52.4陷阱標誌565
52.4.1單步執行566
52.4.2 INT 2D 569
52.5 0xCC探測572
52.5.1 API斷點573
52.5.2比較校驗和575

第53章高級反調試技術577
53.1高級反調試技術577
53.2垃圾代碼577
53.3擾亂代碼對齊578
53.4加密/解密581
53.4.1簡單的解碼示例581
53.4.2複雜的解碼示例582
53.4.3特殊情況:代碼重組584
53.5 Stolen Bytes (Remove OEP) 584
53.6 API重定向587
53.6.1原代碼588
53.6.2 API重定向示例#1 588
53.6.3 API重定向示例#2 589
53.7 Debug Blocker(Self Debugging) 593
53 .8小結595

第八部分調試練習

第54章調試練習1:服務598
54.1服務進程的工作原理598
54.1.1服務控制器598
54.1.2服務啟動過程599
54.2 DebugMe1.exe示例講解600
54.2.1安裝服務600
54.2.2啟動服務602
54.2.3源代碼604
54.3服務進程的調試606
54.3.1問題在於SCM 606
54.3.2調試器無所不能606
54.3.3常用方法606
54.4服務調試練習606
54.4.1直接調試:強制設置EIP 606
54.4.2服務調試的常用方法:“附加”方式609
54 .5小結615

第55章調試練習2:自我創建616
55.1自我創建616
55.2工作原理617
55.2.1創建子進程(掛起模式) 617
55.2.2更改EIP 618
55.2.3恢復主線程618
55.3示例程序源代碼618
55.4調試練習620
55.4.1需要考慮的事項620
55.4.2 JIT調試621
55 .4.3 DebugMe2.exe 622
55.5小結626

第56章調試練習3:PE映像切換627
56.1 PE映像627
56.2 PE映像切換628
56.3示例程序:Fake.exe、Real.exe、DebugMe3.exe 628
56.4調試1 631
56.4.1 Open輸入運行參數631
56.4.2 main()函數632
56.4.3 SubFunc_1() 634
56.4.4 CreateProcess(“fake.exe”, CREATE_SUSPENDED) 635
56.4.5 SubFunc_2() 635
56.4.6 SubFunc_3() 641
56.4.7 ResumeThread() 644
56.5調試2 644
56.5.1思考645
56.5.2向EP設置無限循環645
56.6小結647

第57章調試練習4:Debug Blocker 648
57.1 Debug Blocker 648
57.2反調試特徵648
57.2.1父與子的關係649
57.2.2被調試進程不能再被其他調試器調試649
57.2.3終止調試進程的同時也終止被調試進程649
57.2.4調試器操作被調試者的代碼649
57.2.5調試器處理被調試進程中發生的異常649
57.3調試練習:DebugMe4.exe 650
57.4第一次調試650
57.4.1選定調試的起始位置650
57.4.2 main() 650
57.5第二次調試651
57.6第三次調試653
57. 7第四次調試656
57.8第五次調試658
57.8.1系統斷點658
57.8.2 EXCEPTION_ILLEGAL_INSTRUCTION(1) 659
57.8.3 EXCEPTION_ILLEGAL_INSTRUCTION(2) 660
57.9第六次調試661
57.9.1 40121D(第一個異常) 661
57.9.2 401299(第二個異常) 665
57.10第七次調試667
57.10.1靜態方法668
57.10.2動態方法669
57.11小結673

結束語674
索引676

購物須知

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約20個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。