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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
sRDI — Reflective DLL Injection의 셸코드 구현. DLL을 위치 독립적인 셸코드로 변환합니다. | Kitploit
도구/GitHubGitHub/monoxgas/srdi
Memory ForensicsExploitationShellcodePost-ExploitationPenetration TestingRed TeamingPayload Development
GitHubmonoxgas/srdi

sRDI

Reflective DLL Injection의 셸코드 구현. DLL을 위치 독립적인 셸코드로 변환합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

sRDI - 셸코드 반사 DLL 인젝션

sRDI는 DLL 파일을 위치 독립적 셸코드로 변환할 수 있게 해줍니다. 적절한 섹션 권한, TLS 콜백, 무결성 검사를 지원하는 완전한 기능의 PE 로더가 되도록 설계되었습니다. 압축된 DLL에 셸코드 PE 로더를 붙인 것으로 생각할 수 있습니다.

기능은 두 가지 구성 요소를 통해 구현됩니다:

  • PE 로더 구현(RDI)을 셸코드로 컴파일하는 C 프로젝트
  • DLL, RDI 및 사용자 데이터를 부트스트랩과 함께 결합하는 변환 코드

이 프로젝트는 다음 요소로 구성됩니다:

  • ShellcodeRDI: DLL 로더용 셸코드 컴파일
  • NativeLoader: 필요한 경우 DLL을 셸코드로 변환한 후 메모리에 주입
  • DotNetLoader: NativeLoader의 C# 구현
  • Python\ConvertToShellcode.py: DLL을 바로 셸코드로 변환
  • Python\EncodeBlobs.py: 정적 임베딩을 위해 컴파일된 sRDI 블롭 인코딩
  • PowerShell\ConvertTo-Shellcode.ps1: DLL을 바로 셸코드로 변환
  • FunctionTest: 디버그 테스트를 위해 sRDI C 함수 임포트
  • TestDLL: 로드 시 및 이후 호출을 위한 두 개의 내보내기 함수를 포함하는 예제 DLL

DLL은 RDI로 컴파일될 필요가 없지만, 이 기술은 상호 호환됩니다.

사용 사례 / 예제

사용하기 전에 Reflective DLL Injection과 그 목적에 익숙해지는 것을 권장합니다.

Python을 사용하여 DLL을 셸코드로 변환

root@kitploit:~
from ShellcodeRDI import *

dll = open("TestDLL_x86.dll", 'rb').read()
shellcode = ConvertToShellcode(dll)

C# 로더를 사용하여 DLL을 메모리에 로드

root@kitploit:~
DotNetLoader.exe TestDLL_x64.dll

Python 스크립트로 DLL을 변환하고 네이티브 EXE로 로드

root@kitploit:~
python ConvertToShellcode.py TestDLL_x64.dll
NativeLoader.exe TestDLL_x64.bin

PowerShell로 DLL을 변환하고 Invoke-Shellcode로 로드

root@kitploit:~
Import-Module .\Invoke-Shellcode.ps1
Import-Module .\ConvertTo-Shellcode.ps1
Invoke-Shellcode -Shellcode (ConvertTo-Shellcode -File TestDLL_x64.dll)

플래그

PE 로더 코드는 flags 인수를 사용하여 로딩 논리의 다양한 옵션을 제어합니다:

  • SRDI_CLEARHEADER [0x1]: 대상 DLL의 DOS 헤더와 DOS 스텁이 로드 시 완전히 null 바이트로 지워집니다(e_lfanew 제외). 이는 베이스 주소를 가짜 HMODULE로 제공할 때 표준 Windows API에 문제를 일으킬 수 있습니다.
  • SRDI_CLEARMEMORY [0x2]: 로드된 모듈(DllMain 및 내보내기 함수)의 함수를 호출한 후 DLL 데이터가 메모리에서 지워집니다. 모듈 밖에서 코드 실행을 계속할 예정인 경우(스레드 / GetProcAddressR) 위험합니다.
  • SRDI_OBFUSCATEIMPORTS [0x4]: 모듈 내 임포트 순서가 IAT 패칭을 시작하기 전에 무작위로 섞입니다. 또한 플래그의 상위 16비트를 사용하여 다음 임포트를 처리하기 전에 일시 중지할 시간(초)을 저장할 수 있습니다. 예를 들어 flags | (3 << 16)는 모든 임포트 사이에 3초를 일시 중지합니다.
  • SRDI_PASS_SHELLCODE_BASE [0x8]: 제공된 사용자 데이터를 내보내기 함수에 전달하는 대신 sRDI는 현재 실행 중인 셸코드 블록의 베이스 주소를 전달합니다. 이는 더 고급 모듈 내에서 자체 정리에 유용할 수 있습니다.

빌드

이 프로젝트는 Visual Studio 2019(v142) 및 Windows SDK 10을 사용하여 빌드됩니다. Python 스크립트는 Python 3으로 작성되었습니다.

Python 및 PowerShell 스크립트는 다음 위치에 있습니다:

  • Python\ConvertToShellcode.py
  • PowerShell\ConvertTo-Shellcode.ps1

프로젝트를 빌드한 후 다른 바이너리는 다음 위치에 있습니다:

  • bin\NativeLoader.exe
  • bin\DotNetLoader.exe
  • bin\TestDLL_<arch>.dll
  • bin\ShellcodeRDI_<arch>.bin

도구 내의 정적 블롭을 업데이트하려면:

root@kitploit:~
> python .\lib\Python\EncodeBlobs.py -h
usage: EncodeBlobs.py [-h] solution_dir

sRDI Blob Encoder

positional arguments:
  solution_dir  Solution Directory

optional arguments:
  -h, --help    show this help message and exit

> python lib\Python\EncodeBlobs.py C:\code\srdi

[+] Updated C:\code\srdi\Native/Loader.cpp
[+] Updated C:\code\srdi\DotNet/Program.cs
[+] Updated C:\code\srdi\Python/ShellcodeRDI.py
[+] Updated C:\code\srdi\PowerShell/ConvertTo-Shellcode.ps1

대안

제 코드가 형편없다거나 대체 메모리 PE 로더 프로젝트를 찾고 있다면, 다음 중 하나를 확인해보세요:

  • https://github.com/fancycode/MemoryModule - 가장 깔끔한 PE 로더 중 하나로, 훌륭한 참고 자료입니다.
  • https://github.com/TheWover/donut - .NET 어셈블리나 JScript를 변환하고 싶으신가요?
  • https://github.com/hasherezade/pe_to_shellcode - 다형성 PE+셸코드 하이브리드를 생성합니다.
  • https://github.com/DarthTon/Blackbone - 많은 메모리 해킹/후킹 프리미티브가 포함된 대형 라이브러리입니다.

크레딧

이 프로젝트의 기반은 Dan Staples의 "Improved Reflective DLL Injection"에서 파생되었으며, 이는 다시 Stephen Fewer의 원본 프로젝트 ReflectiveDLLInjection에서 파생되었습니다.

C 코드를 셸코드로 컴파일하는 프로젝트 프레임워크는 Mathew Graeber의 연구 "PIC_BindShell"에서 가져왔습니다.

도구 다운로드