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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
shellnoob — 셸코드 작성 툴킷 | Kitploit
도구/GitHubGitHub/reyammer/shellnoob
ExploitationReverse EngineeringScripting & AutomationShellcodeDebuggersBinary AnalysisLearning & EducationShellcode GenerationPayload Development
GitHubreyammer/shellnoob

shellnoob

셸코드 작성 툴킷

6941211년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

ShellNoob

shellcode 작성은 항상 매우 재미있지만, 어떤 부분들은 몹시 지루하고 오류가 발생하기 쉽습니다. 재미있는 부분에만 집중하고, ShellNoob을 사용하세요!

빠른 개요를 원하시면 Black Hat Arsenal 발표 슬라이드를 확인하세요: link

기여하고 싶으신가요? 기능 요청? 버그 리포트? 욕설? 모든 피드백을 환영합니다!! (하지만 어떤 피드백은 다른 것보다 더 환영받습니다 :-)).

질문이 있으면 트위터 @reyammer로 연락하거나 yanick[AT]cs.ucsb.edu로 이메일을 보내주세요!

기여자 및 감사의 말

  • Levente Polyak (@anthraxx42)
    • Python 3 지원 추가
    • 버그 수정
  • @ToolsWatch 및 Black Hat 팀
    • 제 도구를 선보일 기회를 주셨습니다 :D

소식

  • 2014년 1월 21일 - ShellNoob 2.1이 출시되었습니다! Python 3 완전 지원과 수많은 버그 수정이 포함되어 있습니다. 모든 공로는 Levente Polyak에게 있습니다!

  • 2013년 7월 29일 - ShellNoob 2.0이 출시되었습니다!

  • 2013년 6월 8일 - ShellNoob이 Black Hat Arsenal에 선정되었습니다! 공지 보기: link.

기능

  • shellcode를 다양한 형식과 소스 간에 변환합니다. 현재 지원되는 형식: asm, bin, hex, obj, exe, C, python, ruby, pretty, safeasm, completec, shellstorm. (자세한 내용은 "형식 설명" 섹션을 참조하세요.)
  • 대화형 asm-to-opcode 변환(및 그 반대) 모드. shellcode에서 특정 바이트를 사용할 수 없고 특정 어셈블리 명령어가 문제를 일으킬지 확인하고 싶을 때 유용합니다.
  • ATT 및 Intel 문법 모두 지원. --intel 스위치를 확인하세요.
  • 32비트 및 64비트 지원(x86_64 머신에서 사용 시). --64 스위치를 확인하세요.
  • syscall 번호, 상수 및 오류 번호 확인(이제 실제로 구현되었습니다! :-)).
  • 휴대성과 배포 용이성(gcc/as/objdump 및 python만 필요). 단일 자체 포함 python 스크립트이며 Python2.7+ 및 Python3+를 모두 지원합니다.
  • 현장 개발: 대상 아키텍처에서 ShellNoob을 직접 실행하세요!
  • Linux/x86, Linux/x86_64, Linux/ARM, FreeBSD/x86, FreeBSD/x86_64 기본 지원.
  • "prepend breakpoint" 옵션. -c 스위치를 확인하세요.
  • stdin 읽기 / stdout 쓰기 지원(파일 이름으로 "-" 사용)
  • 초저가 디버깅: --to-strace 및 --to-gdb 옵션을 확인하세요!
  • 스크립트에서 ShellNoob을 Python 모듈로 사용하세요! "ShellNoob as a library" 섹션을 확인하세요.
  • 자세한 모드에서는 변환의 저수준 단계를 보여줍니다: 디버깅 / 이해 / 학습에 유용!
  • 추가 플러그인: --file-patch, --vm-patch, --fork-nopper 옵션으로 바이너리 패치를 쉽게! (자세한 내용은 아래 참조)

사용 사례

내장 도움말

