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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
go-shellcode — Windows Shellcode 실행기 및 지원 유틸리티의 저장소입니다. 이 애플리케이션들은 다양한 API 호출 또는 기법을 사용하여 Shellcode를 로드하고 실행합니다. | Kitploit
도구/GitHubGitHub/ne0nd0g/go-shellcode
Payload GenerationExploitationShellcodePost-ExploitationPenetration TestingRed TeamingPayload Development
GitHubne0nd0g/go-shellcode

go-shellcode

Windows Shellcode 실행기 및 지원 유틸리티의 저장소입니다. 이 애플리케이션들은 다양한 API 호출 또는 기법을 사용하여 Shellcode를 로드하고 실행합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

go-shellcode

go-shellcode는 Windows 셸코드 실행 도구(runner)와 보조 유틸리티의 저장소입니다. 이 애플리케이션들은 다양한 API 호출 또는 기법을 사용하여 셸코드를 로드하고 실행합니다.

사용 가능한 셸코드 실행 도구는 다음과 같습니다:

  • CreateFiber
  • CreateProcess
  • CreateProcessWithPipe
  • CreateRemoteThread
  • CreateRemoteThreadNative
  • CreateThread
  • CreateThreadNative
  • EarlyBird
  • EtwpCreateEtwThread
  • NtQueueApcThreadEx (로컬)
  • RtlCreateUserThread
  • Syscall
  • Shellcode 유틸리티
  • UuidFromStringA

CreateFiber

이 애플리케이션은 Kernel32.dll의 Windows CreateFiber 함수를 활용하여 현재 애플리케이션의 프로세스 내에서 셸코드를 실행합니다. 원격 프로세스 인젝션을 피하고 CreateThread 호출을 피하려는 경우 유용합니다. 이 애플리케이션은 golang.org/x/sys/windows 패키지의 함수를 사용하지 않습니다. 가장 큰 차이점은 필요한 모든 DLL과 프로시저를 자체적으로 로드하고 프로시저의 Call() 함수를 사용한다는 점입니다.

참고: 프로세스를 종료하는 방법을 찾지 못했으며, 수동으로 종료해야 합니다.

이 애플리케이션은 Windows 호스트에서 프로젝트 루트 디렉터리에서 다음 명령으로 컴파일할 수 있습니다:

set GOOS=windows GOARCH=amd64;go build -o CreateFiber.exe .\cmd\CreateFiber\main.go

CreateProcess

이 애플리케이션은 Kernel32.dll의 Windows CreateProcess 함수를 활용합니다. 프로세스는 일시 중단(suspended) 상태로 생성되고, IMAGE_OPTIONAL_HEADER 구조체의 AddressOfEntryPoint가 자식 프로세스에서 셸코드를 실행하도록 업데이트된 후 프로세스가 재개됩니다. 이는 프로세스 할로잉(process hollowing)의 한 유형이지만 기존 PE는 매핑 해제되지 않으며 ThreadContext는 업데이트되지 않습니다. 제공된 셸코드 아키텍처(x86 또는 x64)는 자식 프로세스의 아키텍처와 일치해야 합니다.

이 애플리케이션은 Windows 호스트에서 프로젝트 루트 디렉터리에서 다음 명령으로 컴파일할 수 있습니다:

set GOOS=windows GOARCH=amd64;go build -o CreateProcess.exe .\cmd\CreateProcess\main.go

CreateProcessWithPipe

이 애플리케이션은 Kernel32.dll의 Windows CreateProcess 함수를 활용합니다. 프로세스는 일시 중단(suspended) 상태로 생성되고, IMAGE_OPTIONAL_HEADER 구조체의 AddressOfEntryPoint가 자식 프로세스에서 셸코드를 실행하도록 업데이트된 후 프로세스가 재개됩니다. 이는 프로세스 할로잉(process hollowing)의 한 유형이지만 기존 PE는 매핑 해제되지 않으며 ThreadContext는 업데이트되지 않습니다. 제공된 셸코드 아키텍처(x86 또는 x64)는 자식 프로세스의 아키텍처와 일치해야 합니다.

이 애플리케이션은 CreateProcess와 다른 점은 자식 프로세스에서 STDOUT 또는 STDERR로 작성된 모든 데이터를 수집하여 부모 프로세스로 반환한다는 것입니다. 데이터는 CreatePipe 함수를 사용하여 익명 파이프를 생성하여 부모와 자식 프로세스가 통신하도록 함으로써 수집됩니다. 이는 Donut과 같은 도구를 사용하여 .NET 어셈블리를 자식 프로세스에서 셸코드로 실행하고 실행된 프로그램의 출력을 검색할 때 유용합니다. 다음 명령을 사용하여 Donut v0.9.3으로 Seatbelt를 실행하는 위치 독립적 셸코드를 생성할 수 있습니다:

