《有趣的二進(jìn)制:軟件安全與逆向分析》通過逆向工程,揭開人們熟知的軟件背后的機(jī)器語言的秘密,并教給讀者讀懂這些二進(jìn)制代碼的方法。理解了這些方法,技術(shù)人員就能有效地Debug,防止軟件受到惡意攻擊和反編譯。本書涵蓋的技術(shù)包括:匯編與反匯編、調(diào)試與反調(diào)試、緩沖區(qū)溢出攻擊與底層安全、鉤子與注入、Metasploit 等安全工具。
打開黑箱,感受底層世界的樂趣 1. 如何防止軟件被別人分析? 2. 如何知道軟件在運(yùn)行時(shí)都干了什么? 3. 如何防止攻擊者利用漏洞奪取系統(tǒng)權(quán)限?
愛甲健二(作者)
曾就職于NetAgent株式會(huì)社,負(fù)責(zé)逆向工程、惡意軟件分析、滲透測試等工作。2008年7月任董事。此后,在株式會(huì)社Fourteenforty技術(shù)研究所(現(xiàn)更名為株式會(huì)社FFRI)從事計(jì)算機(jī)安全技術(shù)研究和軟件開發(fā)工作。
曾參加Black Hat Japan 2008(日本)、HITCON 2011(中國臺(tái)灣)等會(huì)議,并發(fā)表重大研究成果。著有《匯編語言教程》(アセンブリ言語の教科書)、《TCP/IP教程》(TCP/IPの教科書)等。
周自恒(譯者)
技術(shù)圖書譯者,IT、編程及自然科學(xué)愛好者,初中時(shí)曾獲得信息學(xué)奧賽天津賽區(qū)一等獎(jiǎng),曾任某管理咨詢公司戰(zhàn)略技術(shù)總監(jiān)。
譯有《圖解CIO工作指南(第4版)》《大數(shù)據(jù)的沖擊》《代碼的未來》《30天自制操作系統(tǒng)》《圖解密碼技術(shù)》《家用游戲機(jī)簡史》等。
第1章 通過逆向工程學(xué)習(xí)如何讀懂二進(jìn)制代碼
1.1 先來實(shí)際體驗(yàn)一下軟件分析吧
1.1.1 通過Process Monitor的日志來確認(rèn)程序的行為
1.1.2 從注冊表訪問中能發(fā)現(xiàn)些什么
1.1.3 什么是逆向工程
專欄:逆向工程技術(shù)大賽
1.2 嘗試靜態(tài)分析
1.2.1 靜態(tài)分析與動(dòng)態(tài)分析
專欄:Stirling與BZ Editor的區(qū)別
1.2.2 用二進(jìn)制編輯器查看文件內(nèi)容
1.2.3 看不懂匯編語言也可以進(jìn)行分析
1.2.4 在沒有源代碼的情況下搞清楚程序的行為
1.2.5 確認(rèn)程序的源代碼
1.3 嘗試動(dòng)態(tài)分析
1.3.1 設(shè)置Process Monitor的過濾規(guī)則
1.3.2 調(diào)試器是干什么用的
1.3.3 用OllyDbg洞察程序的詳細(xì)邏輯
1.3.4 對反匯編代碼進(jìn)行分析
專欄:什么是寄存器
1.3.5 將分析結(jié)果與源代碼進(jìn)行比較
專欄:選擇自己喜歡的調(diào)試器
1.4 學(xué)習(xí)*基礎(chǔ)的匯編指令
1.4.1 沒必要記住所有的匯編指令
1.4.2 匯編語言是如何實(shí)現(xiàn)條件分支的
1.4.3 參數(shù)存放在棧中
1.4.4 從匯編代碼聯(lián)想到C語言源代碼
1.5 通過匯編指令洞察程序行為
1.5.1 給函數(shù)設(shè)置斷點(diǎn)
1.5.2 反匯編并觀察重要邏輯
專欄:學(xué)習(xí)編寫匯編代碼
第2章 在射擊游戲中防止玩家作弊
2.1 解讀內(nèi)存轉(zhuǎn)儲(chǔ)
2.1.1 射擊游戲的規(guī)則
2.1.2 修改4個(gè)字節(jié)就能得高分
2.1.3 獲取內(nèi)存轉(zhuǎn)儲(chǔ)
2.1.4 從進(jìn)程異常終止瞬間的狀態(tài)查找崩潰的原因
2.1.5 有效運(yùn)用實(shí)時(shí)調(diào)試
2.1.6 通過轉(zhuǎn)儲(chǔ)文件尋找出錯(cuò)原因
專欄:除了個(gè)人電腦,在其他計(jì)算機(jī)設(shè)備上運(yùn)行的程序也可以進(jìn)行
分析嗎
專欄:分析Java編寫的應(yīng)用程序
2.2 如何防止軟件被別人分析
2.2.1 反調(diào)試技術(shù)
專欄:檢測調(diào)試器的各種方法
2.2.2 通過代碼混淆來防止分析
專欄:代碼混淆的相關(guān)話題
2.2.3 將可執(zhí)行文件進(jìn)行壓縮
2.2.4 將壓縮過的可執(zhí)行文件解壓縮:解包
2.2.5 通過手動(dòng)解包UPX來理解其工作原理
2.2.6 用硬件斷點(diǎn)對ASPack進(jìn)行解包
專欄:如何分析.NET編寫的應(yīng)用程序
第3章 利用軟件的漏洞進(jìn)行攻擊
3.1 利用緩沖區(qū)溢出來執(zhí)行任意代碼
3.1.1 引發(fā)緩沖區(qū)溢出的示例程序
3.1.2 讓普通用戶用管理員權(quán)限運(yùn)行程序
3.1.3 權(quán)限是如何被奪取的
3.1.4 棧是如何使用內(nèi)存空間的
3.1.5 攻擊者如何執(zhí)行任意代碼
3.1.6 用gdb 查看程序運(yùn)行時(shí)的情況
3.1.7 攻擊代碼示例
3.1.8 生成可用作shellcode的機(jī)器語言代碼
3.1.9 對0x00的改進(jìn)
專欄:printf類函數(shù)的字符串格式化bug
3.2 防御攻擊的技術(shù)
3.2.1 地址隨機(jī)化:ASLR
3.2.2 除存放可執(zhí)行代碼的內(nèi)存空間以外,對其余內(nèi)存空間盡量
禁用執(zhí)行權(quán)限:Exec-Shield
3.2.3 在編譯時(shí)插入檢測棧數(shù)據(jù)完整性的代碼:StackGuard
3.3 繞開安全機(jī)制的技術(shù)
3.3.1 使用libc中的函數(shù)來進(jìn)行攻擊:Return-into-libc
3.3.2 利用未隨機(jī)化的模塊內(nèi)部的匯編代碼進(jìn)行攻擊:ROP
專欄:計(jì)算機(jī)安全為什么會(huì)變成貓鼠游戲
第4章 自由控制程序運(yùn)行方式的編程技巧
4.1 通過自制調(diào)試器來理解其原理
4.1.1 親手做一個(gè)簡單的調(diào)試器,在實(shí)踐中學(xué)習(xí)
4.1.2 調(diào)試器到底是怎樣工作的
4.1.3 實(shí)現(xiàn)反匯編功能
4.1.4 運(yùn)行改良版調(diào)試器
4.2 在其他進(jìn)程中運(yùn)行任意代碼:代碼注入
4.2.1 向其他進(jìn)程注入代碼
4.2.2 用SetWindowsHookEx劫持系統(tǒng)消息
4.2.3 將DLL路徑配置到注冊表的AppInit_DLLs項(xiàng)
4.2.4 通過CreateRemoteThread在其他進(jìn)程中創(chuàng)建線程
4.2.5 注入函數(shù)
4.3 任意替換程序邏輯:API 鉤子
4.3.1 API 鉤子的兩種類型
4.3.2 用Detours實(shí)現(xiàn)一個(gè)簡單的API 鉤子
4.3.3 修改消息框的標(biāo)題欄
專欄:DLL注入和API鉤子是“黑客”技術(shù)的代表?
第5章 使用工具探索更廣闊的世界
5.1 用Metasploit Framework驗(yàn)證和調(diào)查漏洞
5.1.1 什么是Metasploit Framework
5.1.2 安全漏洞的信息從何而來
5.1.3 搭建用于測試漏洞的環(huán)境
5.1.4 利用漏洞進(jìn)行攻擊
專欄:深入探索shellcode
5.1.5 一個(gè)ROP的實(shí)際例子
5.2 用EMET觀察反ROP的機(jī)制
5.2.1 什么是EMET
5.2.2 Anti-ROP的設(shè)計(jì)獲得了藍(lán)帽獎(jiǎng)
5.2.3 如何防止攻擊
5.2.4 搞清楚加載器的邏輯
5.2.5 DLL的程序邏輯
5.2.6 CALL-RETN檢查
5.2.7 如何防止誤判
5.2.8 檢查棧的合法性
5.3 用REMnux 分析惡意軟件
5.3.1 什么是REMnux
5.3.2 更新特征數(shù)據(jù)庫
5.3.3 掃描目錄
5.4 用ClamAV檢測惡意軟件和漏洞攻擊
5.4.1 ClamAV的特征文件
5.4.2 解壓縮.cvd文件
5.4.3 被檢測到的文件詳細(xì)信息
5.4.4 檢測所使用的打包器以及疑似惡意軟件的文件
5.5 用Zero Wine Tryouts分析惡意軟件
5.5.1 REMnux與Zero Wine Tryouts的區(qū)別
5.5.2 運(yùn)行機(jī)制
5.5.3 顯示用戶界面
5.5.4 確認(rèn)分析報(bào)告
專欄:嘗試開發(fā)自己的工具
5.6 盡量減少人工分析:啟發(fā)式技術(shù)
5.6.1 惡意軟件應(yīng)對極限的到來:平均每天60000個(gè)
5.6.2 啟發(fā)式技術(shù)革命
5.6.3 用兩個(gè)惡意軟件進(jìn)行測試
附錄
A.1 安裝IDA
A.2 安裝OllyDbg
A.3 安裝WinDbg
A.4 安裝Visual Studio 2010
A.5 安裝Metasploit
A.6 分析工具
Stirling / BZ Editor
Process Monitor
Process Explorer
Sysinternals工具
兔耳旋風(fēng)
參考文獻(xiàn)
后記