| | | 逆向工程核心原理(圖靈出品) | 該商品所屬分類:圖書 -> 人民郵電出版社 | 【市場價】 | 1049-1520元 | 【優惠價】 | 656-950元 | 【作者】 | 李承遠武傳海 | 【出版社】 | 人民郵電出版社 | 【ISBN】 | 9787115350183 | 【折扣說明】 | 一次購物滿999元台幣免運費+贈品 一次購物滿2000元台幣95折+免運費+贈品 一次購物滿3000元台幣92折+免運費+贈品 一次購物滿4000元台幣88折+免運費+贈品
| 【本期贈品】 | ①優質無紡布環保袋,做工棒!②品牌簽字筆 ③品牌手帕紙巾
| |
版本 | 正版全新電子版PDF檔 | 您已选择: | 正版全新 | 溫馨提示:如果有多種選項,請先選擇再點擊加入購物車。*. 電子圖書價格是0.69折,例如了得網價格是100元,電子書pdf的價格則是69元。 *. 購買電子書不支持貨到付款,購買時選擇atm或者超商、PayPal付款。付款後1-24小時內通過郵件傳輸給您。 *. 如果收到的電子書不滿意,可以聯絡我們退款。謝謝。 | | | | 內容介紹 | |
![](/c49/99/12877221.jpg)
出版社:人民郵電出版社 ISBN:9787115350183 版次:1 商品編碼:12877221 品牌:iTuring 包裝:平裝 開本:16開 出版時間:2021-06-01 用紙:膠版紙 頁數:679 正文語種:中文 作者:李承遠,武傳海
" 編輯推薦 書中用到的幾乎所有示例都基於作者在逆向分析實踐中獲得的知識與經驗,是其親自開發的程序,緊扣各章主題,無累贅。 作者將培訓經驗應用到本書的組織結構、內容講解、示例選擇等各方面,以求將較為難懂的技術以更易懂的方式呈現給各位。 作者幾年前就開設了一個逆向技術學習博客並運營到今,通過與訪問者之間的交流,充分了解了初學者們的困惑和需求。 內容簡介 《逆向工程核心原理》十分詳盡地介紹了代碼逆向分析的核心原理。作者在Ahnlab 研究所工作多年,書中不僅包括其以此經驗為基礎親自編寫的大量代碼,還包含了逆向工程研究人員必須了解的各種技術和技巧。徹底理解並切實掌握逆向工程這門技術,就能在眾多IT相關領域進行拓展運用,這本《逆向工程核心原理》就是通向逆向工程大門的捷徑。 想成為逆向工程研究員的讀者或正在從事逆向開發工作的開發人員一定會通過《逆向工程核心原理》獲得很大幫助。同時,想成為安全領域專家的人也可從《逆向工程核心原理》輕松起步。 作者簡介 李承遠 在AhnLab從事惡意代碼分析工作,一直維護著一個逆向分析技術專業學習博客。從接觸逆向分析技術開始就為其迷人魅力深深吸引,對逆向分析技術的傳播及多領域應用非常關注,喜歡讀書、發獃,也向往新的挑戰。
武傳海 擅韓語,喜計算機,有多年翻譯經驗,內容涉及多個領域,尤其擅長翻譯各類計算機圖書,已出版多部韓語譯著。 QQ:768160125 jeonhae@126.com 目錄 目錄
第 一部分代碼逆向技術基礎
第 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.1Hello 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.3API檢索法(1):在調用代碼中設置斷點20 2.4.4API檢索法(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.2IA-32寄存器34 4.3小結40
第5章棧41 5.1棧41 5.1.1棧的特征41 5.1.2棧操作示例41
第6章分析abex’ crackme#144 6.1abex’ crackme #144 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.exe49 7.2.1StackFrame.cpp50 7.2.2開始執行main()函數&生成棧幀51 7.2.3設置局部變量52 7.2.4add()函數參數傳遞與調用53 7.2.5開始執行add()函數&生成棧幀54 7.2.6設置add()函數的局部變量(x, y)55 7.2.7ADD運算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.1Disasm選項59 7.3.2Analysis1選項60 7.4小結61
第8章abex’ crackme #262 8.1運行abex’ crackme #262 8.2Visual Basic文件的特征63 8.2.1VB專用引擎63 8.2.2本地代碼和偽代碼63 8.2.3事件處理程序63 8.2.4未文檔化的結構體63 8.3開始調試63 8.3.1間接調用64 8.3.2RT_MainStruct結構體64 8.3.3ThunRTMain()函數65 8.4分析crackme65 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.1Process Explorer74 9.2具體有哪些優點呢75 9.3sysinternals75
第 10章函數調用約定76 10.1函數調用約定76 10.1.1cdecl76 10.1.2stdcall77 10.1.3fastcall78
第 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.2PE文件格式90 13.2.1基本結構91 13.2.2VA&RVA92 13.3PE頭92 13.3.1DOS頭93 13.3.2DOS存根94 13.3.3NT頭94 13.3.4NT頭:文件頭95 13.3.5NT頭:可選頭97 13.3.6節區頭101 13.4RVA to RAW104 13.5IAT105 13.5.1DLL105 13.5.2IMAGE_IMPORT_DESCRIPTOR107 13.5.3使用notepad.exe練習108 13.6EAT112 13.6.1IMAGE_EXPORT_DIRECTORY113 13.6.2使用kernel32.dll練習114 13.7高 級PE116 13.7.1PEView.exe116 13.7.2Patched PE117 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.1notepad.exe的EP代碼127 15.2notepad_upx.exe的EP代碼127 15.3跟蹤UPX文件129 15.3.1OllyDbg的跟蹤命令129 15.3.2循環 #1129 15.3.3循環 #2130 15.3.4循環 #3131 15.3.5循環 #4131 15.4快速查找UPX OEP的方法132 15.4.1在POPAD指令後的JMP指令處設置斷點132 15.4.2在棧中設置硬件斷點133 15.5小結133
第 16章基址重定位表135 16.1PE重定位135 16.1.1DLL/SYS135 16.1.2EXE136 16.2PE重定位時執行的操作136 16.3PE重定位操作原理138 16.3.1基址重定位表138 16.3.2IMAGE_BASE_RELOCATION結構體139 16.3.3基址重定位表的分析方法139 16.3.4練習141
第 17章從可執行文件中刪除.reloc節區142 17.1.reloc節區142 17.2reloc.exe142 17.2.1刪除.reloc節區頭142 17.2.2刪除.reloc節區143 17.2.3修改IMAGE_FILE_HEADER143 17.2.4修改IMAGE_OPTIONAL_HEADER144 17.3小結145
第 18章UPack PE文件頭詳細分析146 18.1UPack說明146 18.2使用UPack壓縮notepad.exe146 18.3使用Stud_PE工具148 18.4比較PE文件頭148 18.4.1原notepad.exe的PE文件頭149 18.4.2notepad_upack.exe運行時壓縮的PE文件頭149 18.5分析UPack的PE文件頭150 18.5.1重疊文件頭150 18.5.2IMAGE_FILE_HEADER.SizeOfOptionalHeader150 18.5.3IMAGE_OPTIONAL_HEADER.NumberOf-RvaAndSizes152 18.5.4IMAGE_SECTION_HEADER153 18.5.5重疊節區155 18.5.6RVA to RAW156 18.5.7導入表(IMAGE_IMPORT_DESCRIPTOR array)158 18.5.8導入地址表160 18.6小結161
第 19章UPack調試 查找OEP162 19.1OllyDbg運行錯誤162 19.2解碼循環163 19.3設置IAT165 19.4小結166
第 20章“內嵌補丁”練習167 20.1內嵌補丁167 20.2練習:Patchme168 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.3SetWindowsHookEx()181 21.4鍵盤消息鉤取練習182 21.4.1練習示例HookMain.exe182 21.4.2分析源代碼185 21.5調試練習187 21.5.1調試HookMain.exe188 21.5.2調試Notepad.exe進程內的KeyHook.dll190 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.1DLL注入197 23.2DLL注入示例198 23.2.1改善功能與修復Bug198 23.2.2消息鉤取198 23.2.3API鉤取198 23.2.4其他應用程序199 23.2.5惡意代碼199 23.3DLL注入的實現方法199 23.4CreateRemoteThread()199 23.4.1練習示例myhack.dll199 23.4.2分析示例源代碼203 23.4.3調試方法208 23.5AppInit_DLLs210 23.5.1分析示例源碼211 23.5.2練習示例myhack2.dll212 23.6SetWindowsHookEx()214 23.7小結214
第 24章DLL卸載216 24.1DLL卸載的工作原理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.3DLL卸載練習220 24.3.1復制文件及運行notepad.exe220 24.3.2注入myhack.dll221 24.3.3卸載myhack.dll222
第 25章通過修改PE加載DLL224 25.1練習文件224 25.1.1TextView.exe224 25.1.2TextView_patched.exe225 25.2源代碼 - myhack3.cpp227 25.2.1DllMain()227 25.2.2Download228 25.2.3DropFile()229 25.2.4dummy()230 25.3修改TextView.exe文件的準備工作231 25.3.1修改思路231 25.3.2查看IDT是否有足夠空間231 25.3.3移動IDT233 25.4修改TextView.exe235 25.4.1修改導入表的RVA值235 25.4.2刪除綁定導入表235 25.4.3創建新IDT235 25.4.4設置Name、INT、IAT236 25.4.5修改IAT節區的屬性值238 25.5檢測驗證240 25.6小結241
第 26章PE Tools242 26.1PE Tools242 26.1.1進程內存轉儲243 26.1.2PE編輯器245 26.2小結245
第 27章代碼注入247 27.1代碼注入247 27.2DLL注入與代碼注入247 27.3練習示例249 27.3.1運行notepad.exe249 27.3.2運行CodeInjection.exe249 27.3.3彈出消息框250 27.4CodeInjection.cpp250 27.4.1main()函數251 27.4.2ThreadProc()函數251 27.4.3InjectCode()函數254 27.5代碼注入調試練習256 27.5.1調試notepad.exe256 27.5.2設置OllyDbg選項256 27.5.3運行CodeInjection.exe257 27.5.4線程開始代碼258 27.6小結259
第 28章使用彙編語言編寫注入代碼260 28.1目標260 28.2彙編編程260 28.3OllyDbg的彙編命令260 28.3.1編寫ThreadProc()函數262 28.3.2保存文件265 28.4編寫代碼注入程序266 28.4.1獲取ThreadProc()函數的二進制代碼266 28.4.2CodeInjection2.cpp267 28.5調試練習270 28.5.1調試notepad.exe270 28.5.2設置OllyDbg選項270 28.5.3運行CodeInjection2.exe271 28.5.4線程起始代碼272 28.6詳細分析272 28.6.1生成棧幀272 28.6.2THREAD_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_OK277 28.6.9壓入MessageBoxA()函數的參數 2 -“ReverseCore”277 28.6.10壓入MessageBoxA()函數的參數 3 -“www.reversecore.com”278 28.6.11壓入MessageBoxA()函數的參數 4 -NULL279 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.2API是什麼282 29.3API鉤取283 29.3.1正常調用API283 29.3.2鉤取API調用284 29.4技術圖表284 29.4.1方法對像(是什麼)285 29.4.2位置(何處)285 29.4.3技術(如何)286 29.4.4API286
第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.1main()296 30.6.2DebugLoop()296 30.6.3EXIT_PROCESS_DEBUG_EVENT298 30.6.4CREATE_PROCESS_DEBUG_EVENT-OnCreateProcess-DebugEvent()298 30.6.5EXCEPTION_DEBUG_EVENT-OnException-DebugEvent()300
第31章關於調試器305 31.1OllyDbg305 31.2IDA Pro305 31.3WinDbg306
第32章計算器顯示中文數字308 32.1技術圖表308 32.2選定目標API309 32.3IAT鉤取工作原理312 32.4練習示例314 32.5源代碼分析316 32.5.1DllMain()316 32.5.2MySetWindowTextW()317 32.5.3hook_iat()319 32.6調試被注入的DLL文件322 32.6.1DllMain()325 32.6.2hook_iat()325 32.6.3MySetWindowTextW()327 32.7小結328
第33章隱藏進程329 33.1技術圖表329 33.2API代碼修改技術的原理329 33.2.1鉤取之前330 33.2.2鉤取之後330 33.3進程隱藏332 33.3.1進程隱藏工作原理332 33.3.2相關API332 33.3.3隱藏技術的問題333 33.4練習 #1(HideProc.exe,stealth.dll)333 33.4.1運行notepad.exe、procexp.exe、taskmgr.exe334 33.4.2運行HideProc.exe334 33.4.3確認stealth.dll注入成功334 33.4.4查看notepad.exe進程是否隱藏成功335 33.4.5取消notepad.exe進程隱藏336 33.5源代碼分析336 33.5.1HideProc.cpp336 33.5.2stealth.cpp338 33.6全局API鉤取344 33.6.1Kernel32.CreateProcess() API344 33.6.2Ntdll.ZwResumeThread() API345 33.7練習#2(HideProc2.exe,Stealth2.dll)345 33.7.1復制stealth2.dll文件到%SYSTEM%文件夾中345 33.7.2運行HideProc2.exe -hide346 33.7.3運行ProcExp.exe¬epad.exe346 33.7.4運行HideProc2.exe -show347 33.8源代碼分析348 33.8.1HideProc2.cpp348 33.8.2stealth2.cpp348 33.9利用“熱補丁”技術鉤取API350 33.9.1API代碼修改技術的問題350 33.9.2 “熱補丁”(修改7個字節代碼)350 33.10練習 #3:stealth3.dll353 33.11源代碼分析353 33.12使用“熱補丁”API鉤取技術時需要考慮的問題356 33.13小結357
第34章高 級全局API鉤取:IE連接控制359 34.1目標API359 34.2IE進程結構361 34.3關於全局API鉤取的概念362 34.3.1常規API鉤取363 34.3.2全局API鉤取363 34.4ntdll!ZwResumeThread() API364 34.5練習示例:控制IE網絡連接368 34.5.1運行IE368 34.5.2注入DLL369 34.5.3創建新選項卡369 34.5.4嘗試連接網站370 34.5.5卸載DLL371 34.5.6課外練習372 34.6示例源代碼372 34.6.1DllMain()372 34.6.2NewInternetConnectW()373 34.6.3NewZwResumeThread()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.164位計算環境380 36.1.164位CPU380 36.1.264位OS381 36.1.3Win32 API381 36.1.4WOW64381 36.1.5練習:WOW64Test384 36.2編譯64位文件385 36.2.1Microsoft Windows SDK(Software Development Kit)386 36.2.2設置Visual C++ 2010 Express環境386
第37章x64處理器389 37.1x64中新增或變更的項目389 37.1.164位389 37.1.2內存389 37.1.3通用寄存器389 37.1.4CALL/JMP指令390 37.1.5函數調用約定391 37.1.6棧 & 棧幀392 37.2練習:Stack32.exe & Stack64.exe392 37.2.1Stack32.exe392 37.2.2Stack64.exe394 37.3小結397
第38章PE32+398 38.1PE32+(PE+、PE64)398 38.1.1IMAGE_NT_HEADERS398 38.1.2IMAGE_FILE_HEADER398 38.1.3IMAGE_OPTIONAL_HEADER399 38.1.4IMAGE_THUNK_DATA401 38.1.5IMAGE_TLS_DIRECTORY403
第39章WinDbg405 39.1WinDbg405 39.1.1WinDbg的特征405 39.1.2運行WinDbg406 39.1.3內核調試407 39.1.4WinDbg基本指令409
第40章64位調試411 40.1x64環境下的調試器411 40.264位調試411 40.3PE32:WOW64Test_x86.exe413 40.3.1EP代碼414 40.3.2Startup代碼414 40.3.3main()函數415 40.4PE32+:WOW64Test_x64.exe416 40.4.1繫統斷點416 40.4.2EP代碼417 40.4.3Startup代碼418 40.4.4main()函數420 40.5小結423
第41章ASLR424 41.1Windows內核版本424 41.2ASLR424 41.3Visual C++424 41.4ASLR.exe425 41.4.1節區信息426 41.4.2IMAGE_FILE_HEADER\\Characteristics427 41.4.3IMAGE_OPTIONAL_HEADER\\DLL Characteristics428 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調試 #1436 43.2.2調試 #2438 43.3練習:使CreateRemoteThread()正常工作440 43.3.1方法 #1:修改CreateSuspended參數值440 43.3.2方法 #2:操縱條件分支441 43.4稍作整理443 43.5InjectDll_new.exe443 43.5.1InjectDll_new.cpp443 43.5.2注入練習446
第44章InjDll.exe:DLL注入專用工具448 44.1InjDll.exe448 44.1.1使用方法448 44.1.2使用示例449 44.1.3注意事項450
第六部分高 級逆向分析技術
第45章TLS回調函數452 45.1練習 #1:HelloTls.exe452 45.2TLS453 45.2.1IMAGE_DATA_DIRECTORY[9]453 45.2.2IMAGE_TLS_DIRECTORY454 45.2.3回調函數地址數組454 45.3TLS回調函數455 45.4練習 #2:TlsTest.exe456 45.4.1DLL_PROCESS_ATTACH457 45.4.2DLL_THREAD_ATTACH457 45.4.3DLL_THREAD_DETACH457 45.4.4DLL_PROCESS_DETACH457 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章TEB466 46.1TEB466 46.1.1TEB結構體的定義466 46.1.2TEB結構體成員466 46.1.3重要成員469 46.2TEB訪問方法470 46.2.1Ntdll.NtCurrentTeb()470 46.2.2FS段寄存器471 46.3小結472
第47章PEB473 47.1PEB473 47.1.1PEB訪問方法473 47.1.2PEB結構體的定義474 47.1.3PEB結構體的成員475 47.2PEB的重要成員477 47.2.1PEB.BeingDebugged478 47.2.2PEB.ImageBaseAddress478 47.2.3PEB.Ldr479 47.2.4PEB.ProcessHeap & PEB.NtGlobalFlag480 47.3小結480
第48章SEH481 48.1SEH481 48.2SEH練習示例 #1481 48.2.1正常運行481 48.2.2調試運行482 48.3OS的異常處理方法484 48.3.1正常運行時的異常處理方法484 48.3.2調試運行時的異常處理方法484 48.4異常485 48.4.1EXCEPTION_ACCESS_VIOLATION(C0000005)486 48.4.2EXCEPTION_BREAKPOINT(80000003)486 48.4.3EXCEPTION_ILLEGAL_INSTRUCTION(C000001D)488 48.4.4EXCEPTION_INT_DIVIDE_BY_ZERO(C0000094)488 48.4.5EXCEPTION_SINGLE_STEP(80000004)489 48.5SEH詳細說明489 48.5.1SEH鏈489 48.5.2異常處理函數的定義489 48.5.3TEB.NtTib.ExceptionList491 48.5.4SEH安裝方法492 48.6SEH練習示例 #2(seh.exe)492 48.6.1查看SEH鏈493 48.6.2添加SEH493 48.6.3發生異常494 48.6.4查看異常處理器參數494 48.6.5調試異常處理器496 48.6.6刪除SEH498 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.1IA-32指令502 49.2常用術語502 49.2.1反彙編器503 49.2.2反編譯器504 49.2.3反編譯簡介504 49.3IA-32指令格式506 49.3.1指令前綴507 49.3.2操作碼507 49.3.3ModR/M507 49.3.4SIB508 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.3ModR/M512 49.5.4Group514 49.5.5前綴516 49.5.6雙字節操作碼518 49.5.7移位值&立即數519 49.5.8SIB520 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.2PEB529 51.2.1BeingDebugged(+0x2)531 51.2.2Ldr(+0xC)531 51.2.3Process Heap(+0x18)532 51.2.4NtGlobalFlag(+0x68)533 51.2.5練習: StaAD_PEB.exe534 51.2.6破解之法534 51.3NtQueryInformationProcess()537 51.3.1ProcessDebugPort(0x7)538 51.3.2ProcessDebugObjectHandle(0x1E)539 51.3.3ProcessDebugFlags(0x1F)539 51.3.4練習:StaAD_NtQIP.exe540 51.3.5破解之法540 51.4NtQuerySystemInformation()542 51.4.1SystemKernelDebugger-Information(0x23)544 51.4.2練習:StaAD_NtQSI.exe545 51.4.3破解之法545 51.5NtQueryObject()545 51.6ZwSetInformationThread()549 51.6.1練習:StaAD_ZwSIT.exe549 51.6.2破解之法550 51.7TLS回調函數550 51.8ETC551 51.8.1練習:StaAD_FindWindow.exe551 51.8.2破解之法551 51.9小結553
第52章動態反調試技術554 52.1動態反調試技術的目的554 52.2異常554 52.2.1SEH554 52.2.2SetUnhandledException-Filter()558 52.3Timing Check562 52.3.1時間間隔測量法562 52.3.2RDTSC563 52.4陷阱標志565 52.4.1單步執行566 52.4.2INT 2D569 52.50xCC探測572 52.5.1API斷點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.5Stolen Bytes(Remove OEP)584 53.6API重定向587 53.6.1原代碼588 53.6.2API重定向示例 #1588 53.6.3API重定向示例#2589 53.7Debug Blocker(Self Debugging)593 53.8小結595
第八部分調試練習
第54章調試練習1:服務598 54.1服務進程的工作原理598 54.1.1服務控制器598 54.1.2服務啟動過程599 54.2DebugMe1.exe示例講解600 54.2.1安裝服務600 54.2.2啟動服務602 54.2.3源代碼604 54.3服務進程的調試606 54.3.1問題在於SCM606 54.3.2調試器無所不能606 54.3.3常用方法606 54.4服務調試練習606 54.4.1直接調試:強制設置EIP606 54.4.2服務調試的常用方法:“附加”方式609 54.5小結615
第55章調試練習2:自我創建616 55.1自我創建616 55.2工作原理617 55.2.1創建子進程(掛起模式)617 55.2.2更改EIP618 55.2.3恢復主線程618 55.3示例程序源代碼618 55.4調試練習620 55.4.1需要考慮的事項620 55.4.2JIT調試621 55.4.3DebugMe2.exe622 55.5小結626
第56章調試練習3:PE映像切換627 56.1PE映像627 56.2PE映像切換628 56.3示例程序:Fake.exe、Real.exe、DebugMe3.exe628 56.4調試1631 56.4.1Open 輸入運行參數631 56.4.2main()函數632 56.4.3SubFunc_1()634 56.4.4CreateProcess(“fake.exe”,CREATE_SUSPENDED)635 56.4.5SubFunc_2()635 56.4.6SubFunc_3()641 56.4.7ResumeThread()644 56.5調試2644 56.5.1思考645 56.5.2向EP設置無限循環645 56.6小結647
第57章調試練習4:Debug Blocker648 57.1Debug Blocker648 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.exe650 57.4第 一次調試650 57.4.1選定調試的起始位置650 57.4.2main()650 57.5第 二次調試651 57.6第三次調試653 57.7第四次調試656 57.8第五次調試658 57.8.1繫統斷點658 57.8.2EXCEPTION_ILLEGAL_INSTRUCTION(1)659 57.8.3EXCEPTION_ILLEGAL_INSTRUCTION(2)660 57.9第六次調試661 57.9.140121D(第 一個異常)661 57.9.2401299(第 二個異常)665 57.10第七次調試667 57.10.1靜態方法668 57.10.2動態方法669 57.11小結673
結束語674 索引676 查看全部↓
" | | | | | |