Каталог статей
Меню сайта

Категории каталога
Язык программирования Delphi [27]

Форма входа

Поиск по каталогу

Друзья сайта

Наш опрос
Переходишь ли ты на Vista?
Всего ответов: 176

Приветствую Вас, Гость · RSS 12.05.2026, 16:02

Начало » Статьи » Язык программирования Delphi

Воровство паролей.
По многочисленным заявкам, я сегодня решил рассмотреть взлом с помощью Delphi. Ты узнаешь, как вытащить из системы пароли. Правда, паролей ты не увидишь, а то вдруг треснешь от такой халявы. Как и в предыдущей статье, ты должен скачать пример из раздела “Исходники к статьям”, а я сейчас расскажу, как всё реализовано. В обработчике события формы "OnCreate" вызывается недокументированная функция WNetEnumCachedPasswords . Эта функция ищет пароли в кэше и возвращает их в процедуру указанную в качестве четвёртого параметра. В Win 9x есть огромный баг - при запуске widows пароли загружаются в память и хранятся там, на протяжении всего сеанса, поэтому их легко выдернуть с помощью этой функции. Самое интересное, что они хранятся в незашифрованном виде, и тебе не придётся ничего расшифровывать. Теперь посмотрим как объявлена эта функция. Объявление состоит из двух строк. В первой я просто описал, что она представляет из себя. Вторую я рассмотрю подробнее: function WnetEnumCachedPasswords // Имя функции (lp: lpStr; //Должен быть NIL w: Word;// Должен быть 0 b: Byte; // Должен быть $FF PC: PChar; // Адрес функции, в которую вернутся пароли dw: DWord): Word; // опять 0 external mpr // Имя DLL файла в котором находится эта функция name 'WNetEnumCachedPasswords'; //Имя функции в DLL файле. Теперь ты разберёшься и с первой строкой описания: function WnetEnumCachedPasswords (lp: lpStr; w: Word; b: Byte; PC: PChar; dw: Dword ): Word; stdcall; Единственное, чего ты можешь не знать, так это слово "stdcall". Оно означает, что функция использует стандартный вызов. Функция, в которую возвратятся пароли должна выглядеть как: function AddPassword//Имя функции, может быть любым. ( WinPassword: PWinPassword; //Указатель на структуру WinPassword dw: Dword //Мы не будем использовать. ): LongBool; stdcall; Теперь нужно знать, что такое WinPassword . Эта не стандартная структура и её объявления ты нигде не найдёшь, поэтому ты должен объявить её ручками: type PWinPassword = ^TWinPassword; TWinPassword = record EntrySize: Word; ResourceSize: Word; PasswordSize: Word; EntryIndex: Byte; EntryType: Byte; PasswordC: Char; end; В "PasswordC" будет находится строка содержащая имя пользователя и пароль. ResourceSize - размер имени пользователя, а PasswordSize - размер пароля. Дальше я не буду ничего объяснять. Если сможешь, то разберешься сам, а если нет, то сочувствую. Единственное, что я могу сказать, так это то, что пароль хранится в DOS кодировке. Поэтому, чтобы его увидеть, надо перекодировать в Windows-кодировку. Для этого я использую функцию CharToOem. В качестве первого параметра передаётся то, что надо перекодировать, а второй - результат перекодировки. На этом всё. Это занятие оказалось маленьким, но поучительным.
Категория: Язык программирования Delphi | Добавил: proDelphi (09.06.2007) | Автор: Михаил Фленов
Просмотров: 718 | Комментарии: 2 | Рейтинг: 0.0 |

Всего комментариев: 1
1 DEN  
0
Очень старинная функция!

Имя *:
Email *:
Код *: