本書是《特洛伊木馬病毒程式設計:使用Python》的進階版,設計以ISO OSI的七層架構為基礎,會議層以傳送權(token)來實作,表達層可傳輸的資料型別從最基本的正整數、bytes、str等,擴大到負數、dict 、list等較為複雜的結構。
真正木馬病毒在感染進入電腦,多半會以dropper或是downloader作為媒介,在本書的最後多加了一章,將木馬病毒的執行檔包裝成dropper的型態作為感染媒介的示範,讓各位朋友對於木馬病毒如何感染能多一層的認識。
本版的木馬病毒和前一版功能最大的不同在於本版不是被動接收檔案,而是主動遠端遙控木馬,由終端機下shell指令,另外還增加上傳、下載、執行程式,讓木馬病毒可以下載更多惡意的功能來增加其威力,另外還增加了screenshot的功能。
本書適合已熟悉Python語法的朋友,如有網路程式設計經驗者更佳。
書籍勘誤、與作者交流,請加入通往駭客之路粉絲團:
https://www.facebook.com/groups/TaiwanHacker/
作者簡介:
北極星
一群浪人,愛好資訊安全與駭客技術。
目錄
Chapter 01 Python 的網路程式設計
Python 的 socket 模組介紹
1.1 Socket 模組
1.1.1 引入 socket 模組
1.1.2 相連電腦的角色-client-server
1.1.3 連線比開檔複雜
1.2 Socket 的函數
1.2.1 socket()
1.2.2 bind()
1.2.3 listen()
1.2.4 accept()
1.2.5 connect()
1.2.6 send() 與 recv()
1.2.7 sendall()
1.2.8 shutdown()
1.2.9 close()
Chapter 02 建立工具
方便網路傳輸資料除錯的小工具
2.1 16 位元顯示-hexdump
2.1.1 hexdump 是什麼樣子
2.1.2 bytes 和 str 皆可用
2.1.3 切開 str 和 bytes
2.1.4 offset 資訊
2.1.5 顯示十六進位碼-bytes 轉 int list
2.1.6 顯示原字元
2.1.7 過濾不可視的字元
2.1.8 補滿空白字元
2.1.9 增加適當空白字元隔開-split
2.2 Echo 伺服器程式
Chapter 03 資料的轉換(一):struct 模組
使用 struct 做基本型別 int 、float 與 bytes 之間的轉換
3.1 資料型別
3.2 型別的轉換
3.3 struct 模組
3.3.1 struct 的功能
3.3.2 struct 小試身手
3.4 對齊 (Alignment)
3.5 與 C/C++ 溝通-struct 的目的
3.6 大端與小端
3.7 format character 的運用
3.7.1 目前 struct 最大整數為 8 bytes
3.7.2 用 bit_length() 取得實際長度來選擇
3.7.3 負數的問題
3.7.4 借用 format character 的定義
3.7.5 長度定義存放在 List 中
3.7.6 資料型態標記-Tag
3.7.7 以 format character 當做標記表示型態
3.7.8 浮點數
Chapter 04 資料的轉換(二):不定長度資料
bytes、str 等資料長度是變動非固定的,該如何轉換?
4.1 如何取得讀取長度
4.1.1 有固定長度的資料型別
4.1.2 無固定長度則補上長度資訊
4.2 不定長度資料的轉換
4.3 不定長度資料的還原對照表
4.4 超大型整數
4.4.1 Python 整數最大值
4.4.2 有加上長度資訊的版本
4.4.3 不用長度的古老方式
Chapter 05 資料的傳遞-表達層 INOUT
網路為多層架構,每一層功能相異,每層封包內容會有些許差異
5.1 網路的分層
5.1.1 TCP/IP v.s. ISO OSI
5.1.2 傳輸層
5.1.3 表達層
5.2 網路和檔案的存取介面一致化
5.2.1 虛擬基本類別-BaseIO
5.2.2 抽象基類-ABC 模組
5.2.3 一般檔案類別-FileIO
5.2.4 網路介面類別-SocketIO
5.2.5 依參數自動選擇類別-CreateIO
5.2.6 記憶體裡的資料當成檔案存取-MemIO
5.3 表達層的實作-INOUT
5.3.1 定義 Exception
5.3.2 利用 Exception 傳遞資訊
5.3.3 暫存目錄與暫存檔-tmp
5.3.4 INOUT 概觀
5.3.5 資料型別對照表
5.3.6 INOUT 與傳輸層之間的溝通
5.3.7 無長度資訊的大型整數
5.3.8 資料型態 (tag) 的存取
5.3.9 例外運用
5.4 INOUT 的擴充
5.4.1 為何需要擴充?
5.4.2 用暫存檔處理大型資料-INOUT_FILE
5.4.3 MemIO 和 INOUT_FILE 的 close() 傳回值
5.4.4 大型的數字-INOUT_INT
5.5 讓 INOUT 能夠處理大型資料
5.5.1 分批傳送
5.5.2 直接切開傳送
5.5.3 每塊資料加上 tag
5.5.4 增加檢查 tag
5.5.5 INOUT 增加大型資料分批傳送
5.6 資料加密
Chapter 06 溝通與協調-會議層 Tower
兩台電腦之間的通訊連結和維持,由會議層來負責
6.1 溝通方式的約定
6.2 意外永遠會發生-莫非定律
6.3 網路程式最常發生的同時等待
6.4 傳送權-token
6.5 自由增加 IO 類別到 CreateIO
6.5.1 修改 CreateIO
6.5.2 類別的判斷和選擇
6.5.3 類別方法 (@classmethod)
6.5.4 類別變數和與類別方法
6.5.5 IOBase 增加類別方法 create()
6.5.6 讓 CreateIO 可以註冊新增 IO 類別
6.5.7 倒序選擇
6.6 封裝 CreateIO-meta class(可跳過不讀)
6.6.1 將 CreateIO 封裝成類別
6.6.2 物件版和函數版的差異
6.6.3 改變 isinstance() 判斷結果
6.6.4 Meta Class (元類)
6.6.5 改變 isinstance() 的判斷- __instancecheck__
6.6.6 類別的類別-meta class
6.6.7 meta class 的子類別
6.6.8 定義 meta class-BaseMeta
6.6.9 BaseIO 原有的 meta class-abc.ABCMeta
6.7 SocketIO 的進階版-Tower
6.7.1 Tower 概觀
6.7.2 收取的大小與請求不一致
6.7.3 緩衝區類別-IOBuffer
6.7.4 傳送權
6.7.5 伺服器端-TowerServer
Chapter 07 複雜資料型態-PARAM
讓 list 和 dict 等型態的傳遞,如 int 、bytes 、str 一樣容易
7.1 函數的參數是 list 和 dict
7.2 簡化的版本試做
7.2.1 write()
7.2.2 read()
7.2.3 增加 lable 的檢查
7.3 PARAM 正式實作
7.3.1 巢狀 dict 和 list
7.3.2 資料格式
7.3.3 傳送 dict
7.3.4 傳送 list
7.3.5 傳送一般資料
7.3.6 讀取 dict
7.3.7 讀取 list
7.3.8 讀取一般資料
7.4 表達層高階部份
Chapter 08 執行外部程式
木馬必須要能執行指令,才能有效控制電腦
8.1 指令輸入
8.2 新的伺服器,木馬的雛型
8.2.1 由 echo 伺服器修改
8.2.2 木馬的角色其實是伺服器
8.2.3 執行外部程式-subprocess 模組
8.2.4 Popen 的參數-str 的指令與 list 的指令
8.2.5 外部程式的輸出入
8.2.6 locale 模組
8.2.7 標準輸出及標準錯誤改為 str
8.3 執行指令
8.4 改變工作目錄的問題
Chapter 09 執行緒- threadManager
建立執行緒管理類別,統一管理
9.1 執行緒的基本概念
9.1.1 為何需要執行緒
9.1.2 過去多工是以程序為單位
9.1.3 執行緒負擔較小
9.2 執行緒程式寫作
9.2.1 執行緒程式的簡例
9.2.2 用 threading.Thread 產生執行緒
9.2.3 呼叫 start() 啟動執行緒
9.2.4 呼叫 join() 收回執行緒
9.3 多執行緒的收回問題
9.3.1 常見的收回範例
9.3.2 改進的收回流程
9.3.3 需要考慮同步問題
9.4 多執行緒的同步
9.4.1 多個程序存取共同資料
9.4.2 同時取用相同資料產生錯誤
9.4.3 資源競爭(race condition)
9.4.4 關鍵區域(Critical Section)
9.4.5 用 threading.Lock 鎖定
9.5 執行緒管理
9.5.1 執行緒管理類別-threadManager
9.5.2 threading.Thread 子類別 myThread
9.5.3 由 threadManager 管理,myThread 不需 join()
9.6 木馬加上執行緒
Chapter 10 常用工具
駭客要做的事,不可能只是下下 DOS 指令吧!
10.0 事前的準備-相異系統檔案路徑修正
10.1 下載功能-fetch
10.1.1 惡意軟體或工具可從網站下載時
10.1.2 命令對照表
10.1.3 URL 處理模組-urllib
10.2 傳送檔案到木馬端
10.2.1 檔案相關資訊
10.2.2 將檔案資訊還原成檔案
10.2.3 以 dict 格式傳送指令
10.2.4 存檔位置
10.3 從木馬取檔案回來
10.3.1 偷竊資料
10.3.2 後置處理
10.4 螢幕截圖
10.4.1 pyscreenshot 模組
10.4.2 wxPython 模組
10.4.3 pyscreenshot vs. wxPython
10.4.4 將截圖功能加入木馬
10.4.5 終端機顯示截圖
10.5 惡作劇藍畫面
10.5.1 Windows 粉絲的最愛
10.5.2 只要一個 bat 檔
Chapter 11 Reverse Shell
傳統由駭客連向木馬的方式,很輕易被現代的防火牆阻擋,所以出現了反向Shell
11.1 什麼是殼
11.2 傳統木馬
11.3 反向連線木馬
11.4 主從角色
11.5 木馬和駭客之間的連絡
11.5.1 取得內網 IP
11.5.2 找出外部 IP
11.6 產生 config.py
11.7 駭客伺服器
11.8 反向連線木馬
附錄 A 本書所有程式碼
附錄 B 程式測試與執行
附錄 C 程式簡單說明
附錄 D 實戰操作
D.1 安裝程序
D.2 製作執行檔
D.3 實際操作
給讀者們的一封信
Chapter 01 Python 的網路程式設計
Python 的 socket 模組介紹
1.1 Socket 模組
1.1.1 引入 socket 模組
1.1.2 相連電腦的角色-client-server
1.1.3 連線比開檔複雜
1.2 Socket 的函數
1.2.1 socket()
1.2.2 bind()
1.2.3 listen()
1.2.4 accept()
1.2.5 connect()
1.2.6 send() 與 recv()
1.2.7 sendall()
1.2.8 shutdown()
1.2.9 close()
Chapter 02 建立工具
方便網路傳輸資料除錯的小工具
2.1 16 位元顯示-hexdump
2.1.1 hexdump 是什麼樣子
2.1.2 bytes 和 str 皆可用
2.1.3 切開 str 和 bytes
2.1.4 offs...
購物須知
關於二手書說明:
商品建檔資料為新書及二手書共用,因是二手商品,實際狀況可能已與建檔資料有差異,購買二手書時,請務必檢視商品書況、備註說明及書況影片,收到商品將以書況影片內呈現為準。若有差異時僅可提供退貨處理,無法換貨或再補寄。
商品版權法律說明:
TAAZE 單純提供網路二手書託售平台予消費者,並不涉入書本作者與原出版商間之任何糾紛;敬請各界鑒察。
退換貨說明:
二手書籍商品享有10天的商品猶豫期(含例假日)。若您欲辦理退貨,請於取得該商品10日內寄回。
二手影音商品(例如CD、DVD等),恕不提供10天猶豫期退貨。
二手商品無法提供換貨服務,僅能辦理退貨。如須退貨,請保持該商品及其附件的完整性(包含書籍封底之TAAZE物流條碼)。若退回商品無法回復原狀者,可能影響退換貨權利之行使或須負擔部分費用。
訂購本商品前請務必詳閱
退換貨原則、
二手CD、DVD退換貨說明。