Почему программа The ВАТ (в народе "почтовая мышка") считается самой безопасной? Просто она не поддерживает VB-скрипты, и формат адресной книги засекречен. Если в Microsoft Outlook любой вирус может получить доступ к адресам e-mail и разослать себя вашим друзьям, то в The ВАТ это нереально. Это нереально, но только не для хакера....

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

Как отбросить ненужное и воспользоваться только тем, что действительно необходимо? Все очень просто. Мы должны изучить весь файл на наличие e-mail адресов, невзирая на формат. Мои исследования показали, что сразу после адреса стоят символы перевода каретки #13 и #10. Их наличие легко объяснить. На рис. 3.6 показано диалоговое окно создания новой записи в адресной книге.

На нем видно, что адреса записываются в поле E-Mail address(es), которое явно относится к классу Memo. Вот отсюда и берется перевод каретки - это завершение строки в компоненте и заодно разделитель адресов. Неоднократный анализ файла подтвердил мою теорию. , Теперь алгоритм сканирования упрощается "дальше некуда". Ищем все разумные слова и, как только встречается символ перевода каретки, проверяем, есть ли в найденном слове знак @. Если да, то это адрес e-mail и его нужно сохранить для будущего использования, а если нет, то продолжаем поиск.

3.6. Вскрываем The ВАТ

Рис. 3.6. Запись в адресной книге

Для поиска адресов e-mail будем использовать сервис, чтобы закрепить на практике то, о чем мы говорили в разделе 3.5 данной главы. Код, который вы должны написать в обработчике события Onlnstal 1 своего сервиса, приведен в листинге 3.7. В обработчике события OnStart нужно вызвать эту же процедуру, чтобы не писать код еще раз.

Листинг 3.7. Код сканирования адресной книги The ВАТ на наличие адресов e-mail

procedure TServicel.ServiceAfterlnstalKSender: TService):

var AddrBook: TFileStream: OutStream: TStringList: FileArray: array [0 1024] of char: Addr: String: i. index: Integer: begin // Открываем файл

AddrBook := TFileStream.Create('E:\The Bat!\MAIL\TheBat.ABD1.
fmOpenRead):

// Создается файл для хранения найденных адресов OutStream := TStringList.Create:

Addr := ".
index := AddrBook.Read(FileArray. 1024):
// Цикл чтения из файла while index > 0 do begin продолжение &

Листинг 3.7 (продолжение) II Цикл сканирования прочитанного буфера

for і := 0 to index do begin // Это доступный символ? if ((FileArray[i]>'A') and

(FileArray[i]<'z')) or (FileArray[i]='.') or (Fi leArray[i ]='(?') then Addr := Addr+FileArray[i] el se begin // Если в переменной Addr адрес e-mail то можно сохранять if (FileArray[i]=#13) and (Length(Addr)>0) and (posCI?1. Addr)>2) then OutStream Add(Addr): Addr := ":

end:
end:
index := AddrBook.Read(FileArray, 1024):
end:

// Сохраняем все в файл

OutStream.SaveToFileC'c:\email txf):

// Очищаем память объектов

OutStream.Free:
AddrBook.Free:
end:

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

Создадим переменную типа TStri ngLi st, где будут сохраняться найденные адреса e-mail. Мне нравится использовать этот тип, потому что с ним легко работать как с набором строк и удобно сохранять весь список в текстовый файл.

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

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

Когда достигнут конец файла адресной книги, просто сохраняем результирующий набор строк из адресов e-mail в текстовый файл Email.txt в корне на диске С.

Как видите, все очень просто и никому не потребовалось выяснять засекреченные форматы. Теперь вы можете использовать найденную информацию The ВАТ в своих корыстных целях, только не нарушайте закон

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

Лично я считаю, что в наше "спамерское" время адреса e-mail друзей являются секретной информацией, и будет обидно, если именно от меня к друзьям придет письмо с вирусом или спамом из-за нежелания программистов The ВАТ зашифровать адресную книгу и полной незащищенности адресной книги Microsoft Outlook.

ПРИМЕЧАНИЕ -

Исходный код рассмотренного здесь примера находится на компакт-диске в каталоге Sources\ch03\ServiceThebat.

3.5.3. Запуск и остановка сервиса || Оглавление || 3.7. Ошибка службы сообщений


Delphi в шутку и всерьез: что умеют хакеры



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31