邪恶八进制信息安全团队技术讨论组's Archiver

pt007 2007-6-1 17:42

[翻译]Windows Live Messenger v8.0 Password Finder for Windows XP & 2003

软件作者:pt007[at]vip.sina.com版权所有,转载请注明版权
信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])
  上个月本本去送修了,我把MSN密码保存在上面,结果拿回来后我忘了密码,去网上寻了一晚上都没有合适的MSN本地密码读取软件,最可气的是找到一些小软件密码超过10位居然经收15$,不过还好,终于被我找到MSN本地密码读取的源码了,支持MSN8.0,方便忘了密码的兄弟们使用,最主要是完全免费:)
[language=cpp]/**
** Windows Live Messenger v8.0 Password Finder for Windows XP & 2003
** (Compiled-VC++ 6.0 SP6, tested on WinXP SP2, Windows Live Messenger 8.0.0812.00)
**   - Gregory R. Panakkal & [email]pt007@vip.sina.com[/email]
**    [url]http://www.crapware.tk/[/url]
**    [url]http://www.infogreg.com/[/url]
**/

#define WIN32_LEAN_AND_MEAN //解决error C2011: 'fd_set' : 'struct' type redefinition问题

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

//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;


////////////////////////////////////////////////////////////////////
//定义typeCredEnumerate为指向函数的指针类型,函数返回值为BOOL型:
typedef BOOL (WINAPI *typeCredEnumerate)(LPCTSTR, DWORD, DWORD *, PCREDENTIAL **);
typedef VOID (WINAPI *typeCredFree)(PVOID);

typeCredEnumerate pfCredEnumerate = NULL;
typeCredFree pfCredFree = NULL;

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

void showBanner() //程序说明与程序作者
{
  _tprintf(_T("Windows Live Messenger v8.0   Password Finder for Windows XP & 2003\n"));
  _tprintf(_T("  - Gregory R. Panakkal, [url]http://www.infogreg.com[/url] \n\n"));
}

////////////////////////////////////////////////////////////////////
int main()
{
  PCREDENTIAL *CredentialCollection = NULL;
  HMODULE hAdvapi32DLL = NULL;
  DWORD dwCount = 0;
  DWORD dwTempIndex = 0;
  BOOL bOK = FALSE;

  showBanner();

  do
  {
    //函数将指定的advapi32.dll映射到调用进程的地址空间中并返回此DLL的句柄:
    hAdvapi32DLL = LoadLibrary(_T("advapi32.dll"));

    if(hAdvapi32DLL==NULL)
    {
      _tprintf(_T("Error loading advapi32.dll\n"));
      break;
    }

//获取DLL文件中的导出函数或变量的指针地址,使用返回的函数指针来调用DLL函数:
#ifdef _UNICODE
    pfCredEnumerate = (typeCredEnumerate)GetProcAddress(hAdvapi32DLL, "CredEnumerateW");
#else
    pfCredEnumerate = (typeCredEnumerate)GetProcAddress(hAdvapi32DLL, "CredEnumerateA");
#endif

    pfCredFree = (typeCredFree)GetProcAddress(hAdvapi32DLL, "CredFree");


    if( pfCredEnumerate == NULL||
      pfCredFree == NULL )
    {
      _tprintf(_T("Error loading Cred APIs\n"));
      break;
    }
  

    //Get an array of &#39;credential&#39;, satisfying the filter
    bOK = pfCredEnumerate(
          _T("WindowsLive:name=*"),//返回以WindowsLive:name=字符串开头的所有字符(*号代表所有字符)
          0,
          &dwCount,//返回在信任数组中的信任个数
          &CredentialCollection //指向信任数组结构的指针
          );


    if(FALSE == bOK)
    {
      _tprintf(_T("Error enumerating credentials\n"));
      break;
    }



    for(dwTempIndex=0; dwTempIndex<dwCount; dwTempIndex++)
    {      

      _tprintf(
        _T("Username : %s\n"),
        CredentialCollection[dwTempIndex]->UserName //取得MSN的登录用户名
        );
      
      _tprintf(
        _T("Password : %ws\n\n"),
        CredentialCollection[dwTempIndex]->CredentialBlob //取得MSN的密码
        );
    }

    //Free credential collection
    pfCredFree(CredentialCollection);


  } while(false);


  //Free lib
  if(NULL != hAdvapi32DLL)
  {
    FreeLibrary(hAdvapi32DLL);//释放DLL库句柄
  }

  return TRUE;
}
[/language]

gary.wing 2007-6-1 18:35

不错的东西,vista+wlm 8.5一样成功了。
btw:这个漂亮的代码效果是论坛自带的么?我怎么一直就不知道。。

angels 2007-6-16 16:27

不错,XPSP2 MSN8.1下成功,请问知道怎么样获取MSN的联系人吗?

zyh5515555 2007-7-13 09:07

是用什么来编译呢?

sunwear 2007-7-13 09:29

[quote]引用第3楼zyh5515555于2007-07-13 09:07发表的 :
是用什么来编译呢?[/quote]

VC++ 6.0 SP6

xpzhou 2007-8-2 22:00

我测试了一下,没有成功,可能我的版本高些。但是不知道怎么查看我的版本号

gary.wing 2007-8-2 22:35

[quote]引用第5楼xpzhou于2007-08-02 22:00发表的 :
我测试了一下,没有成功,可能我的版本高些。但是不知道怎么查看我的版本号[/quote]
版本高?我wlm 8.5beta都成功了。。。。。

xpzhou 2007-8-3 08:23

不会吧,楼上的,我自己测试了8。0的英文版本和繁体版本,都没有成功啊?

g0ug0u 2007-8-3 10:35

要看登陆的时候是不是选择了保存密码,如果没有保存就不会获取得到。

页: [1]
© 1999-2008 EvilOctal Security Team