Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
shellnoob — A shellcode writing toolkit | Kitploit
Инструменты/GitHubGitHub/reyammer/shellnoob
ExploitationReverse EngineeringScripting & AutomationShellcodeDebuggersBinary AnalysisLearning & EducationShellcode GenerationPayload Development
GitHubreyammer/shellnoob

shellnoob

A shellcode writing toolkit

6941211 год назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

ShellNoob

Написание шеллкодов всегда было супер веселым, но некоторые части чрезвычайно скучны и чреваты ошибками. Сосредоточьтесь только на веселой части и используйте ShellNoob!

Для быстрого ознакомления посмотрите слайды доклада на Black Hat Arsenal: ссылка

Есть желание внести вклад? Предложить функцию? Сообщить об ошибке? Обругать? Любая обратная связь приветствуется!! (Но некоторые виды обратной связи приветствуются больше, чем другие :-)).

Не стесняйтесь пинговать меня в твиттере @reyammer или писать на email yanick[AT]cs.ucsb.edu с любыми вопросами!

Участники и благодарности

  • Levente Polyak (@anthraxx42)
    • добавлена поддержка Python 3
    • исправление ошибок
  • @ToolsWatch и команда Black Hat
    • Они дали мне возможность показать мой инструмент :D

Новости

  • 01/21/2014 - Вышел ShellNoob 2.1! Включает полную поддержку Python 3 и множество исправлений ошибок. Вся заслуга принадлежит Levente Polyak!

  • 07/29/2013 - Вышел ShellNoob 2.0!

  • 06/08/2013 - ShellNoob был принят на Black Hat Arsenal! Объявление здесь: ссылка.

Возможности

  • преобразование шеллкода между различными форматами и источниками. Поддерживаемые форматы: asm, bin, hex, obj, exe, C, python, ruby, pretty, safeasm, completec, shellstorm. (Все подробности в разделе "Описание форматов".)
  • интерактивный режим преобразования asm в опкод (и наоборот). Это полезно, когда вы не можете использовать определенные байты в шеллкоде и хотите понять, вызовет ли конкретная инструкция ассемблера проблемы.
  • поддержка как синтаксиса ATT, так и Intel. Используйте ключ --intel.
  • поддержка 32 и 64 бит (при работе на машине x86_64). Используйте ключ --64.
  • разрешение номеров системных вызовов, констант и кодов ошибок (теперь реализовано по-настоящему! :-)).
  • портативность и простота развертывания (зависит только от gcc/as/objdump и python). Это всего лишь один самостоятельный скрипт Python, поддерживающий как Python2.7+, так и Python3+.
  • разработка на месте: запускайте ShellNoob непосредственно на целевой архитектуре!
  • встроенная поддержка Linux/x86, Linux/x86_64, Linux/ARM, FreeBSD/x86, FreeBSD/x86_64.
  • опция "добавить точку останова". Используйте ключ -c.
  • поддержка чтения из stdin / записи в stdout (используйте "-" в качестве имени файла)
  • супердешевая отладка: опции --to-strace и --to-gdb!
  • используйте ShellNoob как модуль Python в ваших скриптах! Смотрите раздел "ShellNoob как библиотека".
  • подробный режим показывает низкоуровневые шаги преобразования: полезно для отладки / понимания / обучения!
  • дополнительные плагины: бинарное патчинг стало проще с опциями --file-patch, --vm-patch, ! (все подробности ниже)

Примеры использования

Встроенная справка

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.

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 как выходной формат" для подробностей)
  • "bin" - сырой бинарник ('\x41\x42\x43\x44')
  • "hex" - сырой бинарник, закодированный в hex ('41424344')
  • "obj" - ELF-объект
  • "exe" - исполняемый ELF
  • "c" - готовый к встраиванию в программу на C.
  • "python", "bash", "ruby" - то же самое.
  • "completec" - компилируемый C, который правильно устанавливает память как RWX (для поддержки самомодифицирующихся шеллкодов)
  • "safeasm" - ассемблер, который на 100% ассемблируется: иногда вывод objdump, из которого берется "asm", не ассемблируется. Это выводит "сырые" байты (в нотации .byte), чтобы их можно было ассемблировать с помощью "as".
  • "shellstorm" - Ключ --from-shellstorm принимает в качестве аргумента <shellcode_id>. ShellNoob загрузит выбранный шеллкод из базы шеллкодов shell-storm и преобразует его в выбранный формат.

Простая отладка

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 автоматически устанавливает точку останова на точке входа!

Получение номеров системных вызовов, констант и 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.

Скачать инструмент
--fork-nopper