Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #48, НОЯБРЬ 2004 г.

Одиссея программиста

Hi-Tech

Спецвыпуск: Хакер, номер #048, стр. 048-054-2


Итак, на калькуляторе (допустим, стандартном виндовом) у нас десятичное число 130, нажимаем кнопочку XOR, потом набираем 243, давим на «=» и получаем 113. Это не что иное, как код символа «q». Проверить это можно, открыв блокнот, и, задержав ALT, ввести на numpad’e это число. Для 22 мы получили 0. А для FD – «|».

1 – 243

2 – 38

3 – 129

4 – 196

5 – 57

6 – 134

7 - 219

8 – 146

9 – 113

10 – 163

11 – 185

12 – 230

13 – 83

14 – 122

15 – 149

16 – 124

Написать программу, которая декодирует такой алгоритм, не составит труда. Вообще, в сети есть множество более подробных описаний алгоритмов, а порой даже и готовых декодирующих модулей, написанных на различных языках программирования.

Сделай сам?

Написание подобных программ грозит проблемами с законом по статье 273 УК РФ. Мы не несем никакой ответственности за действия читателя, которые он может свершить под влиянием этой статьи. Однако в образовательных целях мы все же приведем некоторые участки кода.

Во-первых, несмотря на предельную простоту нашей программки она будет клиент-серверной. Писать мы будем в VC++ и для начала создадим два файла - сервер и клиент. Сервер, разумеется, надо ваять безо всякой визуализации ;). Состояния проектов сразу же поменяем на Release. Подключим к ним winsock32.dll и функции WIN API для работы с сокетами и непосредственной связи клиента с сервером посредством TCP-IP. Последнее легко сделать, вписав в код две следующие строчки:

WSADATA wsaData;

WSAStartup(MAKEWORD(2,2), &wsaData);

Но об этом чуть позже, а пока перед нами стоят две проблемы - прописать сервер в автозагрузку и сделать так, чтобы при запуске он автоматически переписался в свою директорию.

Для выполнения копирования достаточно узнать текущее положение, вызвав функцию GetModuleFileName(NULL, buf1, sizeof(buf1)), после чего начать процесс копирования: «CopyFile(buf1, sti.full_exe_name, FALSE)». «FALSE» означает, что, если файл существует, он не будет перезаписан. Оно и правильно: зачем сто раз переписывать себя; тем более, если файл уже запущен откуда надо, попытка стереть его может вызвать ошибку, которая насторожит пользователя.

Теперь разберемся с автозагрузкой (подробнее данный вопрос рассмотрен в соответствующей статье этого Спеца). В принципе, если троян создается для того, чтобы получить необходимые данные один раз, и дальше его использовать не планируется, эта функция не требуется: получил пароли – отправил – самоуничтожился. Для долгоиграющей зло-проги можно использовать функции записи в реестр (RUN), а можно прописать файл в win.ini или system.ini. Сегодня мы предпочтем запись в *.ini, и, чтобы файл загрузился этим способом, в секции [windows] достаточно написать run и полный путь к файлу, что можно провернуть с помощью одной простой системной команды echo. Вызываем команду «echo [windows] > C:\Windows\win.ini» и «echo run C:\Windows\system\trojan.exe». При этом делаем проверку на наличие их, иначе наш троян с каждым разом будет запускаться все больше раз, что нам совершенно не нужно.

Назад на стр. 048-054-1  Содержание  Вперед на стр. 048-054-3