代码:
#include <windows.h> void Gen(char *szName,char *szCode) { typedef struct _SHA_CTX { DWORD Unknown[6]; DWORD State[5]; DWORD Count[2]; BYTE Buffer[64]; } SHA_CTX, *PSHA_CTX; typedef void (WINAPI* PSHAInit)(SHA_CTX *ctx); typedef void (WINAPI* PSHAUpdate)(SHA_CTX *ctx,BYTE *buf,DWORD len); typedef void (WINAPI* PSHAFinal)(SHA_CTX *ctx,BYTE *res); char szTmp[0x200]; SHA_CTX context; BYTE digest[0x20]; wsprintf(szTmp,"%sf***Tencent",szName); GetVolumeInformation("C:\\",NULL,NULL,(DWORD *)&szTmp[strlen(szName)],NULL,NULL,NULL,NULL); HINSTANCE hDLL = LoadLibrary("advapi32.dll"); PSHAInit SHAInit = (PSHAInit)GetProcAddress(hDLL,"A_SHAInit"); PSHAUpdate SHAUpdate = (PSHAUpdate)GetProcAddress(hDLL,"A_SHAUpdate"); PSHAFinal SHAFinal = (PSHAFinal)GetProcAddress(hDLL,"A_SHAFinal"); SHAInit(&context); context.State[0] = 0xB1CAB1CA; context.State[1] = 0xCCBFCCBF; context.State[2] = 0xBFB2D6BE; context.State[3] = 0xF8C7D8B5; context.State[4] = 0xEEC7BCCD; SHAUpdate(&context,(BYTE *)szTmp,strlen(szName)+11); SHAFinal(&context,digest); UINT64 t; int i,j; char *ta = "ABCDEFGHJKMNPQRSTVWXYZ1234567890"; for (i=0;i<4;i++) { t = 0; for (j=0;j<5;j++) { t <<= 8; t += digest[i*5+j]; } for (j=0;j<8;j++) { szCode[i*9+j] = ta[(*((DWORD *)&t+1)>>3)&0x1F]; t <<= 5; } szCode[i*9+8] = '-'; } szCode[0x23] = 0; }