PC리버싱/안티디버깅

TLS callback(TLS(Thread Local Storage) 와 isdebuggerpresent)

Lamed_Dhhd 2020. 5. 24. 22:38
반응형

TLS(Thread Local Storage)는 스레드 별로 고유한 저장공간을 가질 수 있는 방법이다.

 

악성코드나 패킹에

안티 디버깅 기술로 TLS callback등이있다

디버거가 프로그램을 열면 EP지점에서 멈추는데

TLS callback은 EP전에 실행된다

이걸 이용해 악성코드나 패킹은

디버거 탐지 기술을 넣어둔다 TLS안에

만약 이런한 지식 없다면 안티디버깅하기가 꽤어려울것이다

소스코드 Visual Studio 2019 기준

#define _WIN32_WINNT 0x0500
#include <stdio.h>
#include <windows.h>
#pragma comment(linker, "/INCLUDE:__tls_used")
void NTAPI Tls_Callback(PVOID THandle, DWORD Reason, PVOID Reserved)
{
    if (IsDebuggerPresent()) //IsDebuggerPresent()함수를 이용해 디버깅 중인지 확인
    {
        printf("TLS검사디버거 발견0\n");
        ExitProcess(1);
    }
    else
        printf("TLS검사정상\n");
    
}
#pragma data_seg(".CRT$XLX") //TLS콜백 사용시 꼭 필요한 섹션
PIMAGE_TLS_CALLBACK TLS_CALLBACk[] = { Tls_Callback, 0 }; // TLS callback 함수 등록
#pragma data_seg() 

int main()
{
    while (1)
    {
        Sleep(1000);
        if (IsDebuggerPresent())
            printf("IsDebuggerPresent 디버거 발견1\n");
        else
            printf("IsDebuggerPresent 정상1\n");
    }

    return 0;
}

TLS CALLBACK .zip
0.01MB

위에것가핵심이다

설정에서 TLS를 봐서 안에코드를 보고수정해도된다

여기서 수정해서 넘어가도된다

jmp해도되지만 다른방법도한번보자

CTF Exploer

TLS RVA값을 00000000으로 만들면된다

반응형

'PC리버싱 > 안티디버깅' 카테고리의 다른 글

isdebuggerpresent 어셈구현  (0) 2020.06.08
GS (Stack Canary/Cookie)우회  (0) 2020.05.28
간단한 ASLR우회 방법  (0) 2020.05.20
Visual Studio 2019로보는 ASLR  (0) 2020.05.20
1. CheckRemoteDebuggerPresent() Windows API  (0) 2020.05.20