Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
wasmforge — WasmForge — Go 및 C# 프로그램을 단일 바이너리, WASM 샌드박스 네이티브 실행 파일로 컴파일하며 다형성 출력을 지원합니다. | Kitploit
도구/GitHubGitHub/praetorian-inc/wasmforge
Penetration Testing FrameworksPrivilege EscalationExploit FrameworksPayload GenerationPersistence MechanismsLateral MovementWeb Application ExploitationPost-ExploitationCommand and ControlBinary AnalysisRed Teaming
11912763개월 전Kitploit 검토 완료
Shellcode Generation
GitHubpraetorian-inc/wasmforge

wasmforge

WasmForge — Go 및 C# 프로그램을 단일 바이너리, WASM 샌드박스 네이티브 실행 파일로 컴파일하며 다형성 출력을 지원합니다.

저장소 보기

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

WasmForge

WasmForge는 Go와 C# 프로그램을 WebAssembly로 컴파일한 후, 단일 네이티브 바이너리로 패키징합니다. 결과 실행 파일은 게스트 코드를 WASM 런타임( wazero 의 빌드별 포크) 내부에 샌드박싱합니다. 샌드박스 내부에서 게스트는 투명하게 네트워킹, raw 소켓, Win32 API, macOS 프레임워크 API에 액세스할 수 있습니다.

net.Dial, net.Listen, 또는 net/http를 사용하여 일반 Go 코드를 작성할 수 있습니다. 기존 .NET Framework C# 프로젝트를 마이그레이션할 수도 있습니다. 어느 쪽이든, 출력은 Windows 또는 macOS에서 실행되는 단일 바이너리이며, 사용자가 게스트 소스를 수정할 필요가 없습니다.

WasmForge Sliver 데모

그냥 사람과 대화하고 싶어요

이 프로젝트를 잠깐만 훑어봐도 LLM을 매우 많이 활용하여 개발되었다는 것을 알 수 있습니다. 문서의 상당 부분도 마찬가지지만, 이 섹션은 그렇지 않습니다. WasmForge를 실제로 사용하는 과정을 최대한 간단하게 만들기 위해 이 README를 최대한 간소화했습니다. 또한 LLM이 자신의 성과를 지나치게 미화하는 문서를 작성하지만, 한계점이 그렇게 명확하게 드러나지는 않습니다.

기대치를 적절히 설정하기 위해, Go의 다양한 기능과 함께 테스트되었지만 모든 Go 프로그램을 위한 완벽한 솔루션은 아닙니다. 아직 제대로 지원되지 않는 win32 API(콜백 썽크가 필요한 API 등)가 상당수 있습니다. 예를 들어 Sliver는 많은 명령어에서 작동하지만 완전한 1:1 기능 포팅은 아닙니다. 예를 들어 ls 명령어는 여전히 전통적인 C:\ 경로 대신 /를 포함한 경로를 표시하는데, 이는 WASM 블롭이 Windows 내에 있다는 것을 완전히 인식하지 못하기 때문입니다. 다른 기능은 그냥 충돌을 일으킬 수도 있습니다. 실제 타겟에서 사용하기 전에 사용하려는 기능을 반드시 테스트하세요. 작동하지 않는 것이 있다면, 문제가 되는 가장 기본적인 API 예제를 작성하여 이슈를 열거나 PR을 제출해 주세요.

C# 쪽은 궁극적으로 구현보다는 개념 증명에 가깝습니다. C#을 WASM으로 컴파일하는 데 사용되는 프로세스는 너무 실험적이어서 WasmForge가 실행을 위해 프로그램의 상당 부분을 다시 작성해야 하는 경우가 많습니다. 결국 이 기능에 너무 깊이 빠져든 것 같고, 그냥 사람들에게 LLM을 사용하여 C# 코드를 Go 코드로 다시 작성하도록 권장했어야 했을 수도 있습니다. 아마도 처리하기에 덜 고통스러울 것입니다. 그렇긴 하지만, C# -> Wasm -> WasmForge 의 일반적인 패턴은 작동하며 많은 C# 특화 탐지를 우회합니다.

이 점에서 WasmForge는 주로 정적 탐지를 처리하기 위해 설계되었습니다. 변환 과정은 인-메모리 스캐닝에서도 대부분의 탐지를 우회하지만, 궁극적으로 바이너리에 mimikatz나 sliver와 같은 매우 명백한 문자열이 포함되어 있으면 몇 가지 저비용 인-메모리 스캔에 탐지될 수 있습니다. 자동 문자열 난독화는 자동화하기 쉬운 기능이므로 향후 추가될 예정이지만, 첫 번째 버전에서는 디버깅을 상대적으로 간단하게 유지하기 위해 빌드 파이프라인에 추가 복잡성을 추가하고 싶지 않았습니다.

