VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Язык программирования Delphi.
Воровство паролей
:
Logo

По многочисленным заявкам, я сегодня решил рассмотреть взлом с помощью Delphi. Ты узнаешь, как вытащить из системы пароли. На рисунке 1 ты можешь увидеть пример выполнения проги. Правда, паролей ты не увидишь, а то вдруг треснешь от такой халявы.
Logo
Рис 1. Форма

Как и в предыдущей статье, ты должен скачать пример здесь, а я сейчас расскажу, как всё реализовано.

В обработчике события формы "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. В качестве первого параметра передаётся то, что надо перекодировать, а второй - результат перекодировки.

На этом всё. Это занятие оказалось маленьким, но поучительным.

 Исходники примера забирай здесь


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©