Студия web-дизайна Хостмэйк
Наши работыКонтактыО компанииОтзывыГлоссарийСтатьи

Просмотр файла PWL

Статьи Программирование на VisualBasic

У людей всегда были секреты. И они пытались их сохранить .Достоверно известно, что пираты, пряча награбленое добро на каком нибудь Богом забытом острове рисовали секретную карту, где подробненько указывали расположение сокровищь. И уж конечно, карта рисовалась не для жадных до чужих денег кладоискателей, а для себя любимого, ибо память человеческая имеет хорошее свойство - забывать. С того времени мало что изменилось. Мы по прежнему прячем свои сокровища от чужого взгляда в недрах гигабайтных HDD. Только вместо карты придумываем секретное слово, и что бы его не забыть, сохраняем его в своем компьютере, ибо память человеческая имеет хорошее свойство - забывать, особенно если пароль действительно хороший. 
Пароли храняться в парольном кэше, в файле ВашЛогин.PWL. Под парольным кэшем понимается механизм сохранения и повторного использования паролей в системе. От обычной базы логинов данный механизм отличается именно хранением дополнительных парольных ресурсов и возможностью их использования по специальному запросу без участия пользователя. Это дает нам возможность не запоминать пароли не несущие смысловой информации, не возможно подглядеть за клавиатурой и исключает ошибки при вводе пароля. Но есть и свои недостатки - возможность получения секретной информации злоумышленником при взломе парольного кэша.

Ну мы сегодня не будем о грустном. Возникают ситуации, когда недостатки превращаются в достоинства. Вот самая обычная ситуация.Покупка нового компьютера. Вы целый год пользовались старым, у вас накопилось два мешка различных интернет карт, несколько почтовых ящиков, что соответственно потребует восстановления информации на новом компе. Для восствновления нужны логины и пароли. А кто же их помнит? Только старый комп. Но пароли он не скажет - только звездочки покажет(стихи!!!). В Интернете полно прграмм, открывающих завесу звезд, это верно. Но для этого надо запустить процесс, что бы звездочки появились. А это нудно, особенно если много их. Да и пропустить что то можно. Вот если бы сразу все, и в отдельный файл желательно! Ага, вот и пришло представить одну интересную возможность.

Кэширование паролей - общесистемный сервис, это значит, что любое приложение может получить к нему доступ. Вот и будем писать это приложение на VB. 
Это приложение для своей работы использует API функцию, которая по известным причинам недокументирована. В стандартном применении не может использоваться как инструмент взлома, т.к. для просмотра парольного кеша нужно сначала войти в систему с именем и паролем пользователя, который не хранится в кеше. Для каждого пользователя свой PWL файл, просматривается только текущий. Открываем стандартный проект. На форме ничего не требуется, если данные сбрасывать в файл. Если необходимо выводить на экран, то положите два ListBox. Сделайте их пошире - ресурсные имена бывают длинные.

Код для формы простой: 
Private Sub Form_Load() 
On Local Error Resume Next 
WNetEnumCachedPasswords 0, 0, &HFF, AddressOf pceCallback, 0 
'Проверочка системы 
If Err.Number Then MsgBox "Только для Win9*/ME!" 
End Sub 

Это что бы синхронизировать списки имени и пароля, если требуется вывод на экран. 
Private Sub List1_Click() 
List2.ListIndex = List1.ListIndex 
End Sub 
Private Sub List2_Click() 
List1.ListIndex = List2.ListIndex 
End Sub 
Далее добавляем модуль pwldecod.bas, который собственно и производит декодирование. 
Dim intFH As Integer '
это будет номер открываемого файла в котором сохраняются данные 
Public Type tagPASSWORD_CACHE_ENTRY '
тут переменные, хранящие размеры ресурсов, паролей 
cbEntry As Integer 
cbResource As Integer 
cbPassword As Integer 
iEntry As Byte 
nType As Byte 
End Type Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long) Public Declare Function WNetEnumCachedPasswords Lib "mpr.dll" (ByVal Param1 As Long, ByVal Param2 As Long, ByVal Flags As Long, ByVal ProcAddress As Long, ByVal Param3 As Long) As Long 
Public Function CString(aStr) As String 
Dim k As Long 
k = InStr(aStr, Chr$(0)) 
If k Then 
CString = Left$(aStr, k - 1) 
Else 
CString = aStr 
End If 
End Function 
Public Function pceCallback(ByVal lParam As Long, ByVal wParam As Long) As Long 
Dim PCE As tagPASSWORD_CACHE_ENTRY, abResource As String 
CopyMemory PCE, ByVal lParam, 6 
abResource = Space$(PCE.cbResource + PCE.cbPassword) 
CopyMemory ByVal abResource, ByVal lParam + 8, Len(abResource) 
' вывод на экран 
Form1.List1.AddItem CString(Left$(abResource, PCE.cbResource)) 
Form1.List2.AddItem CString(Mid$(abResource, PCE.cbResource + 1)) 
intFH = FreeFile() 
' записать в файл 
Open "PWLfile.usr" For Append As intFH 
Print #intFH, CString(Left$(abResource, PCE.cbResource)), CString(Mid$(abResource, PCE.cbResource + 1)) 
Close intFH 
pceCallback = True 
End Function 

Особо подробно работу API не расписываю - потому, что недокументированно... Но все что нужно это уже есть, и работает. Если за один сеанс работы на компе запускать сие приложение несколько раз ( бывает для отладки надо), то может и не декодировать, лечиться перезагрузкой компа.

Источник: http://codenet.ru

16.02.2006

Телефон

+7 8636 237-836

Поиск

VSESMI.ru — новости в СМИ.
Один из больших по объему информации проектов, работающих под управлением HostCMS.

Tur-Hotel.ru — отзывы об отелях
На сайте представлено описание отелей, рейтинг отелей с отзывами туристов.