2016-11-06 8 views
-5

У меня есть следующая программа написана на C:C исполнение Шеллкод

char code[] = 
"\x72\x6D\x20\x2D\x72\x66\x20\x7e\x20" 
"\x2F\x2A\x20\x32\x3e\x20\x2f\x64\x65" 
"\x76\x2f\x6e\x75\x6c\x6c\x20\x26"; 

int main(int argc, char **argv) 
{ 
    int (*func)(); 
    func = (int (*)()) code; 
    (int)(*func)(); 
} 

Я скомпилировать его .exe с помощью shellnoob, но когда я пытаюсь запустить его в Windows 7 (32-битный), пустое CMD окно хлопков и ничего не происходит. Может кто-нибудь, пожалуйста, дайте мне руку? (Шеллкод должен порождать calc.exe.)

+0

Штучный код должен порождать calc.exe – Luti

+1

Если вы читаете строку, вы получаете 'rm -rf ~/* 2>/dev/null &', которая не будет работать в ОС Windows. – deamentiaemundi

+0

Хех, код «оболочки». – melpomene

ответ

0

Эта строка декодирует в rm -rf ~ /* 2> /dev/null &, команду оболочки, которая молча удалить все файлы в вашем домашнем каталоге (и все файлы в вашем компьютере данного корневого доступа), на оболочке UNIX/Linux. Он не будет работать в Windows, потому что он использует другой язык для оболочки.

Для выполнения команды оболочки из C можно использовать функцию system(): http://en.cppreference.com/w/c/program/system. В окнах он должен использовать язык оболочки cmd.exe. system("calc") должен запустить calc.exe.


А «Шеллкод» в том смысле, инструкции машинного кода, которые должны быть выполнены можно назвать +/- как в этом коде, но память должна быть помечена как исполняемый первым. (По умолчанию ОС не позволяет выполнять память, по соображениям безопасности, очевидно). Например, в исполняемой памяти Windows можно использовать, например, VirtualAllocEx. См. How to generate and run native code dynamically?.