root@kitploit:~
$ ./shellnoob.py -h
shellnoob.py [--from-INPUT] (input_file_path | - ) [--to-OUTPUT] [output_file_path | - ]
shellnoob.py -c (prepend a breakpoint (Warning: only few platforms/OS are supported!)
shellnoob.py --64 (64 bits mode, default: 32 bits)
shellnoob.py --intel (intel syntax mode, default: att)
shellnoob.py -q (quite mode)
shellnoob.py -v (or -vv, -vvv)
shellnoob.py --to-strace (compiles it & run strace)
shellnoob.py --to-gdb (compiles it & run gdb & set breakpoint on entrypoint)

Standalone "plugins"
shellnoob.py -i [--to-asm | --to-opcode ] (for interactive mode)
shellnoob.py --get-const <const>
shellnoob.py --get-sysnum <sysnum>
shellnoob.py --get-errno <errno>
shellnoob.py --file-patch <exe_fp> <file_offset> <data> (in hex). (Warning: tested only on x86/x86_64)
shellnoob.py --vm-patch <exe_fp> <vm_address> <data> (in hex). (Warning: tested only on x86/x86_64)
shellnoob.py --fork-nopper <exe_fp> (this nops out the calls to fork(). Warning: tested only on x86/x86_64)

"Installation"
shellnoob.py --install [--force] (this just copies the script in a convinient position)
shellnoob.py --uninstall [--force]

Supported INPUT format: asm, obj, bin, hex, c, shellstorm
Supported OUTPUT format: asm, obj, exe, bin, hex, c, completec, python, bash, ruby, pretty, safeasm
All combinations from INPUT to OUTPUT are supported!

설치 (원하는 경우에만)

root@kitploit:~
$ ./shellnoob.py --install

이 명령은 스크립트를 /usr/local/bin/snoob로 복사할 뿐입니다. 그게 전부입니다. (./shellnoob.py --uninstall로 되돌릴 수 있습니다).

매우 유연한 CLI로 shellcode를 다양한 형식 간에 변환

root@kitploit:~
$ snoob --from-asm shell.asm --to-bin shell.bin

몇 가지 동등한 대안들 (도구가 파일 확장자를 보고 원하는 것을 추측하려고 시도합니다..)

root@kitploit:~
$ snoob --from-asm shell.asm --to-bin
$ snoob shell.asm --to-bin
$ snoob shell.asm --to-bin - > shell.bin
$ cat shell.asm | snoob --from-asm - --to-bin - > shell.bin

형식 설명

  • "asm" - 표준 어셈블리. 기본값은 ATT 문법이며, Intel 문법을 사용하려면 --intel을 사용하세요. (자세한 내용은 "asm as output" 섹션 참조)
  • "bin" - 원시 바이너리 ('\x41\x42\x43\x44')
  • "hex" - 16진수로 인코딩된 원시 바이너리 ('41424344')
  • "obj" - ELF 오브젝트 파일
  • "exe" - 실행 가능한 ELF
  • "c" - C 프로그램에 바로 포함할 수 있는 형태.
  • "python", "bash", "ruby" - 동일합니다.
  • "completec" - 메모리를 RWX로 올바르게 설정하여 컴파일 가능한 C (자기 수정 shellcode 지원용)
  • "safeasm" - 100% 어셈블 가능한 어셈블리: 때때로 "asm"이 가져오는 objdump 출력은 어셈블이 불가능합니다. 이 옵션은 "as"로 어셈블할 수 있도록 "raw" 바이트(.byte 표기)를 출력합니다.
  • "shellstorm" - --from-shellstorm 스위치는 <shellcode_id>를 인자로 받습니다. ShellNoob은 shell-storm shellcode DB에서 선택한 shellcode를 가져와 선택한 형식으로 변환합니다.

쉬운 디버깅

root@kitploit:~
$ snoob -c shell.asm --to-exe shell
$ gdb -q shell
$ run
Reading symbols from ./shell...(no debugging symbols found)...done.
(gdb) run
Starting program: ./shell

Program received signal SIGTRAP, Trace/breakpoint trap.
0x08048055 in ?? ()
(gdb) 

또는 새로운 --to-strace 및 --to-gdb 스위치를 사용할 수 있습니다!

root@kitploit:~
$ snoob open-read-write.asm --to-strace
Converting open-read-write.asm (asm) into /tmp/tmpBaQbzP (exe)
execve("/tmp/tmpBaQbzP", ["/tmp/tmpBaQbzP"], [/* 97 vars */]) = 0
[ Process PID=12237 runs in 32 bit mode. ]
open("/tmp/secret", O_RDONLY)           = 3
read(3, "thesecretisthedolphin\n", 255) = 22
write(1, "thesecretisthedolphin\n", 22thesecretisthedolphin
) = 22
_exit(0)  
root@kitploit:~
$ snoob open-read-write.asm --to-gdb
Converting open-read-write.asm (asm) into /tmp/tmpZdImWw (exe)
Reading symbols from /tmp/tmpZdImWw...(no debugging symbols found)...done.
(gdb) Breakpoint 1 at 0x8048054
(gdb)

ShellNoob이 엔트리 포인트에 자동으로 브레이크포인트를 설정하는 것을 확인하세요!

syscall 번호, 상수 및 errno 가져오기

root@kitploit:~
$ snoob --get-sysnum read
i386 ~> 3
x86_64 ~> 0
$ snoob --get-sysnum fork
i386 ~> 2
x86_64 ~> 57
root@kitploit:~
$ snoob --get-const O_RDONLY
O_RDONLY ~> 0
$ snoob --get-const O_CREAT
O_CREAT ~> 64
$ snoob --get-const EINVAL
EINVAL ~> 22
root@kitploit:~
$ snoob --get-errno EINVAL
EINVAL ~> Invalid argument
$ snoob --get-errno 22
22 ~> Invalid argument
$ snoob --get-errno EACCES
EACCES ~> Permission denied
$ snoob --get-errno 13
13 ~> Permission denied

대화형 모드

root@kitploit:~
$ ./shellnoob.py -i --to-opcode
asm_to_opcode selected
>> mov %eax, %ebx
mov %eax, %ebx ~> 89c3
>> 
root@kitploit:~
./shellnoob.py -i --to-asm
opcode_to_asm selected
>> 89c3
89c3 ~> mov %eax,%ebx
>>

ShellNoob을 라이브러리로 사용

root@kitploit:~
$ python
>>> from shellnoob import ShellNoob
>>> sn = ShellNoob(flag_intel=True)

>>> sn.asm_to_hex('nop; mov ebx,eax; xor edx,edx')
'9089c331d2'
>>> sn.hex_to_inss('9089c331d2')
['nop', 'mov ebx,eax', 'xor edx,edx']

>>> sn.do_resolve_syscall('fork')
i386 ~> 2
x86_64 ~> 57

출력 형식으로서의 asm

"asm"이 출력 형식일 때 ShellNoob은 최선을 다합니다. Objdump가 디스어셈블러로 사용되지만 그 출력이 완벽하지는 않습니다. ShellNoob은 .byte 표기로 바이트를 추가하여 디스어셈블리를 보강하려고 시도하며, 적절한 경우 .ascii 표기로 해당하는 ASCII도 표시합니다. 이는 objdump의 출력을 수정/어셈블하려고 할 때 빠른 수정이 필요할 때 유용합니다.

.byte 표기 예제:

root@kitploit:~
jmp 0x37              # .byte 0xeb,0x35      
pop %ebx              # .byte 0x5b          
mov %ebx,%eax         # .byte 0x89,0xd8      
add $0xb,%eax         # .byte 0x83,0xc0,0x0b 
xor %ecx,%ecx         # .byte 0x31,0xc9      

.ascii 표기 예제:

root@kitploit:~
das                   # .ascii "/"
je 0xac               # .ascii "tm"
jo 0x70               # .ascii "p/"
jae 0xa8              # .ascii "se"
arpl %si,0x65(%edx)   # .ascii "cre"
je 0xa0               # .ascii "tX

라이선스

ShellNoob은 MIT 라이선스로 배포됩니다. COPYRIGHT 파일을 확인하세요.

도구 다운로드