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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
SysWhispers — 직접 시스템 호출을 통한 AV/EDR 우회 | Kitploit
도구/GitHubGitHub/jthuraisamy/syswhispers
ExploitationIDS/IPS EvasionShellcodePenetration TestingRed TeamingPayload Development
GitHubjthuraisamy/syswhispers

SysWhispers

직접 시스템 호출을 통한 AV/EDR 우회

저장소 보기
2.0k2775년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

SysWhispers

SysWhispers는 직접 시스템 호출을 수행할 수 있는 헤더/ASM 파일을 생성하여 회피를 돕습니다.

Windows XP부터 Windows 10 19042(20H2)까지 모든 핵심 시스템 콜이 지원됩니다. 예제 생성 파일은 example-output/ 폴더에서 확인할 수 있습니다.

소개

다양한 보안 제품은 사용자 모드 API에 후크를 설치하여 실행 흐름을 자체 엔진으로 리디렉션하고 의심스러운 동작을 탐지합니다. 시스템 호출을 수행하는 ntdll.dll의 함수는 몇 개의 어셈블리 명령어로만 구성되어 있으므로, 이를 임플란트에서 직접 재구현하면 보안 제품 후크의 트리거를 우회할 수 있습니다. 이 기술은 @Cn33liz가 대중화했으며, 그의 블로그 게시물에서 더 많은 기술적 세부 사항을 확인할 수 있습니다.

SysWhispers는 레드 팀이 XP부터 모든 Windows 버전에서 커널 이미지(ntoskrnl.exe)의 모든 시스템 콜에 대한 헤더/ASM 쌍을 생성할 수 있도록 합니다. 헤더에는 필요한 형식 정의도 포함됩니다.

Dumpert POC와의 주요 구현 차이점은 OS 버전을 쿼리하기 위해 RtlGetVersion을 호출하지 않고, 대신 어셈블리에서 PEB를 직접 쿼리한다는 것입니다. 이점은 여러 Windows 버전을 지원하는 하나의 함수를 호출할 수 있다는 점입니다.

설치

root@kitploit:~
> git clone https://github.com/jthuraisamy/SysWhispers.git
> cd SysWhispers
> pip3 install -r .\requirements.txt
> py .\syswhispers.py --help

사용법 및 예제

명령줄

root@kitploit:~
# 지원되는 모든 Windows 버전과 호환되는 모든 함수 내보내기 (example-output/ 참조).
py .\syswhispers.py --preset all -o syscalls_all

# Windows 7, 8, 10과 호환되는 일반적인 함수만 내보내기.
py .\syswhispers.py --preset common -o syscalls_common

# 모든 버전과 호환되는 NtProtectVirtualMemory 및 NtWriteVirtualMemory 내보내기.
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem

# Windows 7, 8, 10과 호환되는 모든 함수 내보내기.
py .\syswhispers.py --versions 7,8,10 -o syscalls_78X

스크립트 출력

root@kitploit:~
PS C:\Projects\SysWhispers> py .\syswhispers.py --preset common --out-file syscom

  ,         ,       ,_ /_   .  ,   ,_    _   ,_   ,
