BMWX6
AG епты
на руках есть сырцы срр, стал переносить на пхп
вот что имею на пхп
может кто-то помочь?
PHP:
void subdecrypt(uint32* dataPtr)
{
const uint32 cryptTable[]={0x87F8456B, 0x4079AA66, 0x97C1D703, 0x0AFA730FE};
unsigned int var10; // [sp+8h] [bp-10h]@1
unsigned int key; // [sp+Ch] [bp-Ch]@1
unsigned int var4; // [sp+14h] [bp-4h]@1
unsigned int var14; // [bp-14h]
var4 = *dataPtr;
var10 = *(dataPtr+1);
var14 = 0x9E3779B9;
key = var14*15;
for(int p=0;p<15;p++){
var10-=(var4 +((var4 << 4)^(var4 >> 5)))^(key+cryptTable[(key >> 11) & 3]);
key -= var14;
var4-=(var10 +((var10 << 4)^(var10 >> 5)))^(key+cryptTable[key & 3]);
};
*dataPtr = var4;
*(dataPtr+1) = var10;
}
void decrypt(int xorKey, int size, uint8 *p_data)
{
// int result; // eax@10
int k; // [sp+4h] [bp-1Ch]@7
int j; // [sp+8h] [bp-18h]@4
int i; // [sp+Ch] [bp-14h]@1
signed int v7; // [sp+14h] [bp-Ch]@4
for ( i = 0; i < size / 8; ++i )
subdecrypt((uint32*)(p_data+8 * i));
v7 = size >> 1;
for ( j = 1; j < v7 - 2; j += 2 )
*(uint16*)(p_data+2 * j) ^= (uint16)j ^ *(uint16*)(p_data+2 * j + 4);
for ( k = v7 - 2; k; k -= 2 )
*(uint16 *)&p_data[2 * k] ^= (uint16)k ^ *(uint16 *)(p_data+2 * k - 4);
*(uint32 *)p_data ^= xorKey;
}
#необходимые куски
decrypt(15,blockSize-8,dataBlock+3);
uint16 commandCode;//0x04 - select game, 0x5 -return to title, 0x6 - stop request
PHP:
function subdecrypt($dataPtr)
{
$cryptTable = array(0x87F8456B, 0x4079AA66, 0x97C1D703, 0x0AFA730FE);
$var4 = ord($dataPtr);
$var10 = ord($dataPtr[1]);
$var14 = 0x9E3779B9;
$key = $var14*15;
for($p = 0; $p < 15; $p++)
{
$var10-=($var4 +(($var4 << 4)^($var4 >> 5)))^($key+$cryptTable[($key >> 11) & 3]);
$key -= $var14;
$var4 -=($var10 +(($var10 << 4)^($var10 >> 5)))^($key+$cryptTable[$key & 3]);
}
return chr($var4).chr($var10);
}
$read = substr($read, 3);
for($i = 0; $i < floor(strlen($read)/8); $i++)
{
$subdec = subdecrypt(substr($read, 8*$i, 2));
$read = substr($read, 0, 8*$i).$subdec.substr($read, 8*$i +2);
}
$v7 = strlen($read) >> 1;
for ( $j = 1; $j < $v7 - 2; $j += 2 )
{
$num = ord($read[2*$j+4])+(ord($read[2*$j+5]) << 8);
$left = ord($read[2*$j])+(ord($read[2*$j+1]) << 8);
$left ^= $num;
$read = substr($read, 0, 2*$j).chr($left&0xFF).chr($left >> 8).substr($read, 2*$j +2);
}
for ( $k = $v7 - 2; $k; $k -= 2 )
{
$num = ord($read[2*$k-4])+(ord($read[2*$k-3]) << 8);
$left = ord($read[2*$k])+(ord($read[2*$k+1]) << 8);
$left ^= $num;
$read = substr($read, 0, 2*$k).chr($left&0xFF).chr($left >> 8).substr($read, 2*$k +2);
}
$read = chr(ord($read)^15).substr($read, 1);
$ccode = ord($read[6])+(ord($read[7]) << 8);
echo $ccode;