代码已经贴在三楼

  • 标 题:答复
  • 作 者:eGirlAsm
  • 时 间:2010-10-13 02:42:11

机动车驾驶人考试培训系统2010(速成版)提取出来的算法

这里感谢一下 Crack Online DDK 群里的 fvlkejr  教了我一个函数 strtol  原先不知道 有这样的函数 呵呵


加密部分

代码:
BOOL Xor_Crypt(LPSTR Crypted,size_t  nBuffSize,LPSTR SourceChar,LPSTR sKey)
{
  char TempChar[255];
  int InitNum = 0xA7;
  int DataLen = strlen(SourceChar);
  int nKeyLen = strlen(sKey);
  int nIndex = 0;
  BYTE TempNum = 0;

  RtlZeroMemory(Crypted,nBuffSize);

  for(int i= 0;i< DataLen;i++)
  {
    //sprintf_s(TempChar,"%02X",InitNum);
    sprintf_s(TempChar,255,"%02X",InitNum);
    StrCat(Crypted,TempChar);
    TempNum = (SourceChar[i] + InitNum) % (signed int)0xFFu;
    if(nIndex >= nKeyLen) nIndex = 0;
    InitNum = sKey[nIndex] ^ TempNum;
    nIndex++;
  }

  //sprintf(TempChar,"%02X",InitNum);
  sprintf_s(TempChar,255,"%02X",InitNum);
  StrCat(Crypted,TempChar);

  return TRUE;
}

解密部分

代码:
BOOL Xor_DeCrypt(char * DeCrypted,size_t nBuffSize,char *SourceChar,char * sKey)
{
  char sMidKey[4];
  RtlZeroMemory(sMidKey,4);
  RtlCopyMemory(sMidKey,SourceChar,2);//首先取出来密钥
  int nMidKey = strtol(sMidKey,NULL,16);//转换成十六进制
  int TempNum = 0;
  int SourceLen = strlen(SourceChar);
  int nKeyLen = strlen(sKey);
  RtlZeroMemory(DeCrypted,nBuffSize); 
  BYTE b_Result = 0;
  char szResults = 0x00;
  int nIndex =0;
  int DeCryptCharIndex = 0;
  for(int i = 2;i < SourceLen;i+=2)
  {
    RtlZeroMemory(sMidKey,4);
    RtlCopyMemory(sMidKey,SourceChar+i,2);
    TempNum = strtol(sMidKey,NULL,16); 
    if(nIndex >= nKeyLen) nIndex = 0;   
    b_Result = sKey[nIndex] ^ TempNum;
    if (b_Result > nMidKey )
      szResults = b_Result - nMidKey;
    else
      szResults = b_Result + 0xFF - nMidKey;
    DeCrypted[DeCryptCharIndex] = szResults;
    nMidKey = TempNum;
    nIndex++;
    DeCryptCharIndex++;
  }

  return TRUE;
}
上传的附件 CrackSoftTest.rar