.\donut.exe -o donut_v0.9.3_Seatbelt.bin -x 2 -c Seatbelt.Program -m Main -p "ARPTable" Seatbelt.exe

이 애플리케이션은 Windows 호스트에서 프로젝트 루트 디렉터리에서 다음 명령으로 컴파일할 수 있습니다:

set GOOS=windows GOARCH=amd64;go build -o CreateProcessWithPipe.exe .\cmd\CreateProcessWithPipe\main.go

CreateRemoteThread

이 애플리케이션은 Kernel32.dll의 Windows CreateRemoteThread 함수를 활용하여 원격 프로세스에서 셸코드를 실행합니다. 이 애플리케이션은 주입할 대상 프로세스가 이미 실행 중이어야 합니다. 테스트를 위해 -pid 명령줄 플래그를 사용하여 대상 프로세스 ID(PID)를 런타임에 제공할 수 있습니다. 운영 목적으로는 다음 코드 줄에서 0을 대상 PID로 바꿔 PID를 하드코딩하십시오:

pid := flag.Int("pid", 0, "Process ID to inject shellcode into")

이 애플리케이션은 가능한 경우 golang.org/x/sys/windows 패키지의 함수(예: windows.OpenProcess())를 활용합니다. 이 애플리케이션은 Windows 호스트에서 프로젝트 루트 디렉터리에서 다음 명령으로 컴파일할 수 있습니다:

set GOOS=windows GOARCH=amd64;go build -o CreateRemoteThread.exe .\cmd\CreateRemoteThread\main.go

CreateRemoteThreadNative

이 애플리케이션은 Kernel32.dll의 Windows CreateRemoteThread 함수를 활용하여 원격 프로세스에서 셸코드를 실행합니다. 이 애플리케이션은 주입할 대상 프로세스가 이미 실행 중이어야 합니다. 테스트를 위해 -pid 명령줄 플래그를 사용하여 대상 프로세스 ID(PID)를 런타임에 제공할 수 있습니다. 운영 목적으로는 다음 코드 줄에서 0을 대상 PID로 바꿔 PID를 하드코딩하십시오:

pid := flag.Int("pid", 0, "Process ID to inject shellcode into")

이 애플리케이션은 golang.org/x/sys/windows 패키지의 함수를 사용하지 않습니다. 가장 큰 차이점은 필요한 모든 DLL과 프로시저를 자체적으로 로드하고 프로시저의 Call() 함수를 사용한다는 점입니다. 이 애플리케이션은 Windows 호스트에서 프로젝트 루트 디렉터리에서 다음 명령으로 컴파일할 수 있습니다:

set GOOS=windows GOARCH=amd64;go build -o CreateRemoteThreadNative.exe .\cmd\CreateRemoteThreadNative\main.go

CreateThread

이 애플리케이션은 Kernel32.dll의 Windows CreateThread 함수를 활용하여 현재 애플리케이션의 프로세스 내에서 셸코드를 실행합니다. 원격 프로세스 인젝션을 피하려는 경우 유용합니다. 이 애플리케이션은 가능한 경우 golang.org/x/sys/windows 패키지의 함수(예: windows.VirtualAlloc())를 활용합니다. 이 애플리케이션은 Windows 호스트에서 프로젝트 루트 디렉터리에서 다음 명령으로 컴파일할 수 있습니다:

set GOOS=windows GOARCH=amd64;go build -o CreateThread.exe .\cmd\CreateThread\main.go

CreateThreadNative

이 애플리케이션은 Kernel32.dll의 Windows CreateThread 함수를 활용하여 현재 애플리케이션의 프로세스 내에서 셸코드를 실행합니다. 원격 프로세스 인젝션을 피하려는 경우 유용합니다. 이 애플리케이션은 golang.org/x/sys/windows 패키지의 함수를 사용하지 않습니다. 가장 큰 차이점은 필요한 모든 DLL과 프로시저를 자체적으로 로드하고 프로시저의 Call() 함수를 사용한다는 점입니다. 이 애플리케이션은 Windows 호스트에서 프로젝트 루트 디렉터리에서 다음 명령으로 컴파일할 수 있습니다:

set GOOS=windows GOARCH=amd64;go build -o CreateThreadNative.exe .\cmd\CreateThreadNative\main.go

