Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 349

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты! Пишу программу просмотра статистики использования Интернета с сайта провайдера. Для доступа к статистике необходимо ввести логин и пароль, они совпадают с логином и паролем соединения с Интернетом.
Есть функция RasEnumEntries благодаря которой я получаю список всех соединений, с помощью RasGetEntryDialParams имя пользователя и пароль. С именем пользователя все нормально, а вот пароль получаеться как строчка состоящая из звездочек. Как можно получить нормальный пароль? Я понимаю, что это все похоже на "добывание" паролей, но бывают же случаи когда действительно такая информация испольльзуеться только для положительных целей, т.е. для уменешения количества настраиваемых опций программы и "легкости интерефеса".

Приложение:
  1. function GetStatUserNamePassword(var Pass, User: String): Boolean;
  2. const
  3. MaxEntries = 100;
  4. var
  5. Fp: LongBool;
  6. R: Integer;
  7. DialParams: TRasDialParams;
  8. AEntryDial: string;
  9. BuffSize: Integer;
  10. Entries: Integer;
  11. Entry: array[1..MaxEntries] of TRasEntryName;
  12. X, Result_: Integer;
  13. AllEntries: TStrings;
  14. begin
  15. Result:= False;
  16. AllEntries:= TStringList.Create;
  17. Entry[1].dwSize:= SizeOf(TRasEntryName);
  18. BuffSize:= SizeOf(TRasEntryName) * MaxEntries;
  19. Result_:= RasEnumEntries(nil, nil, @Entry[1], BuffSize, Entries);
  20. if (Result_ = 0) and (Entries > 0) then
  21. begin
  22. for X:= 1 to Entries do
  23. begin
  24. AllEntries.Add(Entry[x].szEntryName);
  25. end;
  26. end;
  27. AEntryDial:= AllEntries.Strings[0];
  28. FillChar(DialParams, SizeOf(TRasDialParams), 0);
  29. with DialParams do
  30. begin
  31. dwSize:= Sizeof(TRasDialParams);
  32. StrPCopy(szEntryName, AEntryDial);
  33. end;
  34. R:= RasGetEntryDialParams(nil, DialParams, Fp);
  35. Pass:= DialParams.szPassword;
  36. User:= DialParams.szUserName;
  37. if R = 0 then
  38. Result:= True;
  39. AllEntries.Free;
  40. end;
  41.  
  42. procedure TfmMain.bbGetStatClick(Sender: TObject);
  43. var
  44. Pass, User: String;
  45. begin
  46. if GetStatUserNamePassword(Pass, User) then
  47.  
  48.  
  49. ShowMessage(User + ' ; ' + Pass);
  50. end;


Spawn Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Spawn (статус: 1-ый класс)
Вопрос отправлен: 25 февраля 2007, 07:58
Состояние вопроса: открыт, ответов: 4.

Ответ #1. Отвечает эксперт: Роман

Здравствуйте, Spawn!Тут наверно проблема в том что сама винда скрывает таким образом всё что связано с паролями.Поетому надо сделать DLL'ку с хуком (SetWindowsHookEx) и в ней перехватывать мессаги (если есть нужная мессага, то смотрим пароль).

Ответ отправил: Роман (статус: 5-ый класс)
Время отправки: 25 февраля 2007, 08:45
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Вадим К

Microsoft делает всё возможное, что бы "злосные хакеры" не могли так просто получить пароли. В ХР добыть их сложно, а в Vista - с включеным UAC - практически нельзя (нельзя обычными методами.)
Поэтому, наиболее корректным решением будет ввод пароля вручную.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 25 февраля 2007, 18:33
Оценка за ответ: 4

Комментарий к оценке: Спасибо за внимание к вопросу. Но решение уже найдено, и исправно работает, выдает пароли DialUp'а, как семочки.

Ответ #3. Отвечает эксперт: Шарайчук Сергей Олександрович

На етом сайте в розделе Исходники есть програма UnPass, она даёот возможность видеть символы под *, Там есть иходник етой програмы, он тебе поможет!!!!

Ответ отправил: Шарайчук Сергей Олександрович (статус: 2-ой класс)
Время отправки: 26 февраля 2007, 20:57
Оценка за ответ: 3

Комментарий к оценке: Это абсолютно не то!

Ответ #4. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, Spawn!
Там никакой пароль и не должен возвращаться - если бы там возвращался пароль в чистом виде, это была бы такая дыра в защите системы - просто дырища..
Вместо пароля там передается ручка (handle) на пароль, эту ручку можно использовать в функциях RasSetEntryDialParams и RasDial.
И не надо нападать на Микрософт - это объективно правильная реализация.

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 27 февраля 2007, 10:35
Оценка за ответ: 4

Комментарий к оценке: Спасибо! Но Microsoft Windows все равно потвердила свою "дырявость". Решение на свой вопрос я уже нашел, и оно исправно работает. Немного доработаные функции из модуля RAS API выдают нормальный пароль... ;)

Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 25 февраля 2007, 11:30; участников в обсуждении: 2.
Роман

Роман (статус: 5-ый класс), 25 февраля 2007, 08:51 [#1]:

PS:если будет надо напиши roman_si@list.ru и я вышлю статейку с исходником dll-ки.
Spawn

Spawn (статус: 1-ый класс), 25 февраля 2007, 11:30 [#2]:

Всем спасибо! Решение вопроса найдено в
http://www.cobans.net/files/rasdecrypt.zip

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 2 апреля 2023, 05:48
Выполнено за 0.02 сек.
Рейтинг@Mail.ru