Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #66, ИЮНЬ 2004 г.

Трепанация для почтовой мыши

Фленов Михаил

Xakep, номер #066, стр. 066-108-3


Если ты пишешь сервис с запрещенной возможностью остановки, то советую на время тестирования разрешить старт/стоп. Иначе после запуска сервиса станет невозможно перекомпилировать файл и придется удалять его из системы и перегружаться. Когда все будет готово, вот тогда и выставишь в свойстве AllowStop значение false.

Мышка, на стол!!!

Теперь переходим к вскрытию мышки. Адресная книга The Bat! хранит свои записи в файле TheBat.ABD. Я уже сказал, что этот формат закрыт, и мне не удалось найти никакого описания. Но закрыт только формат, а содержимое файла открыто, как церковный поднос для сбора пожертвований, и содержимое его никак не шифруется. Открой его в режиме просмотра, и увидишь среди кучи мусора реальные e-mail адреса.

Как отбросить мусор и вырвать только то, что надо? Все очень просто. Мы должны просканировать весь файл на наличие e-mail адресов, невзирая на формат. Мои исследования показали, что сразу после адреса стоят символы перевода каретки #13 и #10. Их наличие легко объяснить. Посмотри на пятый скрин. Здесь показано окно создания новой записи в адресной книге. Тут же видно, что адреса записываются в поле «E-Mail Address(es)», которое явно относится к Memo. Вот отсюда и берется перевод каретки. Неоднократный анализ файла подтвердил мою теорию.

Теперь алгоритм сканирования упрощается до «дальше некуда». Ищем все разумные слова, и как только встречается символ перевода каретки, необходимо проверить, есть ли в найденном слове знак @. Если да, то это мыльник, и можно сохранить его для… ну, скажем так, для всякого ;).

Что это было?

В листинге 1 показан код, который ты должен написать в обработчике события OnInstall своего сервиса. В обработчике события OnStart нужно просто вызвать эту же процедуру, чтобы не писать код еще раз.

Объясняю, что произошло. Я загрузил файл адресной книги в файловый поток типа TFileStream. В качестве пути указывается явное расположение, а в реальной проге ты должен просканировать еще и все диски на предмет поиска файла, потому что на компе жертвы книга может находиться где угодно. Сэкономим место в журнале для более интересных вещей, я надеюсь, что ты сделаешь это сам.

Сразу же создаю переменную типа TStringList, где будут сохраняться найденные мыльники. Я люблю этот тип, потому что с ним легко работать и удобно сохранить весь список в текстовый файл.

Теперь запускается цикл, в котором последовательно читается содержимое файла адресной книги по 1000 байт. Чтобы было проще, округлим число до 1024 байт :). У меня этот файл большой, поэтому и читать буду большими блоками, чтобы ускорить эту операцию.

Внутри цикла чтения находится еще один цикл, в котором сканируется считанный блок. Если очередной символ является буквой или допустимым для e-mail адреса символом, то добавляем этот символ к временной текстовой переменной Addr. Если это другой символ, то нужно проверить, а вдруг это перевод каретки, и в нашей временной переменной уже сформировался полноценный адрес чьего-то мыльника. Если так, то сохраняем содержимое Addr в массиве строк и продолжаем поиск.

Назад на стр. 066-108-2  Содержание  Вперед на стр. 066-108-4