|
С/C++
Xakep, номер #048, стр. 048-087-1 Пишем своего трояна GorluM (gorlum@xakep.ru) "В чем секрет настоящего трояна на C++?" – спросишь ты. Отнюдь не в функциональности, как могли бы подумать многие, а в его размере! Почему троян лучше писать на С++, а, скажем, не на Delphi или Visual Basic? Да потому, что, сколько бы не было споров между си и дельфи кодерами, все равно на дельфях троян размером в 2кб не напишешь. А как написать на сях, я сейчас покажу. По сути, троян - это очень простая клиент-серверная программа. Сервер, запущенный на машине жертвы, копирует себя в директорию %SYSTEM%, добавляет запись в реестр, чтобы троян выполнялся при старте форточек. Потом троян открывает любой порт и ждет, пока хакер приконнектится к нему клиентом. Клиент посылает какой-то пакет, при приеме которого сервер выполняет определенную функцию. У нас этих функций в трояне будет три: вывод сообщения, запуск программы и, например, download файла с машины жертвы. Любые дополнительные функции ты сможешь без особого труда добавить сам после прочтения статьи. Собственно, наш прога - это самый примитивный троян, который ты сможешь апгрейдить до тех пор, пока он не станет кардинально отличаться от описанного ниже. Но размер все равно останется очень небольшим. 2КБ. Всего 2кб будет весить сервер нашего трояна. Этого мы добьемся за счет того, что писать его будем на чистом апи, не используя никаких встроенных в C++ библиотек (mfc, vcl, etc), а компилятору скажем, чтобы он стер все лишнее из PE-заголовка файла. Обычно это выполняют всякие утилиты типа PECompact, но не так качественно, как сам си. Проект - троян Для проги нам понадобится Visual C++ версии выше пятой, а лучше С++, входящий в комплект Visual Studio .NET, которую без проблем можно купить у любого пирата. Создаем blank workspace или solution (в VS .NET) и добавляем в него два новых пустых(!) проекта Win32 Application, сервер и клиент. Тотчас же меняем активную конфигурацию обоих проектов на Release. Для этого выбери соответствующий пункт в меню Build. Создал? Отлично, теперь залезем в настройку проектов (кликни правой кнопкой мышки на имени проекта и выбери Setting), в Linker и добавим там к строке Object/library modules библиотеку винсока wsock32.lib. Без нее наша программа не будет работать. Заметь, эти действия нужно провести с обоими проектами - и с сервером, и с клиентом, так как они оба будут использовать сетевые функции и соответственно нуждаться в сетевой библиотеке. Теперь добавляй в проект-сервер новый cpp файл, и начнем. Начинаем кодить В самом начале программы мы должны включить заголовочные файлы (хидеры), в которых описаны функции используемые нами. Без хидеров программа выдаст тебе тучу ошибок и никогда не заработает. В данном случае у нас только один хидер - описывающий сетевые функции, из библиотеки, которую мы добавили чуть раньше. #include С помощью следующих, крайне важных для размера программы строк, мы вырежем все лишнее из PE-заголовка нашего exeшника, а также сообщим компилятору, что у нас уже есть EntryPoint, точка входа. Если этого не сделать, то компилятор вместо того, чтобы вписать нашу функцию в точку входа, напишет свою, огромную, и размер программы вырастет из 2 до 28 кило. Заметная разница? =) Но если ты теперь попытаешься запустить прогу в режиме отладки, она, скорее всего, не заработает. |