// First/Last step packet decrypt/encrypt
//////
void __fastcall Decrypt( BYTE * Buffer )
{
int i;
WORD Seed = ((PAPI_PACKET)Buffer)->CryptSeed;
if (!((PAPI_PACKET)Buffer)->CryptVer)
return;
for( i = 0xFE; i > 0xBD; i-- )
{
Seed -= *(WORD*)(Buffer + i) ^ i;
Seed = (Seed << 0x0F) | (Seed >> 0x01);
*(WORD*)(Buffer + i) += Seed;
}
for( i = 0xB8; i >= 0; i-- )
{
Seed += *(WORD*)(Buffer + i) ^ i;
Seed = (Seed << 0x0F) | (Seed >> 0x01);
*(WORD*)(Buffer + i) -= Seed;
}
((PAPI_PACKET)Buffer)->CryptSeed = Seed;
}
//////////////////////////////////
void __fastcall Encrypt( BYTE * Buffer )
{
int i;
WORD Seed = ((PAPI_PACKET)Buffer)->CryptSeed;
if (!((PAPI_PACKET)Buffer)->CryptVer)
return;
for( i = 0; i < 0xB9; i++ )
{
*(WORD*)(Buffer + i) += Seed;
Seed = (Seed >> 0x0F) | (Seed << 0x01);
Seed -= *(WORD*)(Buffer + i) ^ i;
}
for( i = 0xBE; i < 0xFF; i++ )
{
*(WORD*)(Buffer + i) -= Seed;
Seed = (Seed >> 0x0F) | (Seed << 0x01);
Seed += *(WORD*)(Buffer + i) ^ i;
}
((PAPI_PACKET)Buffer)->CryptSeed = Seed;
}
[课程]FART 脱壳王!加量不加价!FART作者讲授!