Увидеть пароль скрытый за звёздочками
Увидеть пароль скрытый за звёздочками Создание и использование DLL: Благодаря твоим просьбам и запросам из HackFaq мне приходится отходить от плана согласованного с главредом. С одной стороны, ты толкаешь меня под окровавленный кровью авторов Х нож главреда. С другой стороны ты мне усложняешь жизнь по самые «не хочу». В любом случае, ничего хорошего. Если так пойдёт и дальше, то на ноже SinTEZа появится моя свежая кровь. И следующий репортаж о кодинге мне придётся вести уже из морга. Но что поделаешь. Сегодня мне приходится корректировать свой план и выполнять твои просьбы. В этом номере обе статьи кодинга построены по самым многочисленным просьбам. Эта статья отвечает на наиболее часто задаваемый вопрос из HackFaq: «Как увидеть пароль спрятанный под звёздочками?». Для этого есть куча разных прог. Но мы же с тобой совместимые челы, поэтому не юзаем чужие творения. Вот поэтому мы создадим такую прогу сами. Тем более, что сам попросил объяснить, как это работает. Шкодинг: Для этого примера я написал DLL файл, который будет сейчас расписан перед твоими глазами. Ничего особо визуального мы сегодня делать не будем. Только кодинг и ничего больше. Кстати, я уже перешёл на Delphi 6, так что все исходники теперь будут писаться в нём. Если ты до сих пор застрял в Delphi 5, то бегом на рынок за свеженьким диском. Для начала создадим новый проект. Но не тот, который использовали до этого, а проект DLL библиотеки. Для этого выбирай меню File->New->Other … (для Delphi 5 это просто File->New). Перед тобой откроется окно. Найди здесь пункт DLL Wizard и дважды кликни по нему. Delphi создаст пустой проект DLL библиотеки. Сразу нажми пимпу «Save», чтобы сохранить проект. В качестве имени введи «hackpass», это же и будет именем dll файла. Теперь сотри весь текст, который написал Delphi и напиши:
uses Windows, Messages;
var
SysHook : HHook = 0;
Wnd : Hwnd = 0;
function SysMsgProc(code : integer; wParam : word;
lParam : longint) : longint; stdcall;
begin
// Передать сообщение другим ловушкам в системе
CallHookEx(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.
Наверно так: хотя классов может быть больше
var
Wnd: HWND;
lpClassName: array[0..$FF] of Char;
begin
Wnd := WindowFromPoint(Mouse.CursorPos);
GetClassName(Wnd, lpClassName, $FF);
if ((strpas(lpClassName) = 'TEdit') or (strpas(lpClassName) = 'EDIT')) then
PostMessage(Wnd, EM_SETPASSWORDCHAR, 0, 0);
end;
Дополнение от: Mikel
Здесь проблема: если страница памяти защищена, то её нельзя прочитать таким способом, но можно заменить PasswordChar(пример: поле ввода пароля в удаленном соединении)
Взято с Vingrad.ru http://forum.vingrad.ru
Отправить комментарий