para ferrarezi y zteam usan este metodo [Somente membros podem ver os links. ] simplemente es xor, por lo que si el metodo para "desencriptar" esta en el source de la dll del cliente se puede usar para crear el encoder.
esta la de zteam
Código:
void ScriptEncode::Encode(char* buffer, int size){
// ----
int i;
for (i=0;i<size; i++)
{
buffer[i]=buffer[i]^XorTableLock[i%3];
}
// ----
}
y esta es la de ferrarezi
Código:
bool CProtect::CheckSumLoad(char* filename)
{
if(this->SetBuffer(filename) == 0)
{
return 0;
}
int n;
memcpy(&this->WindowName,&this->m_buff[0],32);
memcpy(&this->ScreenShot,&this->m_buff[32],128);
memcpy(&this->ServerIP,&this->m_buff[160],15);
memcpy(&this->Login,&this->m_buff[175],15);
memcpy(&this->Instances,&this->m_buff[190],1);
memcpy(&this->CSPortChar,&this->m_buff[191],5);
memcpy(&this->RFbt,&this->m_buff[196],1);
memcpy(&this->Serial,&this->m_buff[197],16);
memcpy(&this->MainCRCchar,&this->m_buff[213],8);
for(n=0; n < 32; n++)
{
this->WindowName[n] ^= 0xD6;
}
for(n=0; n < 128; n++)
{
this->ScreenShot[n] ^= 0xC3;
}
for(n=0; n < 15; n++)
{
this->ServerIP[n] ^= 0xB1;
}
for(n=0; n < 15; n++)
{
this->Login[n] ^= 0xA8;
}
this->Instances[0] ^= 0x65;
for(n=0; n < 5; n++)
{
this->CSPortChar[n] ^= 0x91;
}
this->CSPort = atoi(this->CSPortChar);
this->RFbt[0] ^= 0x73;
for(n=0; n < 17; n++)
{
this->Serial[n] ^= 0xA9;
}
for(n=0; n < 8; n++)
{
this->MainCRCchar[n] ^= 0xD3;
}
this->MainCRC = strtoul(this->MainCRCchar,NULL,16);
return 1;
}
la unica diferencia es que zteam usa una clave comun para todos los archivos, mientras que ferrarezi usa una especifica para cada variable pero en si el concepto es el mismo.
si le aplicas esta clave a una linea de texto te genera la linea encriptada y si la aplicas a la que esta encriptada te genera la linea desencriptada, algo asi para explicarlo de una manera sencilla.