day & night

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



Unregistered














Цитата | 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.-//-Это коментарии, их в код не писать!
Go topGo end
 

Ответов(1 - 5)
6.05.2004 - 13:47
#2
ViolentOr



Unregistered














П.С.
комменты в код тоже можно писать. Дэлфи пометки после "//" за код не считает. Более того при разработке кода комменты лучше писать. И самому проще + если ты исходники бушь давать, тот кому ты их дашь по комментам быстрее разберётся.
Go topGo end
6.05.2004 - 13:50
#3
PRYANIK



Made In Tula
[SoftoRooMTeaM] Group Icon

Группа: Администраторы
Сообщений: 31.368
Регистрация: 22.02.2004
Пользователь №: 7


Респектов: 6432
-----XXXXX




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!


Трудно найти слова, когда действительно есть что сказать. Э.М. Ремарк
User is online!
Go topGo end
6.05.2004 - 13:52
#4
ViolentOr



Unregistered














Пряник, ЛОЛ это урок по дэлфям))))))
Кому нужна уже готовая? biggrin.gif
Go topGo end
6.05.2004 - 13:55
#5
PRYANIK



Made In Tula
[SoftoRooMTeaM] Group Icon

Группа: Администраторы
Сообщений: 31.368
Регистрация: 22.02.2004
Пользователь №: 7


Респектов: 6432
-----XXXXX




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


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


Трудно найти слова, когда действительно есть что сказать. Э.М. Ремарк
User is online!
Go topGo end
6.05.2004 - 14:03
#6
ViolentOr



Unregistered














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

Topic Options
task
Сейчас: 27.04.2024 - 23:36
Мобильная версия | Lite версия