Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: ZoNike en 22 Febrero 2008, 12:39 pm



Título: [ayuda] sacar contraseñas guardadas de msn
Publicado por: ZoNike en 22 Febrero 2008, 12:39 pm
wenas, estoy intentando traducir un codigo que encontré en C++ para sacar las contraseñas guardadas del msn messenger, pero no consigo hacerlo, alguien me puede exar un cable o decirme que es lo que hago mal? gracias.

Mi codigo en VB6:
Código
  1. Private Declare Function CredEnumerateA Lib "advapi32.dll" (ByVal lpszFilter As Integer, ByVal lFlags As Integer, ByRef pCount As Integer, ByRef lppCredentials As Integer) As Integer
  2. Private Declare Function CredFree Lib "advapi32.dll" (ByVal pBuffer As Integer) As Integer
  3. Private Declare Function CryptUnprotectData Lib "crypt32.dll" (ByRef pDataIn As DATA_BLOB, ByVal ppszDataDescr As Integer, ByRef pOptionalEntropy As DATA_BLOB, ByVal pvReserved As Integer, ByVal pPromptStruct As Integer, ByVal dwFlags As Integer, ByRef pDataOut As DATA_BLOB) As Integer
  4. Private Const EntropyString = "82BD0E67-9FEA-4748-8672-D5EFE5B779B0"
  5.  
  6. Private Type DATA_BLOB
  7.  cbData As Long
  8.  pbData As String 'As Long
  9. End Type
  10.  
  11. Dim blobCrypt As DATA_BLOB
  12. Dim blobEntropy As DATA_BLOB
  13. Dim blobPlainText As DATA_BLOB
  14. Dim EntropyData(37) As String
  15. Private Sub Form_Load()
  16. CredEnumerateA 0, 0, Count, CredentialCollection
  17.  
  18. For i = 1 To 36
  19.   EntropyData(i) = Mid(EntropyString, i, 1)
  20. Next i
  21.  
  22. For i = 0 To Count
  23.    blobCrypt.pbData = EntropyData(i) 'CredentialCollection[i]->CredentialBlob;
  24.    blobCrypt.cbData = 1 'CredentialCollection[i]->CredentialBlobSize;
  25.    blobEntropy.pbData = 1 '(BYTE *)&EntropyData;
  26.    blobEntropy.cbData = 74 'sizeof(EntropyData);
  27.  
  28.    CryptUnprotectData blobCrypt, 0, blobEntropy, 0, 0, 1, blobPlainText
  29.  
  30.    'MsgBox blobPlainText.cbData
  31.    MsgBox blobPlainText.pbData 'deberia devolver el password del msn
  32. Next i
  33.  
  34. CredFree (CredentialCollection)
  35. End
  36. End Sub




