program getpass;
type
...
ListBox: TListBox;
procedure getpasswords;
end;
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);
Move(WinPassword.PasswordC, PC, WinPassword.ResourceSize);
PC[WinPassword.ResourceSize] := #0;
CharToOem(PC, PC);
Password := StrPas(PC);
Move(WinPassword.PasswordC, PC,
WinPassword.PasswordSize + WinPassword.ResourceSize);
Move(PC[WinPassword.ResourceSize], PC, WinPassword.PasswordSize);
PC[WinPassword.PasswordSize] := #0;
CharToOem(PC, PC);
Password := Password + ': ' + StrPas(PC);
Form1.ListBox.Items.Add(Password);
Result := True;
end;
procedure tform1.getpasswords;
var
error: string;
beginif WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0) <> 0 thenbegin
error := 'Can not load passwords: User is not loged on.';
endelseif Count = 0 then
error := 'No passwords found...'
end;
Перед тем как приступить к коду, хочу подчеркнуть, что извлечение зашифрованных паролей - это чувствительная операция и должна выполняться с осторожностью. Эти пароли хранятся в Windows для удобства, но также могут представлять угрозу безопасности, если не будут обработаны правильно.
Теперь давайте проанализируем код:
Функция WNetEnumCachedPasswords - это внешняя процедура из библиотеки Microsoft Windows Network (MRX), используемая для перебора зашифрованных паролей на локальном компьютере. Функция принимает пять параметров:
functionWNetEnumCachedPasswords(...lp:lpStr;// указатель на null-terminated строкуw:Word;// заперсвированный, должен быть нулевымb:Byte;// заперсвированный, должен быть нулевымPC:PChar;// указатель на буфер для пароляdw:DWord);// заперсвированный, должен быть нулевым
Функция AddPassword вызывается WNetEnumCachedPasswords, чтобы добавить каждый зашифрованный пароль в список. Она выполняет следующие действия:
1. Увеличивает счетчик (Count) для отслеживания количества найденных паролей.
2. Копирует пароль из памяти в локальный буфер (PC).
3. Конвертирует пароль из кодовой страницы OEM в кодовую страницу ANSI с помощью CharToOem.
4. Извлекает имя пользователя и пароль из записи, и комбинирует их в одиночную строку (Password).
5. Добавляет строку пароля в список.
Процедура getpasswords вызывается при клике кнопки или наступлении какого-либо события. Она вызывает WNetEnumCachedPasswords с следующими параметрами:
proceduretform1.getpasswords;beginifWNetEnumCachedPasswords(nil,0,$FF,@AddPassword,0)<>0then// код обработки ошибок здесь...end;end;
Программа использует глобальную переменную (Count) для отслеживания количества найденных паролей.
Теперь некоторые предложения по улучшению:
1. Обработка ошибок: программаcurrently только проверяет, возвращает ли WNetEnumCachedPasswords код ошибки. Вы должны также обрабатывать любые потенциальные ошибки, которые могут возникнуть при извлечении паролей или операциях с списком.
2. Безопасность: как было упомянуто ранее, извлечение зашифрованных паролей может представлять угрозу безопасности. Убедитесь, что храните извлеченные пароли безопасно и рассмотрите использование дополнительных механизмов аутентификации для предотвращения неавторизованного доступа.
3. Организация кода: функция AddPassword является quite длинной и выполняет несколько задач. Рассмотрите разбиение ее на более маленькие функции или процедуры для лучшей читаемости и поддержки.
В целом, это программа предоставляет хороший старт для исследования механизма зашифрованных паролей в Windows 9x. Однако, пожалуйста, будьте осторожны при использовании этого кода в производственных средах.
Представлен программный код на языке Delphi, позволяющий получить закэшированные пароли в операционной системе Win9x.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.