_/_)__(_/__/_)__/_/_/ / (__/__/_)__/_)__(/__/ (__/_)__
      _/_                         /
     (/                          /   @Jackson_T, 2019

SysWhispers: Why call the kernel when you can whisper?

Common functions selected.

Complete! Files written to:
        syscom.asm
        syscom.h

기존 CreateRemoteThread DLL 인젝션의 전후 예제

root@kitploit:~
py .\syswhispers.py -f NtAllocateVirtualMemory,NtWriteVirtualMemory,NtCreateThreadEx -o syscalls
root@kitploit:~
#include <Windows.h>

void InjectDll(const HANDLE hProcess, const char* dllPath)
{
    LPVOID lpBaseAddress = VirtualAllocEx(hProcess, NULL, strlen(dllPath), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
    LPVOID lpStartAddress = GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
	
    WriteProcessMemory(hProcess, lpBaseAddress, dllPath, strlen(dllPath), nullptr);
    CreateRemoteThread(hProcess, nullptr, 0, (LPTHREAD_START_ROUTINE)lpStartAddress, lpBaseAddress, 0, nullptr);
}
root@kitploit:~
#include <Windows.h>
#include "syscalls.h" // 생성된 헤더를 포함합니다.

void InjectDll(const HANDLE hProcess, const char* dllPath)
{
    HANDLE hThread = NULL;
    LPVOID lpAllocationStart = nullptr;
    SIZE_T szAllocationSize = strlen(dllPath);
    LPVOID lpStartAddress = GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
	
    NtAllocateVirtualMemory(hProcess, &lpAllocationStart, 0, (PULONG)&szAllocationSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
    NtWriteVirtualMemory(hProcess, lpAllocationStart, (PVOID)dllPath, strlen(dllPath), nullptr);
    NtCreateThreadEx(&hThread, GENERIC_EXECUTE, NULL, hProcess, lpStartAddress, lpAllocationStart, FALSE, 0, 0, 0, nullptr);
}

일반 함수

--preset common 스위치를 사용하면 다음 함수로 구성된 헤더/ASM 쌍이 생성됩니다.

함수 목록을 펼치려면 클릭하세요.
  • NtCreateProcess (CreateProcess)
  • NtCreateThreadEx (CreateRemoteThread)
  • NtOpenProcess (OpenProcess)
  • NtOpenThread (OpenThread)
  • NtSuspendProcess
  • NtSuspendThread (SuspendThread)
  • NtResumeProcess
  • NtResumeThread (ResumeThread)
  • NtGetContextThread (GetThreadContext)
  • NtSetContextThread (SetThreadContext)
  • NtClose (CloseHandle)
  • NtReadVirtualMemory (ReadProcessMemory)
  • NtWriteVirtualMemory (WriteProcessMemory)
  • NtAllocateVirtualMemory (VirtualAllocEx)
  • NtProtectVirtualMemory (VirtualProtectEx)
  • NtFreeVirtualMemory (VirtualFreeEx)
  • NtQuerySystemInformation (GetSystemInfo)
  • NtQueryDirectoryFile
  • NtQueryInformationFile
  • NtQueryInformationProcess
  • NtQueryInformationThread
  • NtCreateSection (CreateFileMapping)
  • NtOpenSection
  • NtMapViewOfSection
  • NtUnmapViewOfSection
  • NtAdjustPrivilegesToken (AdjustTokenPrivileges)
  • NtDeviceIoControlFile (DeviceIoControl)
  • NtQueueApcThread (QueueUserAPC)
  • NtWaitForMultipleObjects (WaitForMultipleObjectsEx)

Visual Studio로 가져오기

  1. 생성된 H/ASM 파일을 프로젝트 폴더에 복사합니다.
  2. Visual Studio에서 프로젝트 → 빌드 사용자 지정... 으로 이동하여 MASM을 사용하도록 설정합니다.
  3. 솔루션 탐색기에서 .h 및 .asm 파일을 각각 헤더 파일과 소스 파일로 프로젝트에 추가합니다.
  4. ASM 파일의 속성으로 이동하여 항목 형식을 Microsoft 매크로 어셈블러로 설정합니다.
  5. 프로젝트 플랫폼이 x64로 설정되어 있는지 확인합니다. 현재 32비트 프로젝트는 지원되지 않습니다.

주의사항 및 제한사항

  • 현재 64비트 Windows만 지원됩니다.
  • 그래픽 하위 시스템(win32k.sys)의 시스템 호출은 지원되지 않습니다.
  • Windows 10 SDK를 사용하는 Visual Studio 2019(v142)에서 테스트되었습니다.

문제 해결

  • Python 스크립트에서 ModuleNotFoundError 발생.
    • pip3 install -r requirements.txt로 필요한 모듈이 설치되었는지 확인하십시오.
  • 형식 재정의 오류: syscalls.h의 typedef가 이미 정의된 경우 프로젝트가 컴파일되지 않을 수 있습니다.
    • 필요한 함수만 포함했는지 확인합니다(즉, --preset all은 거의 필요하지 않음).
    • typedef가 다른 사용 중인 헤더에 이미 정의되어 있다면 syscalls.h에서 제거할 수 있습니다.

크레딧

이 스크립트는 @Jackson_T가 개발했지만, 많은 다른 사람들의 작업을 기반으로 합니다.

  • @j00ru: 시스템 콜 번호를 기계 판독 가능 형식으로 유지 관리한 점.
  • @FoxHex0ne: 많은 함수 프로토타입과 typedef를 기계 판독 가능 형식으로 분류한 점.
  • @PetrBenes, NTInternals.net 팀, MSDN: 추가 프로토타입과 typedef 제공.
  • @Cn33liz: 초기 Dumpert POC 구현.

특별히 @Dcept905님께 테스트와 제안에 감사드립니다.

관련 문서 및 프로젝트

  • @0x00dtm: 사용자 영역 API 모니터링 및 코드 인젝션 탐지
  • @0x00dtm: 사용자 영역 후크 무력화 (ft. Bitdefender) (코드)
  • @Cn33liz: 직접 시스템 호출과 sRDI를 결합하여 AV/EDR 우회 (코드)
  • @mrgretzky: 내부에서 안티바이러스 실시간 보호 무력화
  • @SpecialHoang: EDR 메모리 보호 우회, 후킹 소개 (코드)
  • @xpn 및 @domchell: Cylance 무력화: 현대 EDR 사례 연구
  • @mrjefftang: 범용 언후킹: 보안 소프트웨어 블라인드 처리 (코드)
  • @spotheplanet: C++를 이용한 완전한 DLL 언후킹
  • @hasherezade: Floki 봇과 은밀한 드로퍼
  • @hodg87:

라이선스

이 프로젝트는 Apache License 2.0에 따라 라이선스가 부여됩니다.

도구 다운로드
최신 Trickbot 변종의 새로운 트릭
  • @hodg87: 직접 시스템 호출 사용 시 맬웨어 완화