이 저장소의 소스 코드를 정리/통합하려는 노력이 있었지만 여전히 상당히 체계적이지 않습니다. 다양한 테스트 프로세스를 위한 여러 폴더가 있습니다. 기본 단위 테스트는 일반적으로 examples/와 test/에 있고, 전체 실험실 환경에서 실행하도록 설계된 더 복잡한 테스트는 testdata/에 있습니다. 또한 scripts/ 및 internal/devtools 폴더에는 개발/테스트 전용 도구가 있습니다. 이는 자신만의 테스트 환경을 구축하여 추가 개발을 하려는 경우에만 필요합니다. 일반적으로 이렇게 복잡한 것을 LLM으로 개발하려면 생성 과정을 안내할 매우 명확한 테스트 케이스가 많이 필요합니다. 그렇지 않으면 전혀 작동하지 않는 결과물이 나옵니다. 이 프로젝트에는 이러한 하네스가 포함되어 있어 관심 있는 사람이라면 누구나 도구 개발을 더 진행하거나 프로젝트에 기여할 수 있습니다.

커뮤니티에서 이 도구를 비교적 쉽게 사용할 수 있기를 바라며, 시간이 지남에 따라 계속 개선해 나갈 것입니다. 언젠가는 C# 컴파일이 Go 컴파일만큼 잘 작동하는 날이 올지도 모르겠습니다.

빠른 시작 (Go 프로젝트)

wasmforge를 얻는 세 가지 방법이 있습니다:

  1. 사전 빌드된 바이너리. 릴리스 페이지 에서 릴리스를 받으세요 — Linux, macOS, Windows용 CLI 빌드가 각 태그에 첨부되어 있습니다.

  2. 도커 이미지. C# / .NET 프로젝트의 경우, 번들된 이미지에는 모든 필수 구성 요소(.NET 10 SDK, NativeAOT-LLVM 워크로드, WASI SDK 24.0, wasm-ld, osslsigncode)가 사전 설치되어 있습니다. make docker-build로 한 번 빌드하고 make docker-run으로 구동하세요 — 전체 워크플로는 docs/CSHARP.md를 참조하세요. C#의 경우 권장되는 방법입니다.

  3. 소스에서 빌드.

    make build
    

    make build는 임베디드 internal/build/build_assets.tar.gz를 재생성한 다음 CLI를 컴파일합니다. go build -o wasmforge ./cmd/wasmforge만 실행하면 작동하는 바이너리를 얻을 수 있지만, 배포 모드 빌드(CLI가 이 소스 트리 외부에서 실행될 때)는 오래된 임베디드 아카이브를 사용합니다. 자세한 설명은 CONTRIBUTING.md를 참조하세요.

examples/ 디렉토리에는 바로 빌드할 수 있는 실행 가능한 Go 프로그램이 있습니다. 전체 목록은 examples/README.md를 참조하세요.

Windows 타겟팅

GOOS=windows GOARCH=amd64 ./wasmforge build \
  --ghost traefik \
  -o myapp.exe \
  /path/to/your/project

Win32 API 브리지는 GOOS=windows일 때마다 자동으로 활성화됩니다 — 일반적인 경우 더 이상 --win32-apis를 전달할 필요가 없습니다.

--ghost traefik은 임베디드 gopclntab 심볼 분포를 Traefik 리버스 프록시처럼 보이게 교체합니다. 번들된 프로필 중에서 이 프로필은 가장 낮은 VirusTotal 탐지율을 생성합니다. 다른 프로필과 자신만의 프로필을 생성하는 방법은 docs/GHOST-PROFILES.md에 있습니다.

Windows 타겟은 기본적으로 자체 서명 인증서로 자동 서명됩니다. --sign google.com을 사용하여 도메인의 TLS 인증서를 스푸핑하거나, --no-sign을 사용하여 서명을 완전히 비활성화합니다.

macOS 타겟팅

# Intel
GOOS=darwin GOARCH=amd64 ./wasmforge build -o myapp /path/to/your/project

# Apple Silicon
GOOS=darwin GOARCH=arm64 ./wasmforge build -o myapp /path/to/your/project

추가 플래그가 필요하지 않습니다. macOS 프레임워크 브리지는 GOOS=darwin일 때마다 자동으로 활성화됩니다. 프레임워크 브리지, purego/ObjC 지원 및 기타 Apple 관련 참고 사항은 docs/MACOS.md를 참조하세요.

선택적 플래그

# Raw 소켓 지원 (빌드 시 CAP_NET_RAW 또는 루트 필요)
./wasmforge build --raw-sockets -o myapp ./path/to/project

# 자세한 출력 (처음 빌드 시 유용)
GOOS=windows GOARCH=amd64 ./wasmforge build --ghost traefik --win32-apis -v -o tool.exe /path/to/project

# 사용자 정의 PE VERSIONINFO (Windows 전용)
./wasmforge build --pe-company "Acme Corp" --pe-product "AcmeTool" --pe-file-version "10.0.19041.1" ...

C# / .NET 프로젝트 컴파일