EarlyBird

이 애플리케이션은 Windows CreateProcess 함수를 사용하여 프로세스를 일시 중단 상태로 만듭니다. 자식 프로세스가 일시 중단되면 Windows QueueUserAPC 함수를 사용하여 할당된 셸코드를 가리키는 UserAPC를 자식 프로세스에 추가합니다. 그런 다음 ResumeThread가 호출되고, 이어서 문서화되지 않은 NtTestAlert 함수가 호출되어 생성된 UserAPC를 실행하고 결과적으로 셸코드를 실행합니다. 이는 AV/EDR이 감지를 지원하기 위해 함수를 후킹(hook)하기 전에 셸코드가 실행되므로 유용합니다. 참고: New 'Early Bird' Code Injection Technique Discovered. 이 애플리케이션은 Windows 호스트에서 프로젝트 루트 디렉터리에서 다음 명령으로 컴파일할 수 있습니다:

export GOOS=windows GOARCH=amd64;go build -o goEarlyBird.exe cmd\EarlyBird\main.go

EtwpCreateEtwThread

이 애플리케이션은 ntdll.dll의 Windows EtwpCreateEtwThread 함수를 활용하여 현재 애플리케이션의 프로세스 내에서 셸코드를 실행합니다. 원본 작업은 TheWover입니다. 원격 프로세스 인젝션을 피하려는 경우 유용합니다. 이 애플리케이션은 golang.org/x/sys/windows 패키지의 함수를 사용하지 않습니다. 가장 큰 차이점은 필요한 모든 DLL과 프로시저를 자체적으로 로드하고 프로시저의 Call() 함수를 사용한다는 점입니다. 이 애플리케이션은 Windows 호스트에서 프로젝트 루트 디렉터리에서 다음 명령으로 컴파일할 수 있습니다:

set GOOS=windows GOARCH=amd64;go build -o EtwpCreateEtwThread.exe .\cmd\EtwpCreateEtwThread\main.go

NtQueueApcThreadEx (로컬)

이 애플리케이션은 문서화되지 않은 NtQueueApcThreadEx를 사용하여 현재 프로세스의 현재 스레드에 "Special User APC"를 생성하여 셸코드를 실행합니다. 셸코드가 현재 프로세스에 로드되고 실행되므로 "로컬"입니다. 동일한 기술을 원격 프로세스에도 사용할 수 있습니다. 참고: 이는 Windows 7 이상에서만 작동합니다. 참고: APC Series: User APC API.

export GOOS=windows GOARCH=amd64;go build -o goNtQueueApcThreadEx-Local.exe cmd\NtQueueApcThreadEx-Local\main.go

RtlCreateUserThread

이 애플리케이션은 ntdll.dll의 Windows RtlCreateUserThread 함수를 활용하여 원격 프로세스에서 셸코드를 실행합니다. 이 애플리케이션은 주입할 대상 프로세스가 이미 실행 중이어야 합니다. 테스트를 위해 -pid 명령줄 플래그를 사용하여 대상 프로세스 ID(PID)를 런타임에 제공할 수 있습니다. 운영 목적으로는 다음 코드 줄에서 0을 대상 PID로 바꿔 PID를 하드코딩하십시오:

pid := flag.Int("pid", 0, "Process ID to inject shellcode into")

이 애플리케이션은 golang.org/x/sys/windows 패키지의 함수를 사용하지 않습니다. 가장 큰 차이점은 필요한 모든 DLL과 프로시저를 자체적으로 로드하고 프로시저의 Call() 함수를 사용한다는 점입니다. 이 애플리케이션은 Windows 호스트에서 프로젝트 루트 디렉터리에서 다음 명령으로 컴파일할 수 있습니다:

set GOOS=windows GOARCH=amd64;go build -o RtlCreateUserThread.exe .\cmd\RtlCreateUserThread\main.go

Syscall

이 애플리케이션은 셸코드의 진입 지점에서 Syscall을 수행하여 현재 실행 중인 프로세스에서 셸코드를 실행합니다. 이 애플리케이션은 golang.org/x/sys/windows 패키지의 함수를 사용하지 않습니다. 이 애플리케이션은 Windows 호스트에서 프로젝트 루트 디렉터리에서 다음 명령으로 컴파일할 수 있습니다:

set GOOS=windows GOARCH=amd64;go build -o Syscall.exe .\cmd\Syscall\main.go

UuidFromStringA

