А что ты хочешь получить этой командой?
это же всеравно, что temp2:= pck[i]
эт не я, а господин TechnoWiz@rd, просто портировал как есть.
в Си & это вроде And
....
for( unsigned int i = 0; i < len; ++i ) { int temp2 = data[i] & 0xff;
....
кто в Си шарит, разясните плиз, что этим хотели сделать?
Последний раз редактировалось alexsl, 06.06.2008 в 20:42.
Кстати, цикличность в моем случае появится при условии что ключ - 16 байт, а похоже так оно и есть
не думаю, алгоритм шифрации по идее не должны кординально менять (т.к. возможны глюки), посмотри как реализовано по умолчанию.
кстати вот кусок "стандартной" шифрации, подробно описано.
Автор: TechnoWiz@rd
Цитата:
Пакеты сервера авторизации шифруются по алгоритму Blowfish. Стандартный ключ по умолчанию в 4-х хрониках:
5F 3B 35 2E 5D 39 34 2D 33 31 3D 3D 2D 25 78 54 21 5E 5B 24. К концу ключа прибавляется символ с кодом 0. В Interlude тип шифрования был изменен - пакет
Init содержит динамический Blowfish ключ случайно генерируемый для каждого клиента. Этот пакет сначала шифруется по алгоритму XOR(ключ генерируется
случайным образом и помещается в конце пакета), а потом шифруется по алгоритму Blowfish, статическим ключом. По умолчанию статический ключ -
6B 60 CB 5B 82 CE 90 B1 CC 2B 6C 55 6C 6C 6C 6C. Все последующие пакеты будут шифроваться динамическим Blowfish ключом. Пакет LoginRequest дополнительно
шифруется по алгоритму RSA. Ключ состоит из следующих частей: B = 1024, E = 65537, N = передается в пакете Init. Вместе эти 3 части составляют целый RSA
ключ. Байты N в пакете зашифрованы функцией:
Также есть сервера использующие старый протокол авторизации(ревизия 785a) который не шифрует пакет Init, а остальные шифрует Blowfish
ключом длинной 21 байт. При этом пакет LoginRequest шифруется только по алгоритму Blowfish, без дополнительного шифрования RSA.
Для шифрования пакетов гейм сервера используется алгоритм XOR. Ключ XOR генерируется случайно и передается клиенту в пакете CryptInit. Функции
шифрования и дешифрации приведены ниже:
Код:
/* Декодирует данные */
void decrypt( unsigned char *data, unsigned int len, unsigned char *Key )
{
int temp = 0;
for( unsigned int i = 0; i < len; ++i ) {
int temp2 = data[i] & 0xff;
data[i] = (temp2 ^ (Key[i & 15] & 0xff) ^ temp);
temp = temp2;
};
int old = Key[8] & 0xff;
old |= (Key[9] << 0x08) & 0xff00;
old |= (Key[10] << 0x10) & 0xff0000;
old |= (Key[11] << 0x18) & 0xff000000;
old += len;
Key[8] = old &0xff;
Key[9] = (old >> 0x08) & 0xff;
Key[10] = (old >> 0x10) & 0xff;
Key[11] = (old >> 0x18) & 0xff;
};
/* Кодирует данные */
void encrypt( unsigned char *data, unsigned int len, unsigned char *Key )
{
int temp = 0;
for( unsigned int i = 0; i < len; i++) {
int temp2 = data[i] & 0xff;
data[i] = (temp2 ^ (Key[i & 15] & 0xff) ^ temp);
temp = data[i];
};
int old = Key[8] & 0xff;
old |= (Key[9] << 0x08) & 0xff00;
old |= (Key[10] << 0x10) & 0xff0000;
old |= (Key[11] << 0x18) & 0xff000000;
old += len;
Key[8] = old &0xff;
Key[9] = (old >> 0x08) & 0xff;
Key[10] = (old >> 0x10) & 0xff;
Key[11] = (old >> 0x18) & 0xff;
};
С каждым кодированным/декодированным пакетом ключ изменяется на длину пакета
имхо, после этого момента
Код:
int old = Key[8] & 0xff;
old |= (Key[9] << 0x08) & 0xff00;
old |= (Key[10] << 0x10) & 0xff0000;
old |= (Key[11] << 0x18) & 0xff000000;
old += len;
Key[8] = old &0xff;
Key[9] = (old >> 0x08) & 0xff;
Key[10] = (old >> 0x10) & 0xff;
Key[11] = (old >> 0x18) & 0xff;
и добавляются какието махинации с ключами.
удачи
Последний раз редактировалось alexsl, 06.06.2008 в 14:35.
Может стоит разные фришарды в разных топиках исследовать? По моему каша будет если дальше так пойдет.
думаю.. да.. надо.. но возникает сразу вопрос.. в том что если ломать в отдельном топе шард- общеизвестный общими усилиями то при любом прорыве в зломе шифрации ето сразу станет известно админам шарда которые ежесекундно сменят шифр.. выход вижу тока в подполье.. хотя ето сделает наш форум более скучным, закрытым.. ето не интересно будет.. как же поступить?
Добавлено через 1 минуту
как щас есть- оставлять- тоже не дело...
людей надо рассортировать по интересам к каждому серваку.. в одну кашу все серваки мешать нельзя ето бардак.. но как ето сделать?
__________________
Цитата:
Сообщение от pybukon
прежде чета попросить я немнога раскажу чтоб вы понили как мне плоха
Цитата:
Сообщение от Byrger
А как сделать мой скрипт бесконечным?
Цитата:
Сообщение от XKOR
.. каждый день ионизированной ногой протирает больную)
Цитата:
Сообщение от PsyR
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами
Последний раз редактировалось VORON, 12.06.2008 в 15:59.
Причина: Добавлено сообщение
ухх.. еслиб я мог всё...
я свою новую шифрацию никак осилить не магу.. хотя уже наверно и небуду осилять ее.. ушел на другой шард..
но вижу что тут куча логов развелось с разных шардов и каждый ждет помощи ето все осмыслить и каждому чемто помоч конечноже модеры невсилах.. поетому надо както разделять топ по сервакам чтоб несколько людей объединять общей задачей..
сам посуди скока я времени портратил на то чтоб решить вопрос с шардом описываемым на 6-ти листах етого топа.. с одного лога ниче толком и невыцедиш да и заниматься етим мало кому интересно.. надо разделять топик по названиям серваков.. ждем подраздела от XKORа.. там потихоньку самымые популярные сервера будут обдумываться людьми которые в етом заинтересованы сами
__________________
Цитата:
Сообщение от pybukon
прежде чета попросить я немнога раскажу чтоб вы понили как мне плоха
Цитата:
Сообщение от Byrger
А как сделать мой скрипт бесконечным?
Цитата:
Сообщение от XKOR
.. каждый день ионизированной ногой протирает больную)
Цитата:
Сообщение от PsyR
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами
Модераторы не могут создать подраздел, надо Xkor`а попросить.
Чем могут админы лично тебе навредить? Вообще по защите своего сервера понятно, но ведь и так найдут, они же знают что искать.
var key: integer;
procedure OnCreate;
begin
gSys.ALstart:=false;
end;
procedure OnDestroy;
begin
end;
begin
if _gAbsNumPkt=2 then
begin
key:=gSys.Kco xor $FFFFFFFF;
gSys.Ksi:=key;
gSys.Kso:=key;
end;
end.