代码已经贴在三楼
- 标 题:提取一段简易的算法
- 作 者:eGirlAsm
- 时 间:2010-10-13 02:05:41
- 链 接:http://bbs.pediy.com/showthread.php?t=122146
代码已经贴在三楼
从机动车驾驶人考试培训系统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;
}