
0人評分過此書
👉感謝讀者支持,作者修訂精簡第二版嘉惠更多朋友!
要寫出一個勒索病毒,需要多強的程式功力?相信大家的心裡已浮現出技術高強的駭客身影。
然而,當這個模擬勒索程式完成後,撇開永恆之藍等漏洞的使用,我們赫然發現,裡面所使用的程式知識,卻沒有想像中非常地高深,或是遙不可及。
基本的記憶體管理、目錄和檔案處理、較為進階的加密知識、基礎資料結構,行程與執行緒、同步問題、網路通訊,還有Windows圖型介面,其中還包括文字字型、Edit、RichEdit、ComboBox、ListBox、ProgressBar等元件使用,資源的使用,計時器、剪貼簿等運用……幾乎是學習Windows程式所有需要的基本知識,都涵括在內了。
換句話說,只要您將這兩冊勒索病毒程式設計讀完,就可以將大部分Windows程式設計中需要學習的知識全都學習到位。
最特別的是,我們在最後製作了模擬漏洞及針對這個模擬漏洞的蠕蟲,讓大家了解蠕蟲的工作原理,同時也體驗一下蠕蟲快速傳播的可怕威力,對蠕蟲這一支惡意程式有更深入的體驗和了解。
這個勒索程式是個相當完整的專案,非常適合學習,不像一般Windows程式設計,每部份最多只有短短的範例,本書的每個單位的每個範例,最終可以組合成一個大型而完整的勒索程式。希望大家別錯過了這麼完整又龐大又全面的專案學習,只此一本,就可以讓你的功力大增,千萬不要錯過。
要寫出一個勒索病毒,需要多強的程式功力?相信大家的心裡已浮現出技術高強的駭客身影。
然而,當這個模擬勒索程式完成後,撇開永恆之藍等漏洞的使用,我們赫然發現,裡面所使用的程式知識,卻沒有想像中非常地高深,或是遙不可及。
基本的記憶體管理、目錄和檔案處理、較為進階的加密知識、基礎資料結構,行程與執行緒、同步問題、網路通訊,還有Windows圖型介面,其中還包括文字字型、Edit、RichEdit、ComboBox、ListBox、ProgressBar等元件使用,資源的使用,計時器、剪貼簿等運用……幾乎是學習Windows程式所有需要的基本知識,都涵括在內了。
換句話說,只要您將這兩冊勒索病毒程式設計讀完,就可以將大部分Windows程式設計中需要學習的知識全都學習到位。
最特別的是,我們在最後製作了模擬漏洞及針對這個模擬漏洞的蠕蟲,讓大家了解蠕蟲的工作原理,同時也體驗一下蠕蟲快速傳播的可怕威力,對蠕蟲這一支惡意程式有更深入的體驗和了解。
這個勒索程式是個相當完整的專案,非常適合學習,不像一般Windows程式設計,每部份最多只有短短的範例,本書的每個單位的每個範例,最終可以組合成一個大型而完整的勒索程式。希望大家別錯過了這麼完整又龐大又全面的專案學習,只此一本,就可以讓你的功力大增,千萬不要錯過。
-
第一章 本冊程式修正與檔案存取
-
1.1 增加 config.h
-
1.2 改變金鑰變數的存取方式
-
1.3 改變全域變數 gbDecryptFlag 的存取方式
-
1.4 增加金鑰檔案的存取函式—— WanaFile
-
1.4.1 獲取特殊目錄絕對路徑的API —— SHGetFolderPath
-
1.4.2 金鑰檔的定義
-
1.4.3 RES 檔
-
1.4.4 取得「我的勒索文件」絕對路徑—— WanaDirName
-
1.4.5 建立「我的勒索文件」—— CreateWanaDir
-
1.4.6 取得「我的勒索文件」裡的檔案的完整路徑—— WanaFileName
-
1.4.7 讀取「我的勒索文件」裡的檔案內容—— ReadWanaFile
-
1.4.8 寫入「我的勒索文件」裡的檔案—— WriteWanaFile
-
1.4.9 讀取 RES 檔
-
1.4.10 定義存取巨集
-
1.4.11 銷毀解密金鑰—— WanaDestroyKey
-
-
-
第二章 多工篇
-
2.1 程序—— Process
-
2.1.1 程序是載入記憶體的執行檔
-
2.1.2 父程序產生子程序的 API —— CreateProcess
-
2.1.3 子程序結束的 API —— ExitProcess
-
2.1.4 子程序離開的方式比較—— ExitProcess vsexit
-
2.1.5 父程序等待單一子程序的 API —— WaitForSingleObject
-
2.1.6 範例程式—— LaunchIE
-
-
2.2 執行緒—— Thread
-
2.2.1 多工的基礎 122.2.2 產生執行緒的 API —— CreateThread
-
2.2.3 離開執行緒的 API —— ExitThread
-
2.2.4 離開執行緒的比較—— ExitThread vs return
-
2.2.5 勒索程式裡的執行緒
-
-
2.3 執行緒同步問題
-
2.3.1 「同時」共用「相同資源」而產生的問題
-
2.3.2 解決同步問題的機制
-
2.3.3 臨界區域—— Critical Section
-
2.3.4 互斥鎖—— Mutex
-
2.3.5 號誌—— Semaphore
-
2.3.6 事件—— Event
-
2.3.7 綜合範例程式—— DecQueue
-
-
2.4 勒索程式加密器製作
-
2.4.1 以互斥鎖確保只有一個勒索程式執行
-
2.4.2 定時檢查解密金鑰是否解密
-
2.4.3 定時更新 00000000.res
-
2.4.4 實行全系統加密
-
2.4.5 監視隨身碟隨時加密
-
-
第三章 網路篇
-
3.1 Socket 簡介
-
3.1.1 勒索病毒與網路
-
3.1.2 通訊協定 TCP/IP 的誕生
-
3.1.3 日常生活的比喻
-
-
3.2 Socket API
-
3.2.1 Winsock2 引入檔
-
3.2.2 註冊動態連結函式庫的 API —— WSAStartup
-
3.2.3 網路位址及通訊埠轉換的 API —— getaddrinfo
-
3.2.4 釋放 addrinfo 結構的 API —— freeaddrinfo
-
3.2.5 開啟 socket 的 API —— socket
-
3.2.6 設定 socket 選項的 API —— setsockopt
-
3.2.7 綁定通訊埠的 API —— bind
-
3.2.8 設定等候連線的 queue 的 API —— listen
-
3.2.9 客戶端連線的 API —— connect
-
3.2.10 伺服器端接受連線的 API —— accept
-
3.2.11 傳送訊息的 API —— send
-
3.2.12 接收訊息的 API —— recv
-
3.2.13 斷開通訊的 API —— shutdown
-
3.2.14 關閉 socket 的 API —— closesocket
-
3.2.15 最後清理 Winsock DLL 的 API —— WSACleanup
-
-
3.3 Socket 範例程式
-
3.3.1 客戶端程式
-
3.3.2 伺服器端程式
-
-
3.4 Socket 傳輸的注意事項
-
3.4.1 SendAll —— 完整傳送訊息
-
3.4.2 RecvAll —— 完整接收訊息
-
-
3.5 勒索程式解密伺服器製作
-
3.5.1 由回音伺服器修改而來的主程式
-
3.5.2 讀取客戶端傳來的已加密私鑰
-
3.5.3 準備解密器並匯入解密金鑰
-
3.5.4 將私鑰解密
-
3.5.5 已解密的私鑰傳送回客戶端
-
3.5.6 與客戶端中斷連線
-
-
3.6 勒索程式解密客戶端—— 快速伺服器連線秘技
-
3.6.1 伺服器 IP
-
3.6.2 問題的根源—— 逾時時間太久
-
3.6.3 製作快速連線的函式—— CreateSocket
-
3.6.4 改變 socket 輸出入模式的 API —— ioctlsocket
-
3.6.5 檢測一個或多個 socket 狀態的 API —— select
-
3.6.6 實作 CreateSocket
-
3.6.7 取得當前電腦的IP —— GetLocalIP
-
3.6.8 將私鑰解密的客戶端—— DecryptClient
-
3.6.9 私鑰解密的執行緒—— DecryptClientThread
-
-
-
第四章 視窗篇
-
4.1 圖形使用者介面
-
4.2 控制元件與訊息
-
4.2.1 輸出文字的 API —— DrawText
-
4.2.2 產生字型的 API —— CreateFont
-
4.2.3 產生控制元件的 API —— CreateWindow
-
4.2.4 傳送訊息的 API —— SendMessage
-
4.2.5 以 CreateWindowEx 產生元件範例
-
-
4.3 資源
-
4.3.1 資源的建立
-
4.3.2 勒索程式的桌面圖片
-
4.3.3 資源的取得
-
4.3.4 取出資源—— RetrieveResource
-
4.3.5 配置記憶體取出資源—— AllocResource
-
4.3.6 根據資源 ID 設定桌面—— SetWanaDesktop
-
4.3.7 將勒索程式的 Q&A 放進資源
-
-
-
第五章 視窗篇—— 主對話框
-
5.1 勒索程式主對話框
-
5.1.1 勒索程式的對話框
-
5.1.2 產生對話框的 API —— DialogBox
-
-
5.2 產生及設定字型
-
5.2.1 簡易字型巨集—— DefaultFont
-
5.2.2 在對話框宣告字型
-
5.2.3 給元件設定字型—— WM_SETFONT 訊息
-
5.2.4 由 HWND 取得 Resource ID 的API —— GetDlgItem
-
5.2.5 刪除物件的 API —— DeleteObject
-
-
5.3 漸層進度條
-
5.3.1 裝置內容—— Device Context 介紹
-
5.3.2 取得預設物件的 API —— GetStockObject
-
5.3.3 選擇物件的 API —— SelectObject
-
5.3.4 產生畫筆的 API —— CreatePen
-
5.3.5 產生筆刷的 API —— CreateSolidBrush
-
5.3.6 畫出漸層條—— DrawProgressBar
-
5.3.7 設定計時器的 API —— SetTimer
-
5.3.8 取消計時器的 API —— KillTimer
-
5.3.9 接收計時器訊息—— WM_TIMER 訊息
-
5.3.10 設定計時器更新進度條
-
5.3.11 靜態元件更新—— WM_CTLCOLORSTATIC 訊息
-
-
5.4 文字及背景顏色設定
-
5.4.1 對話框背景顏色設定
-
5.4.2 元件的文字背景顏色設定
-
-
5.5 顯示期限日期及倒數時間
-
5.5.1 取得時間的 API —— time
-
5.5.2 轉換當地時間的 API —— localtime_s
-
5.5.3 輸出日期時間到文字元件—— SetDateTime
-
5.5.4 輸出倒數時間到文字元件—— SetTimeLeft
-
-
5.6 啟動瀏覽器
-
5.7 Check Payment 及 Decrypt 按鈕
-
5.8 Copy 鈕與剪貼簿
-
5.8.1 配置 heap 記憶體的 API —— GlobalAlloc
-
5.8.2 鎖定記憶體的 API —— GlobalLock
-
5.8.3 解除鎖定記憶體的 API —— GlobalUnlock
-
5.8.4 開啟剪貼簿的 API —— OpenClipboard
-
5.8.5 清空剪貼簿的 API —— EmptyClipboard
-
5.8.6 設置剪貼簿內容的 API —— SetClipboardData
-
5.8.7 關閉剪貼簿的 API —— CloseClipboard
-
5.8.8 勒索程式裡的 Copy 鈕
-
-
5.9 編輯框顯示 Bitcoin 帳戶
-
5.10 顯示 Q&A —— RichEdit 及ComboBox
-
5.10.1 由 RichEdit 顯示文件
-
5.10.2 設定 ComboBox 選項
-
-
-
第六章 視窗篇—— Check Payment 對話框
-
6.1 Check Payment 對話框
-
6.2 進度顯示—— Progress Bar
-
6.2.1 透過 SendMessage 設定進度條相關參數
-
6.2.2 用進度條顯示 DecryptClient 進度
-
-
6.3 取消鈕—— EndDialog
-
-
第七章 視窗篇—— Decrypt 對話框
-
7.1 Decrypt 對話框
-
7.2 設定文字及背景顏色
-
7.3 解密目錄選擇—— ComboBox
-
7.3.1 定義選項
-
7.3.2 取得既定目錄路徑的 API —— SHGetKnownFolderPath
-
-
7.4 列出解密檔案—— ListBox
-
7.4.1 由 DECQUEUE 取得解密檔名
-
7.4.2 將解密檔名傳到 ListBox —— LB_ADDSTRING 訊息
-
7.4.3 選擇項目—— LB_SETCURSEL 訊息
-
-
7.5 檔名複製—— ListBox and Clipboard
-
7.5.1 取得 ListBox 項目長度—— LB_GETTEXTLEN 訊息
-
7.5.2 取得 ListBox 項目—— LB_GETTEXT 訊息
-
7.5.3 取得 ListBox 項目並設定剪貼簿
-
-
-
第八章 蠕蟲篇
-
8.1 模擬漏洞
-
8.1.1 有漏洞才有蠕蟲
-
8.1.2 蠕蟲的行為
-
8.1.3 WannaCry 入侵簡述(選讀)
-
8.1.4 模擬後門
-
8.2 模擬蠕蟲
-
-
-
附錄
-
附錄 A Visual Studio 專案
-
A.1 選擇右邊的「建立新的專案」
-
A.2 選擇「Windows 傳統型應用程式」
-
A.3 填上你的專案名稱,然後按下「建立」鈕
-
A.4 產生基本架構程式
-
-
附錄 B Windows 傳統應用程式基礎架構
-
B.1 主程式(程式進入點)—— wWinMain
-
B.2 註冊視窗類別—— MyRegisterClass
-
B.3 產生視窗及初始化—— InitInstance
-
B.4 處理訊息的 Call Back 函式—— WndProc
-
B.5 對話框範例—— About
-
-
附錄 C 以資源編輯器來編輯對話框
-
C.1 在方案編管找到資源檔
-
C.2 滑鼠右鍵選擇加入
-
C.3 選擇「Dialog」
-
C.4 出現空白對話框
-
C.5 調整對話框大小
-
C.6 左側工具箱選擇元件
-
C.7 選擇元件放到對話框上
-
C.8 調整元件位置和大小
-
C.9 元件的位置和大小
-
-
附錄 D 主對話框元件參數
-
D.1 主對話框視窗參數
-
D.2 主對話框文字元件參數
-
D.3 勒索程式 Q & A 訊息—— RichEdit
-
D.4 主對話框按鈕元件參數
-
D.5 主對話框編輯框元件參數
-
D.6 主對話框圖片元件參數
-
D.7 主對話框勒索 Q&A 語系選擇
-
D.8 主對話框 Group Box 元件參數
-
D.9 漸層進度條
-
-
附錄 E Check Payment 對話框元件參數
-
E.1 Check Payment 對話框參數
-
E.2 Cancel 按鈕元件參數
-
E.3 進度條元件參數
-
E.4 文字元件參數
-
-
附錄 F Decrypt 對話框元件參數
-
F.1 Decrypt 對話框視窗參數
-
F.2 ComboBox 元件參數
-
F.3 按鈕元件參數
-
F.4 文字元件參數
-
F.5 ListBox 元件參數
-
-
附錄 G 模擬勒索程式建置測試流程
-
G.1 駭客電腦和受害者電腦的準備
-
G.2 建置專案產生各執行檔
-
G.3 受害電腦的準備工作
-
G.4 勒索程式開始攻擊
-
G.5 進行解密
-
-
- 出版地 : 臺灣
- 語言 : 繁體中文
評分與評論
請登入後再留言與評分