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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
acheron — Go 어셈블리에서 AV/EDR 회피를 위한 간접 시스템 콜 | Kitploit
도구/GitHubGitHub/f1zm0/acheron
ShellcodeRed TeamingPayload Development
GitHubf1zm0/acheron

acheron

Go 어셈블리에서 AV/EDR 회피를 위한 간접 시스템 콜

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

latest release version Go Reference Go Report Card project license Issues Twitter Follow

소개

Acheron은 SysWhisper3/FreshyCalls/RecycledGate에서 영감을 받은 라이브러리이며, 대부분의 기능이 Go 어셈블리로 구현되어 있습니다.

acheron 패키지는 사용자 모드 후크와 계측 콜백을 사용하여 커널 -> 사용자 공간으로 전환될 때 ntdll.dll로 돌아오지 않는 비정상적인 syscall을 탐지하는 AV/EDR을 우회하기 위해, Golang 트레이드크래프트에 간접 syscall 기능을 추가하는 데 사용할 수 있습니다.

주요 기능

  • 의존성 없음
  • 순수 Go 및 Go 어셈블리 구현
  • 정적 분석 대응을 위한 사용자 정의 문자열 암호화/해싱 함수 지원

작동 방식

새 syscall 프록시 인스턴스를 생성할 때 다음 단계가 수행됩니다:

  1. PEB를 탐색하여 메모리 내 ntdll.dll의 기본 주소 검색
  2. 내보내기 디렉터리 파싱하여 각 내보낸 함수의 주소 검색
  3. 각 Zw* 함수에 대한 시스템 서비스 번호(SSN) 계산
  4. ntdll.dll에서 후크되지 않은 깨끗한 syscall;ret 가젯을 열거하여 트램펄린으로 사용
  5. 프록시 인스턴스를 생성하여 간접(또는 직접) syscall을 수행할 수 있게 함

빠른 시작

acheron을 오프시크 도구에 통합하는 것은 매우 쉽습니다. 패키지는 다음과 같이 설치할 수 있습니다:

root@kitploit:~
go get -u github.com/f1zm0/acheron

그런 다음 acheron.New()를 호출하여 syscall 프록시 인스턴스를 생성하고 acheron.Syscall()을 사용하여 Nt* API에 대한 간접 syscall을 수행하면 됩니다.

최소 예제:

root@kitploit:~
package main

import (
    "fmt"
    "unsafe"

    "github.com/f1zm0/acheron"
)

func main() {
    var (
        baseAddr uintptr
        hSelf = uintptr(0xffffffffffffffff)
    )

    // Acheron 인스턴스 생성, SSN 해결, ntdll.dll에서 깨끗한 트램펄린 수집 등
    ach, err := acheron.New()
    if err != nil {
        panic(err)
    }

    // NtAllocateVirtualMemory에 대한 간접 syscall
    s1 := ach.HashString("NtAllocateVirtualMemory")
    if retcode, err := ach.Syscall(
        s1,                                     // 함수 이름 해시
        hSelf,                                  // arg1: _In_     HANDLE ProcessHandle,
        uintptr(unsafe.Pointer(&baseAddr)),     // arg2: _Inout_  PVOID *BaseAddress,
        uintptr(unsafe.Pointer(nil)),           // arg3: _In_     ULONG_PTR ZeroBits,
        0x1000,                                 // arg4: _Inout_  PSIZE_T RegionSize,
        windows.MEM_COMMIT|windows.MEM_RESERVE, // arg5: _In_     ULONG AllocationType,
        windows.PAGE_EXECUTE_READWRITE,         // arg6: _In_     ULONG Protect
    ); err != nil {
        panic(err)
    }
    fmt.Printf(
        "%s (status: 0x%x)\n",
        "NtAllocateVirtualMemory로 메모리 할당 완료",
        retcode,
    )

    // ...
}

예제

저장소에 포함된 예제는 다음과 같습니다:

예제설명
sc_inject매우 간단한 프로세스 인젝션 PoC, 직접 및 간접 syscall 모두 지원
process_snapshot간접 syscall을 사용하여 프로세스 스냅샷 촬영

acheron을 사용하는 다른 프로젝트:

  • hades

기여

기여는 환영합니다! 향후 추가되면 좋을 기능들은 다음과 같습니다:

  • 32비트 지원
  • 다른 해석기 유형 (예: HalosGate/TartarusGate)
  • 더 많은 예제

제안이나 아이디어가 있으시면 언제든지 이슈 또는 PR을 열어주세요.

참고 자료

  • Golang UK Conference 2016 - Michael Munday - Dropping Down Go Functions in Assembly
  • https://github.com/am0nsec/HellsGate
  • https://sektor7.net/#!res/2021/halosgate.md
  • https://github.com/trickster0/TartarusGate
  • https://github.com/klezVirus/SysWhispers3
  • https://github.com/crummie5/FreshyCalls
  • https://github.com/boku7/AsmHalosGate
  • https://github.com/thefLink/RecycledGate
  • https://github.com/C-Sto/BananaPhone
  • https://winternl.com/detecting-manual-syscalls-from-user-mode/
  • https://www.usenix.org/legacy/events/vee06/full_papers/p154-bhansali.pdf
  • https://redops.at/en/blog/direct-syscalls-a-journey-from-high-to-low

추가 참고 사항

이름은 그리스 신화에서 죽은 자의 영혼이 저승으로 운반되는 강인 Acheron에서 따왔습니다.

Note
이 프로젝트는 시맨틱 버전 관리를 사용합니다. 부 및 패치 릴리스는 이전 버전과의 호환성을 깨뜨리지 않아야 합니다. 주요 릴리스는 이전 버전과의 호환성을 깨는 주요 변경 사항에만 사용됩니다.

Warning
이 프로젝트는 교육 목적으로만 제작되었습니다. 소유하지 않은 시스템에서 사용하지 마십시오. 이 프로젝트의 개발자는 라이브러리의 부적절한 사용으로 인해 발생하는 모든 손해에 대해 책임을 지지 않습니다.

라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.

도구 다운로드
custom_hashfunc
acheron과 함께 사용할 수 있는 사용자 정의 인코딩/해싱 함수 예제