( Вход | Регистрация | Поиск )

Как увидеть пароль спрятанный под звёздочками?, Delphi.Среднии уровень.
Дата обновления: 06.05.2004 - 14:03, перейти к новому сообщению

tyomik89

Цитата | Quote
«Как увидеть пароль спрятанный под звёздочками?». Для этого есть куча разных прог. Но мы же с тобой совместимые челы, поэтому не юзаем чужие творения. Вот поэтому мы создадим такую прогу сами. Тем более, что сам попросил объяснить, как это работает.

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

Для начала создадим новый проект. Но не тот, который использовали до этого, а проект DLL библиотеки. Для этого выбирай меню File->New->Other … (для Delphi 5 это просто File->New). Перед тобой откроется окно. Найди здесь пункт 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». Допиши сюда строку:

procedure RunStopHook(State : Boolean) stdcall; external 'hackpass.dll' index 1;

В этой строке я объясняю Delphi, что есть такая функция RunStopHook, которая находится в написанной мной библиотеке hackpass.dll и её индекс = 1. Вот по этому индексу Delphi и будет вызывать функцию. Можно конечно же и по имени, но это будет немного медленней.

Теперь создай обработчик события для формы OnShow и напиши там:

RunStopHook(true);

И наконец создай обработчик события OnClose и напиши:

RunStopHook(false);

Кранты паролям:
Всё наше приложение готово. Запусти его. Потом перейди в окно со строкой ввода и кликни там левой кнопкой крысы удерживая Control. Звёздочки моментально превратятся в реальный текст.

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

Исходный текст dll файла:
library hackpass;

uses Windows, Messages;
var
SysHook : HHook = 0;
Wnd : Hwnd = 0;

function SysMsgProc(code : integer; wParam : word;
lParam : longint) : longint; stdcall;
begin
//Передать сообщение другим ловушкам в системе
CallNextHookEx(SysHook, Code, wParam, lParam);
//Проверяю сообщение
if code = HC_ACTION then
  begin
//Получаю идентификатор окна сгенерировавшего сообщение
   Wnd := TMsg(Pointer(lParam)^).hwnd;

//Проверяю тип сообщения.
//Если была нажата левая кнопка мыши
//и удержана кнопка Control, то …
   if TMsg(Pointer(lParam)^).message = WM_LBUTTONDOWN then
   if ((TMsg(Pointer(lParam)^).wParam and MK_CONTROL) = MK_CONTROL) then
    begin
// Убрать в окне отправившем сообщение звёздочки
     SendMessage(Wnd, em_setpasswordchar, 0, 0);
//Перерисовать окно.
     InvalidateRect(Wnd, nil, true);
    end;
  end;
end;

// Процедура запуска.
procedure RunStopHook(State : Boolean) export; stdcall;
begin
//Если State = true, то …
if State=true then
  begin
//Запускаем ловушку.
   SysHook := SetWindowsHookEx(WH_GETMESSAGE,
      @SysMsgProc, HInstance, 0);
  end
else//Иначе
  begin
//Отключить ловушку.
   UnhookWindowsHookEx(SysHook);
   SysHook := 0;
  end;
end;

exports RunStopHook index 1;

begin
end.


P.S.-//-Это коментарии, их в код не писать!


Ответов(1 - 5)

ViolentOr

П.С.
комменты в код тоже можно писать. Дэлфи пометки после "//" за код не считает. Более того при разработке кода комменты лучше писать. И самому проще + если ты исходники бушь давать, тот кому ты их дашь по комментам быстрее разберётся.


PRYANIK
Группа: Администраторы

Сообщений: 31.432
offtopic.gif
Для тех кто не дружит с Делфи, есть готовая прога smile.gif...
_http://www.carc.hotma...dcrack_rus.zip ~ 17 КБ


--------------------
Не работает ссылка? Пишите в теме, обновим :)! Link not working? Let us know in the comments, we'll fix it!


Трудно найти слова, когда действительно есть что сказать. Э.М. Ремарк


ViolentOr

Пряник, ЛОЛ это урок по дэлфям))))))
Кому нужна уже готовая? biggrin.gif


PRYANIK
Группа: Администраторы

Сообщений: 31.432
smile.gif)))... да я ПОНЯЛ wink.gif))...
Просто ведь найдутся спецы, спросить про готовое wink.gif


--------------------
Не работает ссылка? Пишите в теме, обновим :)! Link not working? Let us know in the comments, we'll fix it!


Трудно найти слова, когда действительно есть что сказать. Э.М. Ремарк


ViolentOr

гм.... в голову таким спецам)))))