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