CTF中干擾逆向分析的幾種技術的介紹和解題思路
常見的干擾逆向分析的技術:花指令,反除錯,加殼,控制流混淆,雙行程保護,虛擬機保護技術
1.花指令
這是一種比較簡單的技巧,在原始的代碼中插入一段無用的,能夠干擾反匯編引擎的代碼
解題思路:花指令主要影響的是靜態分析,在IDA中,可以手動將花指令patch為nop空指令
2. 反除錯
反除錯技術是指在程式運行程序中探測其是否處于被除錯狀態,如果程式正處于被除錯,則無法正常運行
幾種Linux下常見的反除錯方法:
- 利用ptrace
linux下的除錯主要是通過ptrace系統呼叫來實作的,一個行程只能被一個程式跟蹤 - proc檔案系統檢測
讀取/proc/self/目錄下的部分檔案,根據程式在除錯和非除錯狀態下的不同來進行反除錯,如果是在非除錯情況下,TracePid為0;如果是在除錯情況下,則TracePid為跟蹤行程的pid號 - 父行程檢測
通過getppid系統呼叫獲取到程式的父行程,如果父行程是gdb,strace,ltrace,則處于正在被除錯
基本思路:定位到反除錯的代碼,對程式進行patch,在不影響程式正常運行的情況下,跳過對除錯器的檢測代碼
3. 加殼
經過加殼的程式,其真正的代碼是加密存放在二進制檔案中的,只有在執行時才從記憶體中解密還原出來,因此,首先自然是脫殼
4. 控制流混淆
這是一種很棘手的方式,沒有辦法直接進行靜態分析,也沒有辦法直接進行反編譯,除錯器也會陷入控制流的跳轉混亂中,
基本思路就是對于程式流混淆的程式,通常采用Trace的方法
5. 雙行程保護
Debug Blocker,是一種在除錯模式下運行自身程式的方法
這種保護通常存在兩個行程:除錯器和被除錯器的關系
特點:
- 防止代碼除錯
- 父行程能控制子行程
基本思路:通常父行程的功能都比較單一,因此首先對父行程進行分析,了解處理子行程的邏輯,然后對子行程進行patch,使子行程脫離主行程后也能正常運行,最后對子行程進行分析
6. 虛擬機保護
這種技術是指將代碼翻譯為機器和人都無法識別的一串偽代碼位元組流,這段用于翻譯偽代碼并負責具體執行的子程式就稱為虛擬機,它以一個函式的形式出現,函式的引數就是位元組碼的記憶體地址
一個虛擬機,它有一套自己的指令集架構,一開始,會有一個vm_init階段完成初始化操作,對暫存器進行初始化,對記憶體進行加載,之后,會有一個vm_run階段,開始取指令,決議指令,然后根據代碼的操作碼opcode分派處理函式
基本思路:首先逆向虛擬機,得到ISA,然后撰寫相應的反匯編工具對虛擬機指令進行反匯編,最后分析虛擬機的匯編代碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/234236.html
標籤:其他
上一篇:云計算概述
下一篇:Vue 原始碼實作: Data Binding 雙向資料系結(使用 Object.defineProperty 實作)