이 애플리케이션은 Windows UuidFromStringA 함수를 사용하여 셸코드를 메모리 주소에 로드한 다음 EnumSystemLocalesA 함수를 호출하여 셸코드를 실행합니다. 이 셸코드 로드 및 실행 방법은 nccgroup의 RIFT: Analysing a Lazarus Shellcode Execution Method에서 파생되었습니다. 이 애플리케이션에서는 힙(heap)에 메모리가 할당되며 VirtualAlloc을 사용하지 않습니다. 이 애플리케이션은 Windows 호스트에서 프로젝트 루트 디렉터리에서 다음 명령으로 컴파일할 수 있습니다:

set GOOS=windows GOARCH=amd64;go build -o UuidFromString.exe .\cmd\UuidFromString\main.go

ShellcodeUtils

이 애플리케이션은 셸코드 바이너리 파일을 변환하는 데 사용됩니다. 프로그램은 입력 파일이 셸코드의 16진수 바이트를 포함하는 바이너리 파일(.bin)이라고 가정합니다. ShellcodeUtils는 입력 파일을 base64 인코딩하거나 XOR, RC4 또는 AES256-GCM으로 암호화할 수 있습니다. 이 도구는 파일을 복호화하는 데도 사용할 수 있습니다.

ShellcodeUtils 도움말 메뉴:

root@kitploit:~
  -base64
        Base64 encode the output. Can be used with or without encryption
  -i string
        Input file path of binary file
  -key string
        Encryption key
  -mode string
        Mode of operation to perform on the input file [encrypt,decrypt] (default "encrypt")
  -nonce string
        Nonce, in hex, used to decrypt an AES256 input file. Only used during decryption
  -o string
        Output file path
  -salt string
        Salt, in hex, used to generate an AES256 32-byte key through Argon2. Only used during decryption
  -type string
        The type of encryption to use [xor, aes256, rc4, null]
  -v    Enable verbose output

입력 파일을 base64 인코딩만 하고 텍스트 파일로 저장하는 예:

root@kitploit:~
PS C:\Users\bob> .\ShellcodeUtils.exe -i C:\Users\bob\calc.bin -o C:\Users\bob\calc.b64.txt -base64 -v
[-]Output directory: C:\Users\bob\
[-]Output file name: calc.b64.txt
[-]File contents (hex): 505152535657556a605a6863616c6354594883ec2865488b32488b7618488b761048ad488b30488b7e3003573c8b5c17288b741f204801fe8b541f240fb72c178d5202ad813c0757696e4575ef8b741f1c4801fe8b34ae4801f799ffd74883c4305d5f5e5b5a5958c3
[-]No encryption type provided, continuing on...
[+]Output (string):
UFFSU1ZXVWpgWmhjYWxjVFlIg+woZUiLMkiLdhhIi3YQSK1IizBIi34wA1c8i1wXKIt0HyBIAf6LVB8kD7csF41SAq2BPAdXaW5Fde+LdB8cSAH+izSuSAH3mf/XSIPEMF1fXltaWVjD
[+] encrypt input and wrote 140 bytes to: C:\Users\bob\calc.b64.txt

Sh3!1z 키로 입력 파일을 XOR 암호화하고 출력을 base64 인코딩하는 예:

root@kitploit:~
PS C:\Users\bob> .\ShellcodeUtils.exe -i C:\Users\bob\calc.bin -o C:\Users\bob\calc.xor.b64.txt -mode encrypt -type xor -key Sh3!1z -v
[-]Output directory: C:\Users\bob\
[-]Output file name: calc.xor.b64.txt
[-]File contents (hex): 505152535657556a605a6863616c6354594883ec2865488b32488b7618488b761048ad488b30488b7e3003573c8b5c17288b741f204801fe8b541f240fb72c178d5202ad813c0757696e4575ef8b741f1c4801fe8b34ae4801f799ffd74883c4305d5f5e5b5a5958c3
[-]XOR encrypting input file with key: Sh3!1z
[+]Output (hex):
03396172672d0602537b5919320450756832d0841b4479f16120b8572932d81e23699c32d8587baa4f4a503f0faa6d6d7be3473e11325296b8752e5e5cdf1f36bc2851c5b21d362d3a067654def127772f693084d85c9d69308dca97e469b2be63356c7f6a200a30f0
[+]xor encrypt input and wrote 105 bytes to: C:\Users\bob\calc.xor.b64.txt

Sh3!1z 비밀번호로 입력 파일을 AES256-GCM 암호화하고 출력을 base64 인코딩하지 않는 예:

