書名:獨闢蹊徑的編程思維——“拿來主義”編程
宣傳語:編程新思路,教你如何從系統、程式、網路等中“拿來”。源碼公開。
作者:李瑞民 著
ISBN: 978-7-121-22399-0
出版時間:2014年3月出版
定價:79.00元
頁數:496頁
開本:16開
編輯推薦
揭秘“拿來主義”編程——當下程式設計師統籌“時間、質量、成本”項目管理三要素之後的全新編程思路,IT領域的制勝利器。怎么拿?如何拿?作業系統變數、已分享檔案、命令行重定向、B/S界面採集、Office組件、ActiveX控制項、程式界面變臉、DLL檔案過濾、網路通信嗅探、串口通信嗅探、程式訊息管理、Hook技術……14種拿來技術魔術般的揭秘,讓你從目瞪口呆,到信心爆棚。
學會了,怎么練,書中所有技術所用的程式,全部源碼級公開,讓你迅速上手。
首創的開發思路,不是最好的,卻沒有更好的;不是最全的,卻沒有更全的。
最實在、最乾貨的編程大牛工作經驗分享!
《獨闢蹊徑的編程思維——“拿來主義”編程》,每個編程人員都值得擁有的編程技能書。
目錄
第 1章緒論..................................................... 11.1 “拿來主義”編程技術簡介......................1
1.1.1 什麼是“拿來主義”.......................1
1.1.2 為什麼要採用“拿來主義”...........2
1.2 常用的“拿來主義”編程技術................3
1.3 “拿來主義”編程技術的分類..................5
1.3.1 靜態分析型的拿來技術.................5
1.3.2 功能型的拿來技術.........................6
1.3.3 輸出型的拿來技術.........................7
1.3.4 嵌入型的拿來技術.........................8
1.3.5 中間嗅探型的拿來技術.................8
1.3.6 控制互動型的拿來技術.................9
第 1部分靜態分析型的拿來技術
第 2章作業系統數據的拿來...................12
2.1 本章的預備知識.....................................12
2.1.1 進制的表示與轉換.......................12
2.1.2 DOS下的地址表示......................14
2.1.3 Debug工具的使用.......................15
2.2 裸機時代的可用數據..............................19
2.2.1 裸機的啟動過程..........................19
2.2.2 CMOS記憶體中的數據...................20
2.2.3 中斷與中斷向量..........................25
2.2.4 BIOS數據區................................28
2.2.5 ROM中的數據............................36
2.3 DOS中的全局變數................................42
2.3.1 曾經輝煌的 DOS..........................43
2.3.2 DOS的記憶體映射.........................44
2.3.3 DOS數據區.................................46
2.3.4 DOS的“拿來”實例..................47
2.4 Windows中的共享數據..........................49
2.4.1 如日中天的 Windows........................49
2.4.2 Windows中的環境變數...............50
2.4.3 Windows環境變數的意義...........52
2.4.4 Windows環境變數的編程...........53
2.4.5 修改 Windows的全局環境變數...56
2.5 編程實例:基於 WinIO的 CMOS數據讀寫..............................56
2.5.1 程式主界面..................................57
2.5.2 程式代碼......................................57
第 3章系統已分享檔案中的拿來..............61
3.1 作業系統配置檔案的拿來......................61
3.1.1 對配置檔案的讀/寫......................62
3.1.2 Boot.ini...............................................65
3.2 目錄名稱的拿來.....................................66
3.2.1 與用戶名相同的目錄名...............67
3.2.2 所安裝的軟體列表.......................68
3.2.3 與用戶相關的特定目錄名...........68
3.3 資料庫訪問式的共享..............................69
3.3.1 ODBC數據訪問方式...................69
3.3.2 ADO數據連線.............................82
3.4 註冊表的共享.........................................86
3.4.1 基於註冊表訪問的 API.................86
3.4.2 註冊表項的操作..........................92
3.5 檔案級的拿來.........................................93
3.5.1 網路配置檔案..............................93
3.5.2 日誌檔案......................................97
3.5.3 Windows目錄自帶的音頻檔案資源.................................103
3.6 編程實例 1:通過 ODBC對 txt檔案進行讀/寫...................108
3.6.1 程式主界面................................109
3.6.2 程式代碼....................................109
3.7 編程實例 2:通過 ADO對 Excel檔案進行讀/寫............... 112
3.7.1 程式主界面................................ 112
3.7.2 程式代碼.................................... 113
第 4章靜態程式檔案中資源的拿來.................. 115
4.1 常見執行檔的格式........................ 115
4.1.1 DOS下的 COM和 EXE檔案的格式簡介...................... 115
4.1.2 Windows下 PE檔案的格式...................................... 118
4.2 VC軟體編程人員眼中的程式資源......................... 119
4.3 在執行檔中調整資源..........................................121
4.3.1 從執行檔中提取資源.........................121
4.3.2 更換執行檔中的資源..........................122
4.4 軟體漢化與界面調整..........................................122
4.4.1 軟體漢化.............................................123
4.4.2 軟體界面調整.......................................125
4.5 界面複製...............................................126
4.5.1 將執行檔中的界面複製到工程中..........................126
4.5.2 對兩個工程之間界面的複製...............................128
第 2部分功能型的拿來技術
第 5章無界面程式命令行中的拿來................. 132
5.1 什麼是命令行.......................................132
5.1.1 常用的 DOS內部命令...............134
5.1.2 常用的 DOS外部命令...............138
5.2 命令行的組合使用...............................149
5.2.1 設備檔案....................................149
5.2.2 重定向技術................................151
5.2.3 管道技術....................................155
5.3 命令行的編程技術...............................156
5.3.1 可嵌入 DOS命令行的幾個函式....................156
5.3.2 管道編程的幾個函式.................161
5.4 編程實例 1:使用重定向接收外部程式運行結果...............162
5.4.1 程式主界面................................162
5.4.2 程式代碼....................................163
5.5 編程實例 2:使用管道接收外部程式運行結果...................164
5.5.1 程式主界面................................164
5.5.2 程式代碼....................................165
第 6章有界面程式訊息式的拿來................................167
6.1 訊息機制...............................................167
6.1.1 訊息的定義................................168
6.1.2 訊息的佇列和非佇列模式.........169
6.1.3 與訊息有關的幾個函式.............170
6.2 Visual C++自帶的訊息處理工具..........175
6.2.1 程式界面上的控制項.....................175
6.2.2 Visual C++下提供的標準控制項................................ 176
6.2.3 訊息查詢工具 Spy++.....................................177
6.3 通過訊息控制程式...........................................182
6.3.1 與視窗有關的幾個函式.....................182
6.3.2 與訊息控制有關的幾個函式.......................186
6.4 編程實例:通過訊息控制程式................................191
6.4.1 程式主界面................................191
6.4.2 程式代碼....................................192
第 3部分輸出接收型的拿來技術
第 7章讀取 B/S界面上輸出的數據......... 200
7.1 Web伺服器的安裝和測試....................201
7.1.1 Web伺服器的安裝和驗證.........201
7.1.2 檢驗 Web伺服器的效果............205
7.2 基於 Web套用的編程接口...................207
7.2.1 CInternetSession類....................208
7.2.2 CInternetConnection類..............216
7.2.3 CHttpConnection類...................217
7.2.4 CFtpConnection類.....................218
7.2.5 CInternetFile類..........................222
7.2.6 CInternetException類.................224
7.3 編程實例:基於 Web的拿來方式........225
7.3.1 原理分析....................................226
7.3.2 程式主界面................................228
7.3.3 程式代碼....................................228
第 8章對 Office檔案輸出的接收操作............. 231
8.1 Microsoft Office簡介............................232
8.2 輸出式的拿來簡介...............................233
8.2.1 COM/DCOM的概念..................234
8.2.2 AfxOleInit函式..........................234
8.2.3 COleVariant類...........................235
8.2.4 COleDispatchDriver類...............240
8.3 程式設計師眼中的 Office................................241
8.3.1 Office的結構框架.....................242
8.3.2 Office組件的導入.....................242
8.4 Word的結構輸出.................................244
8.4.1 Word簡介..................................244
8.4.2 Word中的要素..........................244
8.5 Excel的結構輸出.................................245
8.5.1 Excel簡介..................................246
8.5.2 Excel中的要素..........................246
8.6 PowerPoint的結構輸出........................247
8.6.1 PowerPoint簡介.........................248
8.6.2 PowerPoint中的要素.................248
8.7 輸出式的拿來技術在信息安全領域內的套用......................249
8.7.1 數字水印簡介............................249
8.7.2 Word中格式輸出類的數字水印.....................250
8.7.3 Word中內容格式的數字水印..................................251
8.8 編程實例 1:讀取 Word檔案中的純文本內容..........................252
8.8.1 程式主界面...................................................252
8.8.2 程式代碼......................................253
8.9 編程實例 2:讀寫 Excel中的數據.................254
8.9.1 程式主界面.....................................................255
8.9.2 程式代碼...........................255
8.10 編程實例 3:控制 PPT的輸出................................258
8.10.1 程式主界面.........................................258
8.10.2 程式代碼..................................259
第 4部分嵌入型的拿來技術
第 9章控制項嵌入式的拿來.................... 264
9.1 ActiveX技術簡介.................................264
9.2 在 Windows程式中嵌入 ActiveX控制項......................... 266
9.2.1 設定對 ActiveX控制項的支持....................266
9.2.2 從系統註冊的組件中導入要使用的 ActiveX控制項............267
9.2.3 從 DLL檔案中導入要使用的 ActiveX控制項................268
9.3 編程實例 1:嵌入式視頻播放器........................268
9.3.1 播放器編程的簡介................................................268
9.3.2 VLC簡介.............................269
9.3.3 程式主界面................................274
9.3.4 程式代碼....................................274
9.4 編程實例 2:嵌入式 PDF閱讀器.............................276
9.4.1 在 VC對 PDF的可視化使用...............................276
9.4.2 程式主界面.................................................277
9.4.3 程式代碼............................278
第 10章界面嵌入式的拿來.......................... 280
10.1 螢幕式的嵌入.....................................280
10.1.1 圖形桌面..................................281
10.1.2 實現界面嵌入式要考慮的問題.......................................283
10.1.3 實現像素級操作主要涉及的 API..............................286
10.1.4 實現桌面級操作主要涉及的 API........................... 288
10.1.5 螢幕的截取...........................................293
10.2 內容式的嵌入................................297
10.2.1 通過 IE調用訪問網路地址....................... 297
10.2.2 通過嵌入頁面方式訪問網路地址......................297
10.2.3 通過資源管理器方式訪問本地檔案系統 ..........................298
10.2.4 CHhtmlView的 API.................................299
10.3 編程實例 1:將程式界面自己程式的一部分進行嵌入............301
10.3.1 程式主界面............................................302
10.3.2 程式代碼...........................................303
10.4 編程實例 2:嵌入整個 Web頁面和資源管理器...............306
10.4.1 程式主界面..........................................307
10.4.2 程式代碼..................................307
第 5部分中間嗅探型的拿來技術
第 11章程式調用時的數據過濾............. 310
11.1DLL檔案的意義和用法.....................310
11.1.1DLL檔案的意義...................... 311
11.1.2與 DLL調用相關的函式..........312
11.1.3DLL檔案的調用步驟..............315
11.2從 EXE或 DLL檔案中找到函式..........316
11.2.1Depends的使用方式......................316
11.2.2從 ICMP.DLL中抽取函式................317
11.2.3ICMP.DLL中各函式的用法............................318
11.3重載 DLL檔案....................................321
11.3.1DLL檔案重載的原理.................................321
11.3.2DLL檔案重載的意義..............322
11.4具有重載特性的 DLL檔案創建步驟.........................322
11.4.1普通 DLL檔案的創建步驟..................323
11.4.2重載 DLL檔案的創建步驟.................324
11.5編程實例 1:通過 ICMP.DLL製作 tracert命令...............325
11.5.1程式主界面..............................326
11.5.2程式代碼..................................327
11.6編程實例 2:重載 ICMP.DLL以記錄 ICMP協定操作..............330
11.6.1程式主界面..............................330
11.6.2程式代碼..................................331
第 12章網路通信時的數據監聽.............................. 335
12.1 網路通信簡介.....................................336
12.1.1 網路嗅探技術..........................336
12.1.2 網路協定分析和行為分析................336
12.1.3 黑客級別的分析.......................339
12.2 數據流的截獲.....................................344
12.2.1 單機數據流的獲取...................344
12.2.2 網路數據流的獲取...................346
12.3 Socket編程接口.................................348
12.3.1 幾個重要的概念.......................349
12.3.2 Windows Socket結構...............350
12.3.3 Windows socket轉換類函式....353
12.3.4 Windows socket通信類函式返回值...........357
12.3.5 Windows socket通信類函式............359
12.4 編程實例:RAW Socket嗅探器...................368
12.4.1 程式主界面..............................368
12.4.2 程式代碼..................................369
第 13章串口通信時的數據監控......... 377
13.1 串口的通信與監聽..............................377
13.1.1 串口簡介..................................377
13.1.2 串口通信中的“拿來”技術.................379
13.2 基於 VSPE的串口開發技術......................380
13.2.1 VSPE簡介...............................381
13.2.2 VSPE的術語...........................381
13.2.3 VSPE的串口嗅探功能.................... 386
13.2.4 VSPE的使用與開發.........................388
13.2.5 VSPE的 API.............................388
13.3 編程實例:串口嗅探器......................392
13.3.1 程式主界面....................................393
13.3.2 程式代碼..................................................394
第 6部分控制互動型的拿來技術第
14章從運行的程式中拿來.................................... 402
14.1 Windows記憶體模式.............................402
14.1.1 Windows的對記憶體讀寫的限制.............................403
14.1.2 Windows的記憶體管理...........................404
14.1.3 調試程式簡介..........................407
14.2 基於 WinIO的記憶體讀取編程.............408
14.2.1 WinIO的 API............................408
14.2.2 WinIO的編程..........................412
14.3 基於 API的程式調試函式..................412
14.3.1 Windows調試程式的結構........................413
14.3.2 Windows調試程式的 API............................422
14.3.3 Windows的進程 API.............................428
14.3.4 Windows的動態記憶體 API...........................429
14.3.5 Windows調試程式的編寫方式..................433
14.4 編程實例:讀正在執行程式的數據......................434
14.4.1 程式主界面..............................................435
14.4.2 程式代碼..................................435
第 15章Hook控制式的拿來..................... 440
15.1 Hook簡介 ................................................440
15.1.1 什麼是 Hook..................................441
15.1.2 Hook的運行機制 ........................442
15.1.3 怎么使用 Hook............................................443
15.2 Hook函式...........................................443
15.2.1 SetWindowsHookEx函式................444
15.2.2 UnhookWindowsHookEx函式..........446
15.2.3 CallNextHookEx函式..........................446
15.2.4 回調函式..............................................447
15.3 Hook 的類型............................................... 447
15.3.1 WH_CALLWNDPROC..........................447
15.3.2 WH_CBT.......................................448
15.3.3 WM_QUEUESYNC.............................452
15.3.4 WH_DEBUG ......................................452
15.3.5 WH_FOREGROUNDIDLE...........................453
15.3.6 WH_GETMESSAGE ...............................453
15.3.7 WH_HARDWARE....................................453
15.3.8 WH_JOURNALRECORD...........................453
15.3.9 WH_JOURNALPLAYBACK............................454
15.3.10 WH_KEYBOARD ....................................455
15.3.11 WH_MOUSE ........................................455
15.3.12 WH_MSGFILTER................................455
15.3.13 WH_SHELL......................................456
15.3.14 WH_SYSMSGFILTER............................456
15.4 編程實例1:執行緒Hook 程式編寫....................... 456
15.4.1 程式主界面...........................................456
15.4.2 程式代碼.....................................457
15.5 編程實例2:全局Hook 程式編寫............ 459
15.5.1 程式主界面..........................................459
15.5.2 DLL 程式代碼.....................................460
15.5.3 調用程式代碼...................................462
附錄A 本書容易混淆概念解析.................. 464
A.1 同名不同義概念......................................... 464
A.2 同義不同名概念........................................... 464
A.3 易混概念...................................................... 466
附錄B 詳解ASCII 碼..................................... 468
附錄C HTTP 錯誤返回碼............................ 474
參考文獻................................... 479
後記.............. 481
精彩節摘
拿破崙曾說過:“世上只有兩種力量:利劍和思想。從長而論,利劍總是敗在思想手下。”美國利用思想滲透致使前蘇聯解體,編程也是一樣,除了需要技術,更需要思想,這樣才能編寫出更多的好程式,並提高效率。“拿來主義”是編程思想的重要組成部分,有助於縮短開發進度,提升開發質量,使開發技術獲得新的突破。當然,“拿來主義”應該在尊重著作權許可的前提下進行,這樣才能讓“拿來主義”思想廣泛套用和發展。本書講述“拿來主義”的實踐,涵蓋作業系統、Web 等多方面技術,對廣大程式設計師來說是一本很好的教材。其內容豐富而深刻,極具參考價值和實用性,堪稱經典之作。Hook 獲取、DLL 重載、API 截獲、DOS 公共數據區、Office 控制項調用、B/S 提取等稀缺的技術資料一應俱全。以Hook 為例,有簡單的介紹,也有深度的技術。又比如DLL 的函式使用,有理論知識又不缺實例。
本書是李瑞民博士的第5 本著作,我不僅欽佩李瑞民博士的技術和經驗,更欽佩他的開源精神和為開源事業所做的貢獻。共享是一種黑客精神,開源是一種共享方式,共享和開源促進著技術的突破與創新。Linux 的開源衍生出嵌入式、RedHat、Debian、Android、Ubuntu 等,進而衍生出BackTrack、Kali、MIUI、Smartisan OS 等。如果沒有開源,智慧型移動設備可能不會迅速普及大眾,科技所帶來的生活樂趣將會滯後。簡單、快捷的網站搭建,功能和安全性的增強,網際網路的呈現,以及大數據的形成等都得益於網站程式的開源。可以說,開源改變世界!
本書令我大開眼界,有一種頓悟的感覺。在千千萬萬的書叢中,好書難得一遇,而本書就是其中之一,使讀者既能得到思想上的指導,又能得到技術上的提煉,可謂魚和熊掌兼得。
網路尖刀核心成員 冷鷹
隨著技術的發展以及開源社區的日益壯大,程式設計師做某個軟體時的第一想法,除了“這個軟體如何實現”,還有“有沒有別人已經做好的,拿來使用一下”。Ruby on Rails 這樣的語言可以幫助一個零經驗者用幾個小時建立一個網站雛形,這樣的事情之所以成為可能,是因為其背後的強大框架支持。對其能夠支撐的接口了解得越多,在系統中可增加的特性就越多。而開發者並不需要開發一個和Rails 一樣或者等同的框架,可以直接將其“拿來”使用。
軟體業已經有很多“輪子”被發明了,重新發明“輪子”並不會顯得有多明智。直接“拿來”那些現成的可用組件或框架,可以迅速提升開發能力,更加專注於業務邏輯。書中所主張的“拿來主義”正是應該被奉行的精神。但是正如作者所言,要想“拿來”,得先看對象是否允許“被拿來”,是否允許修改,是否允許繞過一些限制等。了解相關法律規定和條款可以讓程式設計師在一個合法的領域中“拿來”。
本書作者對Windows 編程中作業系統及DLL 能夠提供的接口、數據操作等進行了全面而深入的分析。作者憑其深厚的功底帶領讀者更深入地了解Windows 系統中可以被輕鬆“拿來”的東西。如果你正在開發一個Windows 系統中的套用,本書則可能為你提供更加快捷、有效的方案。本書為在Windows 上開發應用程式,尤其是和底層打交道的程式設計師們帶來了非常有價值的知識。
除了代碼和接口,我們還可以“拿來”思想,可以“拿來”設計模式,可以“拿來”測試驅動開發,還可以“拿來”領域驅動設計。在“拿來”之前,還需要知道有什麼可以“被拿來”。
本書從若干個角度進行分析,引領讀者了解哪些是可以“被拿來”的。這是一本用心寫就的書。
敏捷開發獨立諮詢師、《會說話的代碼》作者 王洪亮
作者簡介
李瑞民,男,工學博士,高級工程師,資深網路安全專家兼高級系統架構師。多年來一直專注於網路設備監控與信號監控、計算機安全技術等領域的研究與套用,對計算機監控、設備監控、網路攻防、物聯網等領域有深刻的認識。目前擁有發明專利、軟體著作權8項,出版和翻譯的書籍有《網路掃描技術揭秘》、《設備監控技術》、《Hacking Exposed Wireless》等,發表專業核心論文數十篇。前言
在軟體開發中,編程人員經常會遇到這么一個問題:就是自己想做的某個功能還不知道該如何實現呢,而該功能早已被別人實現並套用。這時,也許我們突然會有一個念頭,如果能將別人做好的程式全部或一部分通過一定技術拿來為我所用,那不僅可以大大縮短開發進度,在技術攻關上還能得到保障。當然,自己要權衡的是為此所付出的購買著作權、獲得許可的代價。撇開項目開發中的其他環節,僅從技術角度來講,這種“拿來為我所用”的目標是需要有重要的前提和強有力的技術支持的。其前提就是不違反國際、國家的與著作權、著作權相關的各項法律法規,通過合法的手段獲得,並明確獲得了修改、重新發布、商業銷售等許可。本書所有的技術和內容都是基於這一前提的,而實現這一目標所需要支持的技術,則是本書的內容。
在中華五千年漫長的文明史中,這種“拿來為我所用”的現象並不少見,2300 多年前趙武靈王“胡服騎射”,改中原寬大的衣服為北方遊牧民族短小精簡的衣服,改善了戰士作戰的靈活性,增加了戰鬥力。1000 多年前遼太宗耶律德光在治理天下時,採納了“說漢話,穿漢服”的方式,以便引進當時漢族先進的文化和管理方式,以取代當時少數民族相對落後的管理方式。1840 年以來,一批批國人出於強國的目的,提出了很多相似的觀點,如“師夷長技以治夷”、“古為今用”等,這些觀點的共同特點就是“不管是誰的,只要是對的,一切皆可為我所用”,而最讓我認同的是20 世紀30 年代魯迅先生提出的“拿來主義”。簡單地說,“拿來主義”即“去其糟粕,取其精華,為我所用”,這也正是本書以此命名的主要原因。
根據“拿來”方式的使用特點,全書分為靜態分析型的拿來技術、功能型的拿來技術、輸出接收型的拿來技術、嵌入型的拿來技術、中間嗅探型的拿來技術、控制互動型的拿來技術等6 大類。從概念上,6 大類雖然各有特色,但具體到一個編程套用中時,往往各大類你中有我,我中有你,相互調用,互為支持。
全書分為6 大部分共15 章。其中,作為全書內容的背景,第1 章緒論講述了拿來技術的一些定義、共性及分類方式,由於第1 章是後面6 部分14 章的基礎,所以不能作為獨立的一部分,只列為單獨的一章。而後面14 章的內容,則各自獨立,在閱讀上除了有些內容相關聯之外,對閱讀順序沒有嚴格要求。
靜態分析型的拿來技術是指通過對數據的靜態分析,從中提取可以“拿來”的信息為自己的程式所用。這裡所強調的是“靜態分析”,而不是“靜態數據”,所以並不強調“拿來”的數據一定是靜態數據。根據這一原則,這一類型所對應的拿來技術共分為3 種,分別是作業系統數據的拿來、系統已分享檔案中的拿來和靜態程式檔案資源的拿來。
功能型的拿來技術,其操作對象是執行檔。通過對執行檔的操作,或者是使其執行以達到自己程式所要達到的目的;或者是對其執行後生成的結果進行分析,從中提取出有用的信息;或者是控制其執行,使之在按自己要求運行的狀態下,達到自己的目的。根據可執行的程式是否有界面,本部分分為無界面程式命令行中的拿來和有界面程式訊息式的拿來兩章。
輸出接收型的拿來技術,其操作對象則將關注點轉移至程式的輸出界面的接收上,接收的目的是因為原有界面不能滿足自己的需要,因而需要通過一定方式接收其中原本屬於界面展示的內容,拿來後為我所用,轉換為自己的界面,進而以自己界面的風格進行顯示。這部分內容根據當前的兩大使用領域,分為讀取B/S 界面上輸入的數據和對Office 檔案輸出的接收操作兩章。
嵌入型的拿來技術與輸出接收型的拿來技術,在套用上似乎是一個姊妹篇,因為嵌入型的拿來技術也是針對程式的輸出界面的接收。但與輸出接收型不同的是,這種技術對程式原有界面很滿意,想將其界面中的全部或一部分拿來為已所用。該部分內容根據所使用的技術不同,分為控制項嵌入式的拿來和界面嵌入式的拿來兩章。
中間嗅探型的拿來技術關注的則是程式內部模組之間或程式之間的臨時數據,無論是程式模組之間、程式之間,還是系統之間,要進行數據交換,必然需要通過一個雙方都能接收的協定,在知道這個協定的前提下,如果能通過一定的技術,獲得二者之間通信的數據,那么對比協定就可以分析二者通信中的內容,甚至直接分析出其中的每一項數據細節,從而實現對數據的拿來。中間嗅探型分為程式調用時的數據過濾、網路通信時的數據監聽和串口通信時的數據監控3 種。
控制互動型的拿來技術,則既不在乎程式本身的對外輸出,也不關注程式的界面,而是將精力放在程式自身的運作上。通過對程式的控制,以及與程式互動的交換,進而實現對程式原理和數據結構的分析,最後將其內部運行機製作為結果進行拿來。主要分為從運行的程式中拿來和Hook 控制式的拿來。
最後,本書還在附錄中增加了3 個與本書息息相關的內容。第1 個是本書涉及的概念中,容易混淆的那些術語、概念和定義,本書並不是要重新定義這些概念,只是相對本書中的這些概念進行解釋,從而避免讀者理解上的錯誤;第2 個是對ASCII 碼的詳細解釋,並在碼錶中內嵌了一個簡單的十進制數據和十六進制數據的轉換表;第3 個則是Web 中的HTTP 錯誤返回碼,藉以解釋全書中,散落在多章的有關B/S 架構中的常見問題。
從格式上,本書除了正常的內容之外,還增加了兩個備註標識項。其中“提示”是指與所介紹內容有關,但不足以以正文的內容進行說明的輔助內容;而“重要”則是指該內容不但與介紹的內容有緊密的關係,而且若不理解該內容,很可能對所涉及的內容有錯誤的理解。
全書內容有收錄性質,一切以實用為標準。例如Windows 9X 版本已很少有用戶使用,已無收錄的必要,故所有內容中,均至少從Windows XP/2000 版本開始。比Windows 9X 更早的DOS 雖然早已淘汰,但由於Windows 所有版本都保留“命令提示符”以示兼容,並且目前始終有大量命令行套用存在,所以保留了DOS 的部分內容。所有的內容,都儘可能以編程實例的方式進行講解和驗證。
本書的程式、代碼全部開源,除第9 章“編程實例1:嵌入式視頻播放器”中的代碼之外,對其餘代碼約定如下。
(1)本書及隨書光碟中的所有例程,其源碼部分著作權歸本書作者所有;
(2)光碟內容不得進行單獨銷售,不得提供網站下載(含收費或免費)。
第9 章“編程實例1:嵌入式視頻播放器”中的代碼則不受上述約束,但使用該程式的人需要接受VideoLan 對基於其技術進行軟體開發的各項要求。