反調試技術,惡意代碼用它識別是否被調試,或者讓調試器失效。惡意代碼編寫者意識到分析人員經常使用調試器來觀察惡意代碼的操作,因此他們使用反調試技術盡可能地延長惡意代碼的分析時間。為了阻止調試器的分析,當惡意代碼意識到自己被調試時,它們可能改變正常的執行路徑或者修改自身程序讓自己崩潰,從而增加調試時間和復雜度。很多種反調試技術可以達到反調試效果。
總結了反調試技術有:
一、使用WindowsAPI :
IsDebuggerPresent
CheckRemoteDebuggerPresent ->call NtInformationProcess( 2參數ProcessInformationClass)
NTQueryObject(2參數ObjectInformationClass)檢查調試對象
NTQuerySystemInformation( 1參數SystemInformationClass)
ZwSetInformationThread(2參數ThreadInformationClass)設置ThreadHideFromDebugger,使線程與調試器強制分離
二、手動檢測數據結構
IsDebuggerPresent 查看peb
ProcessHeap 查看PEB結構的0x18處 ProcessHeap中的ForceFlags和Flags
檢測NTGlobalFlag
三、檢測調試器:
1、注冊表項:
SOFTWAREMicrosoftWindows NTCurrentVersionAeDebug(32位系統) SOFTWAREWow6432NodeMicrosoftWindowsNTCurrentVersionAeDebug(64位系統)
2、窗口檢測:
FindWindow EnumWindow
3、進程檢測
4、檢測父進程
5、是否有SeDebugPrivilege權限
6、檢測時間差
使用rdtsc指令 使用QueryPerformanceCounter和GetTickCount
7、斷點檢測
軟件斷點
硬件斷點
8、執行代碼校驗和檢查
四、干擾調試器
使用TLS回調
使用異常
回答所涉及的環境:聯想天逸510S、Windows 10。
反調試技術,惡意代碼用它識別是否被調試,或者讓調試器失效。惡意代碼編寫者意識到分析人員經常使用調試器來觀察惡意代碼的操作,因此他們使用反調試技術盡可能地延長惡意代碼的分析時間。為了阻止調試器的分析,當惡意代碼意識到自己被調試時,它們可能改變正常的執行路徑或者修改自身程序讓自己崩潰,從而增加調試時間和復雜度。很多種反調試技術可以達到反調試效果。
總結了反調試技術有:
一、使用WindowsAPI :
IsDebuggerPresent
CheckRemoteDebuggerPresent ->call NtInformationProcess( 2參數ProcessInformationClass)
NTQueryObject(2參數ObjectInformationClass)檢查調試對象
NTQuerySystemInformation( 1參數SystemInformationClass)
ZwSetInformationThread(2參數ThreadInformationClass)設置ThreadHideFromDebugger,使線程與調試器強制分離
二、手動檢測數據結構
IsDebuggerPresent 查看peb
ProcessHeap 查看PEB結構的0x18處 ProcessHeap中的ForceFlags和Flags
檢測NTGlobalFlag
三、檢測調試器:
1、注冊表項:
2、窗口檢測:
3、進程檢測
4、檢測父進程
5、是否有SeDebugPrivilege權限
6、檢測時間差
7、斷點檢測
軟件斷點
硬件斷點
8、執行代碼校驗和檢查
四、干擾調試器
使用TLS回調
使用異常
回答所涉及的環境:聯想天逸510S、Windows 10。