Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Тянем пароли из кэша

Delphi , Синтаксис , Пароли

Тянем пароли из кэша

Земля. 2050 год. Генетический программер разбирает очерендной кусок генной последовательности и видит следующий комментарий:
{ A eti geny nado by ubrat nahren. Archangel Gavriil }

Так, сегодня мы рассмотрим как можно взять кэшированные пароли из 9x винды, а также из винды, где в установленном виде есть 5-я иешка (хотя может и 4-ой хватит:)


unit Unit1;

interface

uses
  Windows, SysUtils, Classes, Forms, ShellAPI, Controls, StdCtrls;

type
    TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    ListBox: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    procedure Label1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    hMPR: THandle;
end;

// Отсюда мы можем заключить что должно валяться на форме,
// надеюсь вы сами всё закидаете, а если нет, то вам дорога в хелпы.

var
  Form1: TForm1;

const
  Count: Integer = 0;

function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte;
PC: PChar; dw: DWord): Word; stdcall;

implementation
{$R *.DFM}

function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte;
PC: PChar; dw: DWord): Word; external mpr name 'WNetEnumCachedPasswords';

// Объявляем функцию внешней, надеюсь вы поняли
// каким макаром, или вам опять в хелпы

type
  PWinPassword = ^TWinPassword;
  TWinPassword = record
  EntrySize: Word;
  ResourceSize: Word;
  PasswordSize: Word;
  EntryIndex: Byte;
  EntryType: Byte;
  PasswordC: Char;
end;

// Объявляем все типы, которые будем юзать в проге.

var
  WinPassword: TWinPassword;

// Собственно переменные :-)

function AddPassword(WinPassword: PWinPassword; dw: DWord): LongBool; stdcall;
var
  Password: string;
  PC: array[0..$FF] of Char;
begin
  inc(Count);
  // Увеличиваем число паролей на 1
  Move(WinPassword.PasswordC, PC, WinPassword.ResourceSize);
  // Получаем в PC пароль
  PC[WinPassword.ResourceSize] := #0;
  CharToOem(PC, PC);
  Password := StrPas(PC);
  // После недолгих преобразований в Password имеем кэшированный логин
  Move(WinPassword.PasswordC, PC, WinPassword.PasswordSize + WinPassword.ResourceSize);
  Move(PC[WinPassword.ResourceSize], PC, WinPassword.PasswordSize);
  PC[WinPassword.PasswordSize] := #0;< BR> CharToOem(PC, PC);
  // Теперь в PC имеем пароль
  Password := Password + ': ' + StrPas(PC);
  // Разделяем логин и пароль двуеточием...
  Form1.ListBox.Items.Add(Password);
  // ...и добавляем в ListBox на форме
  Result := True;
  // Возвращаемся с положительным результатом
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
  // при нажатии на лэйбл открываем окошко ие с нашим любимым сайтом :-)
  ShellExecute(GetDesktopWindow, 'open', 'http://www.lamerov.net', nil, nil, 0);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  // А теперь сама процедура заполнения всех паролей.
  if WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0) <> 0 then
  // Если не найден кэшированый пароль, то
  begin
    Application.MessageBox('Can''t load passwords: User is not logon.',
    'Error', mb_Ok or mb_IconWarning);
    Application.Terminate;
    // Выдаем сообщение об этом
  end
  // иначе,
  else
  if Count = 0 then
    // если паролей всего 0 то тоже об этом сообщаем
    ListBox.Items.Add('No passwords found...');
end;

end.

Вы наверное спросите: как же все таки дельфи попадает туда куда нам нужно, то есть на функцию обработки паролей и почемы она кэшит их всех, хотя функцию вызывали всего одни раз, а очень просто. Помните строку WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0) так вот она все и делает. Надеюсь вопросов не осталось.

Код предназначен для извлечения хранимых паролей из системы Windows с помощью функции WNetEnumCachedPasswords. Функция возвращает массив записей типа TWinPassword, которые содержат информацию о каждом парольном входе.

Вот шаг за шагом, как работает код:

  1. Единица Unit1 определяет форму (TForm) с листбоксом (ListBox) и двумя метками (Label1 и Label2). Процедура FormShow используется для заполнения листбокса хранимыми паролями.
  2. Функция WNetEnumCachedPasswords объявлена как внешняя функция, что означает, что она не реализована в этой единице, а вызывается из другой библиотеки (вероятно, Windows API).
  3. Тип PWinPassword определен как указатель на запись типа TWinPassword, которая содержит поля для размера пароля, ресурса, размера пароля, индекса входа и символа пароля.
  4. Процедура AddPassword принимает указатель на PWinPassword и DWORD-значение (dw) в качестве входных параметров и возвращает булевое значение, указывающее, был ли добавлен пароль успешно.
  5. В процедуре AddPassword код извлекает пароль из записи типа TWinPassword с помощью функции CharToOem, чтобы конвертировать кодировку символов. Затем пароль добавляется в листбокс на форме с помощью ListBox.Items.Add.
  6. Процедура FormShow вызывает функцию WNetEnumCachedPasswords с nil, 0, $FF и указателем на процедуру AddPassword в качестве входных параметров. Функция возвращает массив записей типа TWinPassword, которые затем обрабатываются процедурой AddPassword.

Код использует функцию WNetEnumCachedPasswords для извлечения хранимых паролей из кэша системы. Функция принимает четыре аргумента:

  • lp: указатель на null-терминированную строку, которая specifies the network resource (в этом случае nil, что означает все ресурсы).
  • w: слово-значение, которое specifies the type of password entry (0, что означает все типы).
  • b: байтовое значение, которое specifies the number of bytes to read ($FF, что означает все байты).
  • PC: указатель на буфер, который receives the password entries.

Функция возвращает массив записей типа TWinPassword, которые затем обрабатываются процедурой AddPassword.

Обратите внимание, что это код, вероятно, предназначен для образовательных или демонстрационных целей только, поскольку он bypasses normal security measures и может представлять риск, если используется в производственной среде.

В статье описывается способ извлечения кэшированных паролей в операционной системе Windows 9x и Windows с установленным Internet Explorer 5 или более поздней версии.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Пароли ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 08:45:00/0.0062439441680908/0