디버깅을 어떻게 막아야 할까요?

뜻밖에도 새로운 배경화면을 찾아보게 됐는데, 역시 검은색 계열이 좋고, 부분적으로 색감을 넣으면 좋겠다. 바탕 화면에 아이콘을 배치해야 하니 다른 색상의 배경화면을 사용하면 아이콘이 잘 보이지 않을 것 같아.

위에 있는 어셈블리 코드 보고 생각 좀 해봤는데, 무슨 말인지 모르겠어. __INLINE_CODE_0__에게 맡겨서 명령어를 설명받았지만, 상황은 설명 안 해주네. 분명 특수한 상황에서만 쓰이는 명령어인 것 같아. 일반적인 코드는 이런식으로 생기지 않아.

지금은 검색 엔진이 더 나을 것 같아요, 어셈블리 지식이 부족하니까요

벽지

黑色汇编壁纸

어셈블리 코드

PUSHFD
MOV DWORD PTR [ESP],0X100
POPFD

실제 사용 시나리오

bool IsDebugged()
{
    __try
    {
        __asm
        {
            pushfd
            mov dword ptr [esp], 0x100
            popfd
            nop
        }
        return true;
    }
    __except(GetExceptionCode() == EXCEPTION_SINGLE_STEP
        ? EXCEPTION_EXECUTE_HANDLER
        : EXCEPTION_CONTINUE_EXECUTION)
    {
        return false;
    }
}

설명

TrapFlag강조_2SINGLE_STEP,우리가 코드를 추적하면 이 플래그는 디버거에 의해 초기화되므로 예외를 볼 수 없습니다

실제 테스트 결과, 검사 디버깅 함수를 직접 건너뛰면 디버깅이 감지되지 않지만, 검사 함수 실행 시에만 감지되는 것으로 나타났다 (자료 조사 중이며 아직 실제 확인은 되지 않았다)

참고 자료

관련 자료는 웹사이트의 영문 원본을 번역한 것이며, 사이트에서는 다양한 디버깅 방지 기술에 대해 설명하고 있습니다

Licensed under CC BY-NC-SA 4.0
마지막 수정: 2025년 05월 28일 09:47
금융 IT 프로그래머의 이것저것 만지작거리기와 일상의 중얼거림
Hugo로 만듦
JimmyStack 테마 사용 중