ЖУРНАЛ ХАКЕР

Delphi. Создание и использование DLL

Xakep, номер #034, стр. 034-071-1


Horrific (smirnandr@mail.ru) www.x-c-r.com

Благодаря твоим просьбам и запросам из HackFaq мне приходится отходить от плана, согласованного с главредом. С одной стороны, ты толкаешь меня под окровавленный кровью авторов Х нож главреда. С другой стороны, ты мне усложняешь жизнь по самые "не хочу". В любом случае, ничего хорошего. Если так пойдет и дальше, то на ноже SINtez-а появится моя свежая кровь. И следующий репортаж о кодинге мне придется вести уже из морга. Но что поделаешь. Сегодня мне приходится корректировать свой план и выполнять твои просьбы. В этом номере обе статьи кодинга построены по самым многочисленным просьбам.

Эта статья отвечает на наиболее часто задаваемый вопрос из HackFaq: "Как увидеть пароль, спрятанный под звездочками?". Для этого есть куча разных прог. Но мы же с тобой совместимые челы, поэтому не юзаем чужие творения. Вот поэтому мы создадим такую прогу сами. Тем более, что сам просил объяснить, как это работает.

Шкодинг

Для этого примера я написал DLL файл, который будет сейчас расписан перед твоими глазами. Ничего особо визуального мы сегодня делать не будем. Только кодинг и ничего больше. Кстати, я уже перешел на Delphi 6, так что все исходники теперь будут писаться в нем. Если ты до сих пор застрял в Delphi 5, то бегом на рынок за свеженьким диском.

Для начала создадим новый проект. Но не тот, который использовали до этого, а проект DLL библиотеки. Для этого выбирай меню File->New->Other ... (для Delphi 5 это просто File->New). Перед тобой откроется окно, как на рисунке 1. Найди здесь пункт DLL Wizard и дважды кликни по нему. Delphi создаст пустой проект DLL библиотеки. Сразу нажми пимпу "Save", чтобы сохранить проект. В качестве имени введи "hackpass", это же и будет именем dll файла.

Теперь сотри весь текст, который написал Delphi, и напиши то, что находится у меня во врезке "исходный текст dll файла".

Теория

Самое основное в нашей DLL - это процедура RunStopHook. Ей передается один только параметр. Если он равен true, то я регистрирую ловушку, которая будет ловить все сообщения Windows на себя. Для этого используется функция SetWindowsHookEx. У этой функции четыре параметра:

1. Тип ловушки. Я указал WH_GETMESSAGE, которая ловит все сообщения.

2. Указатель на функцию, которой будут пересылаться сообщения Windows.

3. Указатель на приложение

4. Идентификатор потока. Если ноль, то используется текущий.

В качестве второго параметра я указал имя функции SysMsgProc. Она также описана в этой dll. Давай на нее посмотрим.

Ловушка для сообщений

В первой строке я передаю пойманное сообщение остальным ловушкам, установленным в системе с помощью CallNextHookEx. После этого я получаю окно, сгенерировавшее событие, и проверяю тип события. Если была кликнута левая кнопка крысы и удержана пимпа Control, то убрать звездочки.

Я не могу больше останавливаться на этой DLL, потому что моя рубрика не резиновая. Придется тебе разбираться с происходящим по комментариям.

Юзаем DLL

Теперь напишем прогу, которая будет загружать DLL и запускать ловушку. Для этого создай новый проект (такие мы уже создавали). Перейди в исходник и найди раздел var. Рядом должно быть написано что-то типа "Form1: TForm1". Допиши сюда строку:

Содержание  Вперед на стр. 034-071-2