?? msnp11chl.cpp
字號:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "md5.h"
char *szClientID="PROD0090YUAUV{2B";
char *szClientCode="YMM8C_H7KCQ2S_KL";
void DoMSNP11Challenge(const char *szChallenge, char *szOutput) {
int i;
MD5_CTX mdContext;
MD5Init(&mdContext);
MD5Update(&mdContext,(unsigned char *)szChallenge,strlen(szChallenge));
MD5Update(&mdContext,(unsigned char *)szClientCode,strlen(szClientCode));
MD5Final(&mdContext);
unsigned char pMD5Hash[16];
memcpy(pMD5Hash,mdContext.digest,16);
int *pMD5Parts=(int *)mdContext.digest;
for (i=0; i<4; i++) {
pMD5Parts[i]&=0x7FFFFFFF;
}
int nchlLen=strlen(szChallenge)+strlen(szClientID);
if (nchlLen%8!=0)
nchlLen+=8-(nchlLen%8);
char *chlString=new char[nchlLen];
memset(chlString,'0',nchlLen);
memcpy(chlString,szChallenge,strlen(szChallenge));
memcpy(chlString+strlen(szChallenge),szClientID,strlen(szClientID));
int *pchlStringParts=(int *)chlString;
long long nHigh=0;
long long nLow=0;
for (i=0; i<(nchlLen/4)-1; i+=2) {
long long temp=pchlStringParts[i];
temp=(pMD5Parts[0] * (((0x0E79A9C1 * (long long)pchlStringParts[i]) % 0x7FFFFFFF)+nHigh) + pMD5Parts[1])%0x7FFFFFFF;
nHigh=(pMD5Parts[2] * (((long long)pchlStringParts[i+1]+temp) % 0x7FFFFFFF) + pMD5Parts[3]) % 0x7FFFFFFF;
nLow=nLow + nHigh + temp;
}
nHigh=(nHigh+pMD5Parts[1]) % 0x7FFFFFFF;
nLow=(nLow+pMD5Parts[3]) % 0x7FFFFFFF;
delete[] chlString;
unsigned long *pNewHash=(unsigned long *)pMD5Hash;
pNewHash[0]^=nHigh;
pNewHash[1]^=nLow;
pNewHash[2]^=nHigh;
pNewHash[3]^=nLow;
char szHexChars[]="0123456789abcdef";
for (i=0; i<16; i++) {
szOutput[i*2]=szHexChars[(pMD5Hash[i]>>4)&0xF];
szOutput[(i*2)+1]=szHexChars[pMD5Hash[i]&0xF];
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -