惡意代碼的靜態分析主要包括:
反惡意代碼軟件的檢測和分析:反惡意代碼軟件檢測惡意代碼的方法有特征代碼法、校驗和法、行為監測法、軟件模擬法等。根據惡意代碼的信息去搜尋更多的資料,若該惡意代碼的分析數據已被反惡意代碼軟件收錄,那就可以直接利用它們的分析結果。
字符串分析:字符串分析的目的是尋找文件中使用的 ASCII 或其他方法編碼的連續字符串。一些有用的信息可以通過在惡意代碼樣本中搜尋字符串得到,比如:①也惡意代碼的名字;②幫助和命令行選項; ③用戶對話框,可以通過它分析惡意代碼的目的; ④后門密碼;⑤惡意代碼相關的網址; ⑥惡意代碼作者或者攻擊者的 E-mail 地址;⑦惡意代碼用到的庫,函數調用,以及其他的可執行文件; ⑧其他的有用的信息。
腳本分析:惡意代碼如果是用 JS Perl 或者 shell 腳本等腳本語言編寫的,那么惡意代碼本身就可能帶有源代碼。通過文本編輯器將腳本打開查看源代碼。腳本分析能幫助分析者用較短時間識別出大量流行的腳本類型。
靜態反編譯分析:對于攜帶解釋器的惡意代碼可以采用反編譯工具查看源代碼。源代碼在編譯時,代碼會被編譯器優化,組成部分被重寫,使得程序更適合解釋和執行,上述面向計算機優化的特性,使得編譯的代碼不適合逆向編譯。因此,逆向編譯是將對機器優化的代碼重新轉化成源代碼,這使得程序結構和流程分離開來,同時變量的名字由機器自動生成,這使得逆向編譯的代碼有著較差的可讀性。
靜態反匯編分析:有線性遍歷和遞歸遍歷兩種方法。GNU 程序 objdump 和一些鏈接優化工具使用線性遍歷算法從輸入程序的入口點開始反匯編,簡單地遍歷程序的整個代碼區,反匯編它所遇到的每一條指令。雖然方法簡單,但存在不能夠處理嵌入指令流中的數據的問題,如跳轉表。遞歸遍歷算法試圖用反匯編出來的控制流指令來指導反匯編過程,以此解決上面線性遍歷所存在的問題。直觀地說,無論何時反匯編器遇到 個分支或者 CALL 指令,反匯編都從那條指令的可能的后續指令繼續執行。很多的二進制傳輸和優化系統采用這種方法。其缺點是很難正確判定間接控制轉移的可能目標。惡意代碼被反匯編后,就可用控制流分析來構造它的流程圖,該圖又可以被很多的數據流分析工具所使用。由于控制流程圖是大多數靜態分析的基礎,所以不正確的流程圖反過來會使整個靜態分析過程得到錯誤的結果。
回答所涉及的環境:聯想(Lenovo)天逸510S、Windows 10。
惡意代碼的靜態分析主要包括:
反惡意代碼軟件的檢測和分析:反惡意代碼軟件檢測惡意代碼的方法有特征代碼法、校驗和法、行為監測法、軟件模擬法等。根據惡意代碼的信息去搜尋更多的資料,若該惡意代碼的分析數據已被反惡意代碼軟件收錄,那就可以直接利用它們的分析結果。
字符串分析:字符串分析的目的是尋找文件中使用的 ASCII 或其他方法編碼的連續字符串。一些有用的信息可以通過在惡意代碼樣本中搜尋字符串得到,比如:①也惡意代碼的名字;②幫助和命令行選項; ③用戶對話框,可以通過它分析惡意代碼的目的; ④后門密碼;⑤惡意代碼相關的網址; ⑥惡意代碼作者或者攻擊者的 E-mail 地址;⑦惡意代碼用到的庫,函數調用,以及其他的可執行文件; ⑧其他的有用的信息。
腳本分析:惡意代碼如果是用 JS Perl 或者 shell 腳本等腳本語言編寫的,那么惡意代碼本身就可能帶有源代碼。通過文本編輯器將腳本打開查看源代碼。腳本分析能幫助分析者用較短時間識別出大量流行的腳本類型。
靜態反編譯分析:對于攜帶解釋器的惡意代碼可以采用反編譯工具查看源代碼。源代碼在編譯時,代碼會被編譯器優化,組成部分被重寫,使得程序更適合解釋和執行,上述面向計算機優化的特性,使得編譯的代碼不適合逆向編譯。因此,逆向編譯是將對機器優化的代碼重新轉化成源代碼,這使得程序結構和流程分離開來,同時變量的名字由機器自動生成,這使得逆向編譯的代碼有著較差的可讀性。
靜態反匯編分析:有線性遍歷和遞歸遍歷兩種方法。GNU 程序 objdump 和一些鏈接優化工具使用線性遍歷算法從輸入程序的入口點開始反匯編,簡單地遍歷程序的整個代碼區,反匯編它所遇到的每一條指令。雖然方法簡單,但存在不能夠處理嵌入指令流中的數據的問題,如跳轉表。遞歸遍歷算法試圖用反匯編出來的控制流指令來指導反匯編過程,以此解決上面線性遍歷所存在的問題。直觀地說,無論何時反匯編器遇到 個分支或者 CALL 指令,反匯編都從那條指令的可能的后續指令繼續執行。很多的二進制傳輸和優化系統采用這種方法。其缺點是很難正確判定間接控制轉移的可能目標。惡意代碼被反匯編后,就可用控制流分析來構造它的流程圖,該圖又可以被很多的數據流分析工具所使用。由于控制流程圖是大多數靜態分析的基礎,所以不正確的流程圖反過來會使整個靜態分析過程得到錯誤的結果。
回答所涉及的環境:聯想(Lenovo)天逸510S、Windows 10。