
本書是《特洛伊木馬病毒程式設計:使用Python》的進階版,設計以ISO OSI的七層架構為基礎,會議層以傳送權(token)來實作,表達層可傳輸的資料型別從最基本的正整數、bytes、str等,擴大到負數、dict 、list等較為複雜的結構。
真正木馬病毒在感染進入電腦,多半會以dropper或是downloader作為媒介,在本書的最後多加了一章,將木馬病毒的執行檔包裝成dropper的型態作為感染媒介的示範,讓各位朋友對於木馬病毒如何感染能多一層的認識。
本版的木馬病毒和前一版功能最大的不同在於本版不是被動接收檔案,而是主動遠端遙控木馬,由終端機下shell指令,另外還增加上傳、下載、執行程式,讓木馬病毒可以下載更多惡意的功能來增加其威力,另外還增加了screenshot的功能。
本書適合已熟悉Python語法的朋友,如有網路程式設計經驗者更佳。
書籍勘誤、與作者交流,請加入通往駭客之路粉絲團:
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 指令輸入
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 指令輸入
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 指令輸入
北極星
一群浪人,愛好資訊安全與駭客技術。