⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msnp11chl.cpp

📁 MSN8.0客户端回复服务器ping的最新认证算法
💻 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 + -