內(nèi)容簡介 本書主要講解了相關系統(tǒng)底層知識,例如,PE格式深入分析,調(diào)試API應用,未公開技術SEH的深入研究等,從而使讀者在了解這些底層知識后,可以應用到自己的軟件保護方案如各種反跟蹤技術的實現(xiàn)中。本書還首度公開了如何編寫加殼軟件,以及如何將殼與程序融合在一起等一些熱門技術。 本書是由密界一流如何對軟件進行加密保護,以幫助程序員更好地保護自己的軟件。書中介紹了高手共同打造的,讀者將從本書中獲得許多極具商業(yè)價值的內(nèi)幕技術,是專業(yè)開發(fā)人員不可多得的一本好書。
目錄 第1章 PE文件格式的深入分析 1 1.1 PE文件格式縱覽 1 1.1.1 區(qū)塊 3 1.1.2 相對虛擬地址 5 1.1.3 數(shù)據(jù)目錄表 6 1.1.4 輸入函數(shù) 7 1.2 PE文件結構 10 1.2.1 MS-DOS頭部 10 1.2.2 IMAGE_NT_HEADERS頭部 10 1.2.3 區(qū)塊表 14 1.2.4 各種區(qū)塊的描述 16 1.2.5 輸出表 17 1.2.6 輸出轉向 20 1.2.7 輸入表 20 1.2.8 綁定輸入 22 1.2.9 延遲裝入數(shù)據(jù) 24 1.2.10 資源 25 1.2.11 基址重定位 27 1.2.12 調(diào)試目錄 29 1.2.13 .NET頭部 30 1.2.14 TLS初始化 31 1.2.15 程序異常數(shù)據(jù) 32
第2章 PE分析工具編寫 33 2.1 文件格式檢查 34 2.2 FileHeader和OptionalHeader內(nèi)容的讀取 36 2.3 得到數(shù)據(jù)目錄表信息 40 2.4 得到區(qū)塊表信息 43 2.5 得到輸出表信息 47 2.6 得到輸入表信息 52
第3章 Win32 調(diào)試API 60 3.1 Win32調(diào)試API原理 60 3.1.1 調(diào)試相關函數(shù)簡要說明 60 3.1.2 調(diào)試事件 64 3.1.3 如何在調(diào)試時創(chuàng)建并跟蹤一個進程 67 3.1.4 調(diào)試循環(huán)體 68 3.1.5 如何處理調(diào)試事件 69 3.1.6 線程環(huán)境詳解 71 3.1.7 如何在另一個進程中注入代碼 75 3.2 利用調(diào)試API編寫脫殼機 77 3.2.1 tElock 0.98脫殼簡介 77 3.2.2 脫殼機的編寫 78 3.3 利用調(diào)試API制作內(nèi)存補丁 88 3.3.1 跨進程內(nèi)存存取機制 90 3.3.2 Debug API機制 92
第4章 Windows下的異常處理 105 4.1 基本概念 106 4.1.1 Windows下的軟件異常 106 4.1.2 異常處理的基本過程 109 4.1.3 SEH的分類 110 4.1.4 未公開的可靠嗎 110 4.2 SEH相關數(shù)據(jù)結構 111 4.2.1 TIB結構 111 4.2.2 EXCEPTION_REGISTRATION結構 112 4.2.3 EXCEPTION_POINTERS,EXCEPTION_RECORD,CONTEXT結構 112 4.3 異常處理程序原理及設計 115 4.3.1 相關API 116 4.3.2 頂層異常處理 117 4.3.3 線程異常處理 121 4.3.4 異常處理的堆棧展開 132 4.3.5 異常處理程序設計中的注意事項 142 4.4 SEH的簡單應用 143 4.4.1 Windows 9x下利用SEH進入Ring0 143 4.4.2 利用SEH實現(xiàn)對自身的單步自跟蹤 145 4.4.3 其他應用 147 4.5 系統(tǒng)背后的秘密 148 4.6 VC如何封裝系統(tǒng)提供的SEH機制 148 4.6.1 擴展的EXCEPTION_REGISTRATION級相關結構 149 4.6.2 數(shù)據(jù)結構組織 150 4.7 Windows XP下的向量化異常處理 157
第5章 反跟蹤技術 161 5.1 反調(diào)試技術 161 5.1.1 句柄檢測 161 5.1.2 SoftICE后門指令 163 5.1.3 int68子類型 164 5.1.4 ICECream子類型 165 5.1.5 判斷NTICE服務是否運行 166 5.1.6 INT 1 檢測 167 5.1.7 利用UnhandledExceptionFilter檢測 169 5.1.8 INT 41子類型 169 5.2 斷點檢測技術 170 5.2.1 檢測函數(shù)首地址 170 5.2.2 利用SEH防范BPX斷點 172 5.2.3 利用SEH防范BPM斷點 178 5.3 反加載技術(Anti-Loader) 183 5.3.1 利用TEB檢測 183 5.3.2 利用IsDebuggerPresent函數(shù)檢測 186 5.3.3 檢查父進程 188 5.4 反監(jiān)視技術(Anti-Monitor) 189 5.4.1 窗口方法檢測 190 5.4.2 句柄檢測 190 5.5 反靜態(tài)分析技術 191 5.5.1 擾亂匯編代碼 191 5.5.2 花指令 193 5.5.3 SMC技術實現(xiàn) 194 5.5.4 信息隱藏 201 5.6 反DUMP技術(Anti-Dump) 204 5.7 文件完整性檢驗 207 5.7.1 磁盤文件校驗實現(xiàn) 207 5.7.2 校驗和 211 5.7.3 內(nèi)存映像校驗 212 5.8 代碼與數(shù)據(jù)結合技術 216 5.8.1 準備工作 217 5.8.2 加密算法選用 219 5.8.3 手動加密代碼 220 5.8.4 使.text區(qū)塊可寫 221 5.8.5 重定位 223 5.9 軟件保護的若干忠告 223
第6章 加殼軟件編寫 225 6.1 外殼編寫基礎 225 6.1.1 判斷文件是否是PE-EXE文件 226 6.1.2 文件基本數(shù)據(jù)的讀入 229 6.1.3 額外數(shù)據(jù)保留 230 6.1.4 重定位數(shù)據(jù)的去除 231 6.1.5 文件的壓縮 233 6.1.6 資源區(qū)塊的處理 237 6.1.7 區(qū)塊的融合 244 6.1.8 輸入表的處理 246 6.1.9 外殼部分的編寫 251 6.1.10 將外殼部分添加至原始程序 259 6.1.11 小結 266 6.2 加殼程序綜合運用的實例 267 6.2.1 程序簡介 267 6.2.2 加殼子程序(WJQ_ShellBegin()) 268 6.2.3 PE外殼程序 275 6.2.4 加進Anti技術 285 6.2.5 通過外殼修改被加殼PE 287 6.2.6 VC++調(diào)用匯編子程序 289
第7章 如何讓殼與程序融為一體 291 7.1 欺騙查殼工具 291 7.1.1 FileInfo是如何查殼的 291 7.1.2 欺騙FileInfo 293 7.2 判斷自己是否被加殼 297 7.2.1 判斷文件尺寸 297 7.2.2 使用同步對象檢查標記 298 7.2.3 使用原子(Atom)檢查標記 304 7.2.4 使用存儲映像文件檢查標記 308 7.2.5 使用線程優(yōu)先權檢查標記 311 7.2.6 使用外部文件檢查標記 313 7.2.7 使用注冊表檢查標記 318 7.2.8 注入一個定時器 318 7.2.9 外部檢測(使用DLL) 322 7.2.10 Hook 相關的API(防止Loader和調(diào)試API) 322 7.3 使用SDK把程序和殼融為一體 322 7.3.1 SDK加密的標記 322 7.3.2 殼程序檢測加密標志 324 7.3.3 開始加密相關的數(shù)據(jù) 325 7.3.4 輸出函數(shù)的聲明 327 7.3.5 輸出函數(shù)的執(zhí)行代碼定位 328 7.3.6 為輸出函數(shù)得到殼中加密函數(shù)做準備 329 7.3.7 程序中使用加密和解密函數(shù) 330 7.3.8 構造殼中的加密和解密函數(shù) 330 7.3.9 殼尋找程序的輸出函數(shù)位置 332 7.3.10 “毀尸滅跡”,擦除輸出函數(shù) 333 7.3.11 殼中分配臨時的內(nèi)存存放加密和解密函數(shù) 333 7.3.12 殼中執(zhí)行程序輸出函數(shù)傳遞參數(shù) 334
第8章 Visual Basic 6 逆向工程 336 8.1 P-code傳奇 336 8.2 VB編譯奧秘 337 8.3 VB與COM 338 8.4 VB可執(zhí)行程序結構研究 343 8.5 VB程序事件解讀 353 8.6 VB程序圖形界面解讀 356 8.7 VB執(zhí)行代碼研究 361 8.7.1 VB函數(shù)的解讀 361 8.7.2 VB函數(shù)調(diào)用約定 363 8.7.3 執(zhí)行代碼中對控件屬性的操作 364 8.8 P-code代碼 369 8.8.1 理解P-code代碼指令 370 8.8.2 P-code程序調(diào)用約定 371 8.8.3 調(diào)試時中斷P-code程序的幾種方法 371 8.8.4 WKT VB Debugger實現(xiàn)原理 372 8.8.5 VB6 P-code Crackme分析實例 378 8.9 VB程序保護篇 383 8.9.1 Anti-Loader技術 383 8.9.2 VB“自鎖”功能實現(xiàn) 386 8.10 相關工具點評 386
附錄A在Visual C++中使用內(nèi)聯(lián)匯編 388
附錄B 在Visual Basic中使用匯編 403
作者簡介
現(xiàn)階段軟件開發(fā)人員必須得掌握一定的加密技術,但由于現(xiàn)階段軟件保護資料極其缺乏,使得開發(fā)人員在軟件保護上無從下手,這就是我們推出本書的目的。該書由數(shù)位在軟件保護方面研究頗有心得的好手共同創(chuàng)作完成,每位作者都將自己擅長的技術無私奉獻出來,讀者將從本書中獲得許多極具商業(yè)價值的內(nèi)幕技術。
主編:段鋼 編委:dREAMtHEATER、王勇、印豪、羅翼、李江濤、于陽、Blowfish、溫玉杰、王景泉、裴來隆、周文雄、郭春楊
主編:段鋼 網(wǎng)名看雪,1994年畢業(yè)于上海同濟大學,看雪學院(www.pediy.com)站長,致力于軟件加密與解密研究。2001年9月組織推出國內(nèi)第一本全面介紹Windows平臺下軟件的加密與解密技術的書籍《加密與解密——軟件保護技術及完全解決方案》。2003年6月出版《加密與解密》(第二版)。 參與章節(jié):5.1 反調(diào)試技術;5.3 反加載技術;5.4 反監(jiān)視技術;5.7 文件完整性校驗;5.8 代碼與數(shù)據(jù)結合技術。 Email:pediy@pediy.com
作者:dREAMtHEATER dREAMtHEATER,出生于20世紀70年代初真正學編程是從軟件逆向工程開始的,有將近一年的時間都在逆向工程的世界里徘徊,也在那個階段打下了匯編的堅實基礎。由于對匯編的至愛,曾經(jīng)用很長一段時間無法舍棄,最后寫成了一個對作者自身來說具有劃時代意義的軟件——NoteXPad。 他不只精通ASM,還堅持不懈地朝著programmer發(fā)展,無論是傳統(tǒng)的 C 語言還是OOP時代的C++/Object Pascal,用起來得心應手,目前正在Delphi平臺下開發(fā)新的軟件。 參與章節(jié):第1章 PE文件格式的深入分析(翻譯Matt Pietrek An In-Depth Look into the Win32 Portable Executable File Format) E-mail:notexpad@163.com
作者:王勇 網(wǎng)名破解勇,F(xiàn)就讀于石油大學(華東)計算機科學與技術專業(yè)。擅長C/C++、Asm和驅(qū)動程序開發(fā)。對面向?qū)ο蟪绦蛟O計和Windows系統(tǒng)底層的研究有一定的經(jīng)驗。很希望能與編程愛好者及加密解密愛好者有更多的交流機會。 參與章節(jié):第2章 PE分析工具編寫 QQ:65779603 E-mail:pojieyong@tom.com
作者:印豪 網(wǎng)名Hying,看雪軟件調(diào)試論壇版主之一,擅長加殼技術,并且在殼的商業(yè)化道路上走得極為成功。 參與章節(jié):3.1 Win32調(diào)試API原理;3.2 利用調(diào)試API編寫脫殼機;5.6 反DUMP技術;6.1 外殼編寫基礎。 E-mail:h-ying@yeah.net
作者:羅翼 程序員,由加解密知識起接觸編程,對Windows底層機制有多年的研究經(jīng)驗。后由于工作需要,接觸C++/ATL/COM等技術,F(xiàn)致力于研究各種Moder C++的元素的應用范圍及其對降低程序復雜度所起的作用,熱切關注ISO C++以及分布式計算相關內(nèi)容的進展。 參與章節(jié):3.3 利用調(diào)試API制作內(nèi)存補丁 E-mail:firingme@sina.com
作者:溫玉杰 網(wǎng)名Hume,酷愛計算機,對操作系統(tǒng)、面向?qū)ο蟪绦蛟O計、網(wǎng)絡及網(wǎng)絡安全、加密解密等較感興趣并有較深入的研究。業(yè)余維護了一個個人匯編站點,希望能和同樣愛好計算機的朋友們交流。 參與章節(jié):第4章 Windows下的異常處理 主頁:Humeasm.yeah.net E-mail:humewen@263.net 主要作品:翻譯出版《Intel匯編語言程序設計》(第四版)
作者:李江濤 網(wǎng)名ljtt,喜歡學習編程技術,常用編程語言為VC/MASM。對PB、VFP的反編譯有較深入的研究,寫過DePB、FoxSpy等程序。平時大多數(shù)時間都在電腦上耕作,最大的希望是能夠領悟到編程的精髓,創(chuàng)造一個自己比較滿意的作品。 參與章節(jié):5.2 斷點檢測技術;5.5 反靜態(tài)分析技術 E-mail:shellfan@163.com
作者:于陽 網(wǎng)名:fisheep,酷愛軟件技術,常用編程語言:Delphi,Java。對面向?qū)ο蟮臄?shù)據(jù)庫映射方法, 軟件測試方法,軟件保護方法等較感興趣并有較深入的研究。 參與章節(jié):5.5.4 信息隱藏 E-mail:fisheep@sohu.com
作者:Blowfish 看雪論壇軟件調(diào)試論壇版主。 大齡程序員。92年上大學始接觸電腦,97年讀研期間接觸網(wǎng)絡并自學加密解密技術,從此一發(fā)不可收拾,其時常在教育網(wǎng)BBS灌水。喜多方涉獵,亦能抓住一點深入鉆研,對逆向分析技術尤為癡迷。五年多來常在看雪論壇灌水,見證了論壇的風風雨雨,也結識了一些不錯的朋友。 參與章節(jié):5.9 軟件保護的若干忠告 E-mail:blowfish2000@163.com
作者:王景泉 網(wǎng)名Spirng.W,畢業(yè)于山東省信息工程學校計算機技術及應用,擅長VC++/ASM,工作地點:山東省濰坊市。1991~1995年工作于山東濰坊華光照排公司,1995年下海,從事IT業(yè)。 參與章節(jié):6.2 加殼程序綜合運用的實例 E-mail:hellowjq@163.com
作者:裴來隆 網(wǎng)名PLL621。2001年畢業(yè)于合肥工業(yè)大學電子信息專業(yè),性喜靜,不多言,好追根究底,從事嵌入式系統(tǒng)設計,業(yè)余時間沉迷于編程和調(diào)試技術中,樂此不疲。 參與章節(jié):第7章 如何讓殼與程序融為一體 E-mail:pll621@163.com
作者:周文雄 網(wǎng)名小樓。接觸電腦5年,學習軟件加密與解密4年,研究Visual Basic 6反編譯2年余,皆業(yè)余愛好,F(xiàn)在喜歡編程,探索編譯器的奧秘。 或問:先生何至于此?曰:無他,惟專一耳!蛾幏酚性疲骸敖^利一源,用師十倍”。吾能達于此。 參與章節(jié):第8章 Visual Basic 6 逆向工程 E-mail:xixiaolou@hotmail.com
作者:郭春楊 網(wǎng)名Yonsm,自詡是“傳說中的宇宙十大杰出青年”的 Windows 程序員,畢業(yè)后一直從事圖像和多媒體軟件的編程工作。對寫程序有十二分的興趣,對 Windows 編程有深入的理解。 參與章節(jié):附錄A 在Visual C++中使用內(nèi)聯(lián)匯編 E-mail:Yonsm@163.com
關于本書
本書是由“看雪學院”(http://www.pediy.com)眾多高手共同打造而成的。要了解本書的寫作背景,先簡單談談本站的發(fā)展歷史。 在2000年初時想找一些研究加解密的朋友交流一下,但令人十分遺憾,那時國內(nèi)這方面的技術資料很缺乏,大家的交流也有限,因此就創(chuàng)建了主頁“看雪學院”,與大家共同探討加密與解密的知識。主頁提供的論壇成了國內(nèi)知名的加解密技術論壇,吸引了密界眾多高手,當前最新的加解密技術都可從這里接觸到。 為了填補國內(nèi)Windows平臺加密與解密書籍的空白,作者與看雪壇的密界一流好手合作努力,于2001年9月推出國內(nèi)第一本全面介紹Windows平臺下軟件的加密與解密技術的書籍《加密與解密——軟件保護技術及完全解決方案》。次年,在臺灣發(fā)行了繁體版,深受臺灣讀者的歡迎。在這本書中,我們從加密和解密兩方面對當今流行的軟件保護技術進行分析,讀過這本書后,讀者能夠?qū)Ξ斀窳餍械能浖Wo技術及破解技術有所了解。這本書獲得了2002年全國優(yōu)秀暢銷書獎(科技類)!同時還獲得了2002年版權輸出獎。 為了跟上技術發(fā)展的步伐,在2003年6月推出《加密與解密》(第二版)。這本書是在第一版的基礎上寫作而成的,補充了許多新技術,結構更加合理。這本書幾乎囊括了Windows下的軟件保護的絕大多數(shù)內(nèi)容,是一本研究加密與解密入門的好書。 由于開發(fā)人員對當前流行的軟件加密技術有進一步的需求,我們決定推出《軟件加密技術內(nèi)幕》,其內(nèi)容側重軟件加密技術及其具體實施方案。這本書的創(chuàng)作歷時兩年,共有十余名對加解密有心得的好手參與。 《軟件加密技術內(nèi)幕》與《加密與解密》的聯(lián)系 《加密與解密——軟件保護技術及完全解決方案》與《加密與解密》(第二版)是同一本書的不同版次,主要講解加密與解密的相互性,比較側重一些軟件解密技巧的講述。 《軟件加密技術內(nèi)幕》內(nèi)容是與前一本書承接互補的,并不重復。主要講述當前流行的軟件加密保護技術。這本書對讀者軟件調(diào)試技巧有一定的要求,這方面的知識可以從《加密與解密》(第二版)獲得。
出處:藍色理想
責任編輯:donger
|