Ищется уязвимость в софте, потом пишете программу для эксплуатации уязвимости - эксплоит.
Ассемблер
Ассемблер и отладчики. Важно понимать, как работает вся система в целом.
Ассемблер для шелл кода и еще любой яп для применения эксплойта.
Кроме как доставки шелл кода, вы вряд ли где-то его примените.
В целом алгоритм примерно такой:
- Ищите уязвимость
- Пишите код на асм
- Переводим асм в шеллкод, например здесь: Online x86 and x64 Intel Instruction Assembler, либо компилируешь код вручную (fasm, nasm, masm и тд) и из PE файла уже можешь вытаскивать код.
Доставляете шеллкод в дыру.
Не супер эксперт в этом, но примерно с таким вариантом можно начать.