Codigo que encontré en C++:
Código
  1. #include<windows.h>
  2. #include<stdio.h>
  3.  
  4. typedef struct _CREDENTIAL_ATTRIBUTEA {
  5.  LPSTR Keyword;
  6.  DWORD Flags;
  7.  DWORD ValueSize;
  8.  LPBYTE Value;
  9. } CREDENTIAL_ATTRIBUTEA, *PCREDENTIAL_ATTRIBUTEA;
  10.  
  11. typedef struct _CREDENTIALA {
  12.  DWORD Flags;
  13.  DWORD Type;
  14.  LPSTR TargetName;
  15.  LPSTR Comment;
  16.  FILETIME LastWritten;
  17.  DWORD CredentialBlobSize;
  18.  LPBYTE CredentialBlob;
  19.  DWORD Persist;
  20.  DWORD AttributeCount;
  21.  PCREDENTIAL_ATTRIBUTEA Attributes;
  22.  LPSTR TargetAlias;
  23.  LPSTR UserName;
  24. } CREDENTIALA, *PCREDENTIALA;
  25.  
  26. typedef struct _CRYPTOAPI_BLOB {
  27.  DWORD  cbData;
  28.  BYTE*  pbData;
  29. } DATA_BLOB;
  30.  
  31. typedef struct _CRYPTPROTECT_PROMPTSTRUCT {
  32. DWORD   cbSize;
  33. DWORD   dwPromptFlags;
  34. HWND    hwndApp;
  35. LPCWSTR  szPrompt;
  36. } CRYPTPROTECT_PROMPTSTRUCT;
  37.  
  38. typedef CREDENTIALA CREDENTIAL;
  39. typedef PCREDENTIALA PCREDENTIAL;
  40.  
  41.  
  42. typedef BOOL (WINAPI *typeCryptUnprotectData)(
  43.           DATA_BLOB *,
  44.           LPWSTR *,
  45.           DATA_BLOB *,
  46.           PVOID *,          
  47.           CRYPTPROTECT_PROMPTSTRUCT *,
  48.           DWORD,
  49.           DATA_BLOB *
  50. );
  51. typedef BOOL (WINAPI *typeCredEnumerateA)(
  52.           LPCTSTR,
  53.           DWORD,
  54.           DWORD *,
  55.           PCREDENTIALA **
  56. );
  57. typedef BOOL (WINAPI *typeCredReadA)(
  58.           LPCTSTR,
  59.           DWORD,
  60.           DWORD,
  61.           PCREDENTIALA *
  62. );
  63. typedef VOID (WINAPI *typeCredFree)(PVOID);
  64.  
  65. typeCredEnumerateA pfCredEnumerateA;
  66. typeCredReadA pfCredReadA;
  67. typeCredFree pfCredFree;
  68. typeCryptUnprotectData pfCryptUnprotectData;
  69.  
  70. int main()
  71. {
  72.  PCREDENTIAL *CredentialCollection = NULL;
  73.  DATA_BLOB blobCrypt, blobPlainText, blobEntropy;
  74.  
  75.  char szEntropyStringSeed[37] = "82BD0E67-9FEA-4748-8672-D5EFE5B779B0"; //credui.dll
  76.  short int EntropyData[37];
  77.  short int tmp, pnet, j;
  78.  
  79.  HMODULE hDLL, hDLL2;
  80.  DWORD Count, i;
  81.  
  82.  if (hDLL = LoadLibrary("advapi32.dll")) {
  83.   pfCredEnumerateA = (typeCredEnumerateA)GetProcAddress(hDLL, "CredEnumerateA");
  84.   pfCredReadA = (typeCredReadA)GetProcAddress(hDLL, "CredReadA");
  85.   pfCredFree = (typeCredFree)GetProcAddress(hDLL, "CredFree");
  86.  
  87.   if (pfCredEnumerateA == NULL ||
  88.     pfCredReadA == NULL ||
  89.     pfCredFree == NULL) {
  90.  
  91.     printf("Error!\n");
  92.     return -1;
  93.   }
  94.  }
  95.  
  96.  if (hDLL2 = LoadLibrary("crypt32.dll")) {
  97.   pfCryptUnprotectData = (typeCryptUnprotectData)GetProcAddress(hDLL2, "CryptUnprotectData");
  98.  
  99.   if (pfCryptUnprotectData == NULL) {
  100.     printf("Error!\n");
  101.     return -1;
  102.   }
  103.  }
  104.  
  105.  pfCredEnumerateA(0, 0, &Count, &CredentialCollection);
  106.  printf("\nCount: %d\n", Count);
  107.  //Calculate Entropy Data
  108.  for (i = 0; i < 37; i++) { // strlen(szEntropyStringSeed) = 37
  109.   tmp = (short int)szEntropyStringSeed[i];
  110.   tmp <<= 2;
  111.   EntropyData[i] = tmp;
  112.  }
  113.  
  114.  if (Count) {
  115.   for (i = 0; i < Count; i++) {
  116.     pnet = strcmp(CredentialCollection[i]->TargetName, "Passport.Net\\*");
  117.     if (!pnet) {
  118.      blobEntropy.pbData = (BYTE *)&EntropyData;
  119.      blobEntropy.cbData = 74; //sizeof(EntropyData)
  120.  
  121.      blobCrypt.pbData = CredentialCollection[i]->CredentialBlob;
  122.      blobCrypt.cbData = CredentialCollection[i]->CredentialBlobSize;
  123.  
  124.      pfCryptUnprotectData(&blobCrypt, NULL, &blobEntropy, NULL, NULL, 1, &blobPlainText);
  125.  
  126.      printf("<-- MSN Messenger -->\n");  
  127.      printf("Username : %s\n", CredentialCollection[i]->UserName);
  128.      printf("Password : %ls\n\n", blobPlainText.pbData);
  129.     } else {
  130.      printf("<-- Windows Live Messenger -->\n");
  131.      printf("Username : %s\n", CredentialCollection[i]->TargetName);
  132.      printf("Password : %ls\n\n", CredentialCollection[i]->CredentialBlob);
  133.     }
  134.   }
  135.  }
  136.  pfCredFree(CredentialCollection);
  137.  system("PAUSE");
  138.  return 0;
  139. }
  140.