7.7 周遊列國實例 (21-30)

(21) viper.py -> console.py -> plugins.py -> modules/virustotal.py -> abstracts.py -> colors.py

virustotal.py 模組需要繼承 abstracts.py 中的基因。

(22) viper.py -> console.py -> plugins.py -> modules/virustotal.py -> session.py -> out.py -> colors.py

virustotal.py 用 session.py 來檢查三件事。
1. __session__.is.set() 檢查 session 是否開啟。
2. 利用 __session__.file.md5 取得檔案 md5 hash,餵到 virustotal 查詢。

(23) viper.py -> console.py -> plugins.py -> modules/virustotal.py -> session.py -> objects.py

此處 session.py 中 objects.py 沒被用到。
objects.py 用來負責計算與提供,正被分析檔案的基本資訊,例如:檔案類型,sha256 hash value 等。
而此事,早在 session 一打開時就計算完畢了

(24) viper.py -> console.py -> plugins.py -> modules/yarascan.py -> out.py -> colors.py

若 console 接到內建模組 strings 指令,則會透過 plugins.py 載入 pe 模組。
用 dict 與 inspect 實作。 inspect 取得 module object。
plugins[member_object.cmd] = dict(obj=member_object, description=member_object.description)
將相對應指令塞入 dict 的 key 值,並透過建立巢狀字典,將 obj=member_object。
開發者就可透過 module = __modules__[root]['obj']() 初始化模組的 instance。

(25) viper.py -> console.py -> plugins.py -> modules/yarascan.py -> abstracts.py -> colors.py

yarascan.py 模組需要繼承 abstracts.py 中的基因。 

(26) viper.py -> console.py -> plugins.py -> modules/yarascan.py -> database.py -> out.py -> colors.py

yarascan.py 從 db 裡撈出所有樣本 samples = db.find(key='all'),
並用
rules.match(path)
掃描樣本。

(27) viper.py -> console.py -> plugins.py -> modules/yarascan.py -> database.py -> objects.py

新增樣本到資料庫中,會利用 objects.File 算出樣本基本資訊 (sha256, md5 等)。
或是
objects.py 中同時定義了 Singleton 模式,供 Database 類別繼承,保證一個類別只能有一個 instance。
但此處 yarascan.py 沒用到任何一種功能。

(28) viper.py -> console.py -> plugins.py -> modules/yarascan.py -> session.py -> out.py -> colors.py

virustotal.py 用 session.py 來檢查三件事。
1. __session__.is.set() 檢查 session 是否開啟。
2. 利用 __session__.file.path 取得檔案路徑。

(29) viper.py -> console.py -> plugins.py -> modules/yarascan.py -> session.py -> objects.py

此處 session.py 中 objects.py 沒被用到。
objects.py 用來負責計算與提供,正被分析檔案的基本資訊,例如:檔案類型,sha256 hash value 等。
而此事,早在 session 一打開時就計算完畢了

(30) viper.py -> console.py -> plugins.py -> modules/yarascan.py -> storage.py

yarascan.py 掃描檔案前,需透過 storage 中的 get_sample_path 取得已儲存檔案之路徑。

Last updated

Was this helpful?