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