C# 프로젝트(.csproj 파일)는 자동으로 감지됩니다. WasmForge는 NativeAOT-WASI 마이그레이션, 패치 및 빌드 파이프라인을 하나의 명령으로 실행합니다:

GOOS=windows GOARCH=amd64 ./wasmforge build --win32-apis -o seatbelt.exe path/to/Seatbelt/Seatbelt/

C# 작업의 경우 Docker 빌드 환경을 강력히 권장합니다. 모든 필수 구성 요소(.NET 10 SDK, NativeAOT-LLVM 워크로드, WASI SDK 24.0, wasm-ld)를 번들로 제공하므로 호스트에 설치할 필요가 없습니다. 전체 지침은 docs/CSHARP.md에 있습니다.

CLI 요약

wasmforge build [package]      Go (또는 C#) 패키지를 WASM 샌드박스 네이티브 바이너리로 컴파일
  -o, --output <path>          출력 바이너리 경로
  --ghost <name>               고스트 프로필: traefik, caddy, terraform (docs/GHOST-PROFILES.md 참조)
  --raw-sockets                Raw 소켓 지원 활성화
  --win32-apis                 Win32 API 브리지 활성화 (Windows 타겟)
  --sign <mode>                바이너리 서명: 'self' 또는 도메인 이름 (Windows 기본값: self)
  --no-sign                    Windows 타겟의 기본 자동 서명 비활성화
  --tags <tags>                Go 빌드 태그 (쉼표로 구분)
  --pe-company / --pe-product / --pe-description / --pe-copyright / --pe-file-version
                               PE VERSIONINFO 재정의
  -v, --verbose                자세한 빌드 출력

wasmforge run [package]        빌드 후 즉시 실행
wasmforge clean                캐시된 패치된 GOROOT 제거 (~/.wasmforge/cache/)
wasmforge version              버전 출력

wasmforge dotnet-migrate <dir> .NET Framework 프로젝트를 .NET 10 NativeAOT-WASI로 마이그레이션
wasmforge dotnet-patch <dir>   NativeAOT-WASI C# 소스 패치 적용

기능

WasmForge는 WASM과 기본 호스트 간의 격차를 해소하여 게스트 프로그램이 수정 없이도 작동할 수 있게 합니다.

플랫폼 API. TCP, UDP, DNS, HTTP, TLS 및 raw 소켓은 Windows와 macOS 모두에서 게스트 코드 변경 없이 작동합니다. Windows에서 WasmForge는 전체 Win32 표면(레지스트리, 파일 I/O, 프로세스, DLL 로딩, 최대 15개 인수의 SyscallN)을 프록시합니다. 포인터 변환은 자동입니다. COM vtable 체인이 미러링되어 CLR 및 기타 COM 중심 API가 처음부터 끝까지 작동합니다. macOS에서 dlopen 및 dlsym은 모든 프레임워크(Security, CoreGraphics, IOKit 등)에 도달할 수 있으며, ebitengine/purego 및 Objective-C 런타임이 즉시 작동합니다.

.NET 호스팅 및 마이그레이션. CLR은 표준 체인(CoInitializeEx, CLRCreateInstance, Load_3, Invoke_3)을 통해 로드됩니다. AMSI는 시작 시 패치되어 Assembly.Load(byte[])가 알려진 도구를 차단하지 않습니다. 별도의 NativeAOT-WASI 파이프라인은 기존 .NET Framework 프로젝트를 가져와 타겟에 .NET 런타임 없이 단일 Windows PE 바이너리를 생성합니다.

호스트 메모리 및 셸코드. VirtualAlloc 기반 호스트 메모리 프록시는 게스트 내부에서 접근 가능합니다. 따라서 WASM 샌드박스를 벗어나지 않고도 COFF/BOF 로더 및 셸코드 실행이 가능합니다.

협력적 양보. 블로킹 Win32 API(Sleep, WaitForSingleObject, ReadFile 등)는 WASM 고루틴을 중단시키지 않습니다. 호스트는 백그라운드 고루틴에서 호출을 디스패치하고 결과가 준비될 때까지 게스트에게 양보 신호를 보냅니다.

다형성 출력. 모든 빌드는 구조적으로 고유한 바이너리를 생성합니다. WASM opcode가 순열되고, 섹션 ID와 매직 바이트가 무작위화되며, 모든 식별자, PE 임포트, VERSIONINFO 문자열, 라이선스 블록 및 소스 파일 이름이 삭제됩니다. 번들된 wazero 포크는 순열된 바이트코드와 일치하도록 다시 작성됩니다. 고스트 프로파일링은 gopclntab 심볼을 실제 엔터프라이즈 Go 바이너리(Traefik, Caddy, Terraform)와 일치하도록 다시 작성합니다. Windows 출력은 기본적으로 Authenticode 서명되며, 자체 서명되거나 osslsigncode를 통해 실제 도메인의 TLS 인증서를 스푸핑합니다.

아키텍처

도구 다운로드