root@kitploit:~
PS C:\Users\bob> .\ShellcodeUtils.exe -i C:\Users\bob\calc.bin -o C:\Users\bob\calc.aes.bin -mode encrypt -type aes256 -key Sh3!1z -v
[-]Output directory: C:\Users\bob\
[-]Output file name: calc.aes.bin
[-]File contents (hex): 505152535657556a605a6863616c6354594883ec2865488b32488b7618488b761048ad488b30488b7e3003573c8b5c17288b741f204801fe8b541f240fb72c178d5202ad813c0757696e4575ef8b741f1c4801fe8b34ae4801f799ffd74883c4305d5f5e5b5a5958c3
[-]AES256 encrypting input file
[+]Argon2 salt (hex): db6126d3ac640f8aaa67cda74b8cf1d2c54513db7bf4fbe3422d1b276af1367e
[+]AES256 key (32-bytes) derived from input password Sh3!1z (hex): 096a40f1aef38dd9b5d63284acc19727c4420dd98f21ea052112bef63eb7d94a
[+]AES256 nonce (hex): 13802153c4b2fb6a3e545ff4
[+]Output (hex):
44a974233e37b460dc2181b16846f265e8e3a07959abf9c8760f7d0ac8029575e67571ea5b313bc8b011739db57c690ec156a4b0bba4e4d632c35c1490aeaac24f5ae05e90934adf57798ee3c702a3c27073fe976fbcc6ee5db355da186c1add58913e41a8c5716a0fcfc27371f0cae906e50e680366496a00
[+]aes256 encrypt input and wrote 121 bytes to: C:\Users\bob\calc.aes.bin

AES256은 32바이트 키가 필요합니다. 이 프로그램은 Argon2 ID 알고리즘을 사용하여 -key 입력 매개변수로 제공된 비밀번호로부터 32바이트 키를 유도하며, 무작위로 생성된 솔트를 사용합니다. 파일을 성공적으로 복호화하려면 동일한 입력 비밀번호와 Argon2 알고리즘에 사용된 솔트, AES256 알고리즘에 사용된 논스(nonce)가 필요합니다. 또는, 복호화 함수를 업데이트하여 입력 비밀번호와 솔트 대신 32바이트 Argon2 키를 직접 사용할 수 있습니다.

참고: 생성된 Argon2 키를 사용할지, 아니면 비밀번호를 생성하는 데 사용된 비밀번호와 솔트를 사용할지는 운영자가 결정해야 합니다.

AES256 입력 파일을 복호화하는 예:

root@kitploit:~
PS C:\Users\bob> .\ShellcodeUtils.exe -i C:\Users\bob\calc.aes.bin -o C:\Users\bob\calc.aes.decrypted.bin -mode decrypt -type aes256 -key Sh3!1z -nonce 13802153c4b2fb6a3e545ff4 -salt db6126d3ac640f8aaa67cda74b8cf1d2c54513db7bf4fbe3422d1b276af1367e -v
[-]Output directory: C:\Users\bob\
[-]Output file name: calc.aes.decrypted.bin
[-]File contents (hex): 44a974233e37b460dc2181b16846f265e8e3a07959abf9c8760f7d0ac8029575e67571ea5b313bc8b011739db57c690ec156a4b0bba4e4d632c35c1490aeaac24f5ae05e90934adf57798ee3c702a3c27073fe976fbcc6ee5db355da186c1add58913e41a8c5716a0fcfc27371f0cae906e50e680366496a00
[-]AES256 decrypting input file
[-]Argon2 salt (hex): db6126d3ac640f8aaa67cda74b8cf1d2c54513db7bf4fbe3422d1b276af1367e
[-]AES256 key (hex): 096a40f1aef38dd9b5d63284acc19727c4420dd98f21ea052112bef63eb7d94a
[-]AES256 nonce (hex): 13802153c4b2fb6a3e545ff4
[+]Output (hex):
505152535657556a605a6863616c6354594883ec2865488b32488b7618488b761048ad488b30488b7e3003573c8b5c17288b741f204801fe8b541f240fb72c178d5202ad813c0757696e4575ef8b741f1c4801fe8b34ae4801f799ffd74883c4305d5f5e5b5a5958c3
[+]aes256 decrypt input and wrote 105 bytes to: C:\Users\bob\calc.aes.decrypted.bin

이 애플리케이션은 Windows 호스트에서 프로젝트 루트 디렉터리에서 다음 명령으로 컴파일할 수 있습니다:

set GOOS=windows GOARCH=amd64;go build -o ShellcodeUtils.exe .\cmd\ShellcodeUtils\main.go

도구 다운로드