TLS调试检测和反调试
生活随笔
收集整理的這篇文章主要介紹了
TLS调试检测和反调试
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
TLS是線程本地存儲,定義TLS函數,在函數內可以調用內核函數 NtQueryInformationProcess 檢查當前是否處于被調試狀態,也可以調用 NtSetInformationThread 讓調試崩潰。
// TLS反調試.cpp : 此文件包含 "main" 函數。程序執行將在此處開始并結束。 //#include <stdio.h> #include <Windows.h> // MINT 是github上的一個項目,里面有對內核函數的聲明 // https://github.com/Chuyu-Team/MINT #include "MINT.h"#pragma comment(linker,"/INCLUDE:__tls_used")DWORD isDebug = 0; void NTAPI TLS_CALLBACK(PVOID DllHandle, DWORD Reason, PVOID Reserved) {if (Reason == DLL_PROCESS_ATTACH){//MessageBoxA(0, "TLS函數執行", 0, 0);//NtSetInformationThread(GetCurrentThread(), ThreadHideFromDebugger, 0, 0); // 禁止調試NtQueryInformationProcess(GetCurrentProcess(), ProcessDebugPort, (PVOID)&isDebug, sizeof(DWORD), NULL); // 檢查是否被調試} }int main() {if (isDebug){printf("正在被調試\n");}else{printf("沒有被調試\n");}return 0; }#pragma data_seg(".CRT$XLX") PIMAGE_TLS_CALLBACK pTLS_CALLBACKs[] = { TLS_CALLBACK,NULL }; #pragma data_seg() 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的TLS调试检测和反调试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程inline hook
- 下一篇: GIVE_A_TRY.exe 逆向(NC