Кто то в курсе, алгоритм построения таблицы для обфускатора в клиенте одинаков для разных хроник? У меня периодически проскакивает ошибка, тоесть обфускатор на сервере не правильно декодирует значение при id == 0xD0
PHP код:
private void prepare(int obfKey)
{
_obfKey = obfKey;
int l = 0;
m_decodeTable1 = new int[0xD0 + 1];
m_decodeTable2 = new int[0x83 + 1];
for (int i = 0; i <= 0xD0; ++i)
m_decodeTable1[i] = i;
for (int i = 0; i <= 0x83; ++i)
m_decodeTable2[i] = i;
pseudo_rand_seed(obfKey);
for (int i = 1; i <= 0xD0; ++i)
{
int k = pseudo_rand() % (i + 1);
int j = m_decodeTable1[k];
m_decodeTable1[k] = m_decodeTable1[i];
m_decodeTable1[i] = j;
}
for (int i = 1; i <= 0x83; ++i)
{
int k = pseudo_rand() % (i + 1);
int j = m_decodeTable2[k];
m_decodeTable2[k] = m_decodeTable2[i];
m_decodeTable2[i] = j;
}
for (l = 0; m_decodeTable1[l] != 0x12; l++);
int j = m_decodeTable1[0x12];
m_decodeTable1[0x12] = 0x12;
m_decodeTable1[l] = j;
for (l = 0; m_decodeTable1[l] != 0xB1; l++);
int d = m_decodeTable1[0xB1];
m_decodeTable1[0xB1] = 0xB1;
m_decodeTable1[l] = d;
m_decodeTable1[0xD0] = 0xD0;
m_decodeTable1[0x11] = 0x11;
m_enabled = true;
}
у некоторых пакетов ID не меняется. например NetPing.
если верить этому коду, то у пакетов с ID D0 он тоже остается неизменным, а это не верно.
хорошо просматривается в пакетхаке со снятой галкой "Gracia Off-like"
"осилю" код обфускатора "на повторить" буду разбираться что к чему, пока только догадки...
p.s. спасибо за наводку на исходник
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...
а я не могу понять как формируется ключ для построения таблицы опкодов..
ключик есть и в KeyPacket и в CharSelected, а как формируется конечный не ясно..
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...
Последний раз редактировалось Elecktron, 22.09.2012 в 18:38.