PDA

Просмотр полной версии : Помогите с протоколом la2


glukmaker
11.10.2011, 20:18
Не могу разобраться в протоколе линейки.
Нашел описание. http://www.mmocom.ru/showthread.php?t=1760
Экспериментирую, но нифига не получается...

вобщем читаю:
Порядок авторизации на логин сервере

Во первых сразу замечу что существует две ревизии протокола использующиеся на данный момент(может и больше но мне о них не известно) - c621 и 785a.
Отличие их в том что в c621 используется дополнительное шифрование и авторизация GameGuard. Пакеты Init и RequestAuthLogin также отличаются.
Определить версию можно по размеру пакета Init, для ревизии 785a он составляет 11 байт, для c621 – 170.

1. Сразу после установки соединения сервер отправляет клиенту пакет Init
2. В ответ на него клиент отправляет пакет RequestGGAuth(в ревизии протокола 785a этот пакет не высылается)
3. Сервер отвечает на него пакетом GGAuth (в ревизии протокола 785a этот пакет не высылается)
4. Если сервер ответил, что авторизация прошла успешно, то клиент высылает пакет RequestAuthLogin, содержащий логин и пароль.
5. Проверка логина и пароля, в случае неудачи, сервер высылает пакет LoginFail содержащий причину неудачи, инатче высылается пакет LoginOk, содержащий session key #1.
6. Далее клиент запрашивает список серверов пакетом RequestServerList
7. В ответ на этот пакет сервер высылает клиенту ServerList, в нем содержиться список серверов и их IP адреса с номерами портов.
8. После выбора game-сервера, и нажатия на ОК, клиент отсылает пакет RequestServerLogin
9. Сервер авторизации выполняет проверки на максимальное количество игроков, доступность сервера и т.п., если все проверки пройдены, то высылает пакет PlayOk,содержащий session key #2, этот ключь генерируется из текущего времени системы в мс, номера сокета и еще всякой лабуды. После этого клиент отключается от логин сервера и подключается к гейм серверу.


Подключаюсь к серверу авторизации. Сервер мне выдает 11 байт:

0B 00 00 BC 19 4C 77 5A 78 00 00
в которых видно, что ревизия 785a
т.е. 2 и 3 пункты нам не нужны.
далее я формирую и отправляю пакет RequestAuthLogin с реальными данными.
Но сервер меня дисконектит...

Согласно вот этого (взято с вышеуказанного сайта):
RequestAuthLogin
Назначение: запрашивает авторизацию на логин сервере
Формат для ревизии 0x785a:

Код:

00
XX XX XX XX 00 // строка содержащая логин. Имеет длинну 14 байт и храниться в формате ASCII а не UNICODE !!!
XX XX XX XX 00 // строка содержащая пароль. Имеет длинну 16 байт и храниться в формате ASCII а не UNICODE !!!
08 // маркер конца секции логин/пароль
00 00 00 00 // не используется
00 00 00 00 // не используется


Делаю так :

...
type TRequestAuthLogin = packed record
s1:byte;
login:packed array[1..14] of char;
pass:packed array[1..16] of char;
s2:byte;
s3:cardinal;
s4:cardinal;
end;
...
var
login:string='реальный логин';
password:string='реальный пароль';

...
procedure ... // процедура формирования и отправки пакета RequestAuthLogin
var
str:TRequestAuthLogin;
i: integer;
begin
str.s1:=0;
str.s2:=8;
str.s3:=0;
str.s4:=0;
for i:=1 to 14 do
if i>length(login)
then str.login:=chr(0)
else str.login[i]:=login[i];
for i:=1 to 16 do
if i>length(password)
then str.pass[i]:=chr(0)
else str.pass[i]:=password[i];
..... // Здесь отправляю сформированный пакет...
end;
...


Когда смотрю снифером, что отправляется на сервер при авторизации стандартным клиентом, то все равно не вижу там ничего похожего на свой логин и пароль в ASCII.

Что я неправильно делаю или что я неправильно понял в описании протокола?

[I]Добавлено через 46 минут
Поискал еще информацию.
Понял что забыл передавать размер пакета вначале, ну и как оказалось нужно все шифровать в Blowfish

У кого есть исходники Blowfish на Delphi ?

xkor
11.10.2011, 21:32
У кого есть исходники Blowfish на Delphi ?воспользуйся поиском, на этом форуме уже выкладывались

Добавлено через 9 минут
хм, сам найти не смог (вложения в найденых сообщениях уже затерялись) так что вот:
http://l2ph.coderx.ru/wsvn/filedetails.php?repname=l2phx3&path=%2FBlowFish.pas&rev=25&sc=1
http://l2ph.coderx.ru/wsvn/filedetails.php?repname=l2phx3&path=%2FBFconst.inc&rev=25&sc=1

glukmaker
12.10.2011, 12:19
За ссылки - спасибо.
Но все равно пока я ничего не добился... :(

Делал все так:
В модуле Blowfish исправил:
...
L2BlowFish = class
...

далее делаю так:
type TRequestAuthLogin = packed record
length:word;
case byte of
0:(
s1:byte;
login:packed array[1..14] of char;
pass:packed array[1..16] of char;
s2:byte;
s3:cardinal;
s4:cardinal;
checksum:cardinal;
s5:cardinal;
);
1: (
buf:packed array[1..48] of byte; // для удобства криптования
);
2: (
fch:packed array[1..12] of cardinal; // для удобства вычисления сhecksum
)
end;
...

var
...
login:string='testlogin';
password:string='testpass';

const
Token:string=#$5F#$3B#$35#$2E#$5D#$39#$34#$2D#$33# $31#$3D#$3D#$2D#$25#$78#$54#$21#$5E#$5B#$24#$00;

...



function CheckSum(data:array of cardinal):cardinal;
var
i:integer;
begin
result:=0;
for i:=low(data) to high(data) do Result:=result xor data;
end;



procedure TForm1.Button3Click(Sender: TObject);
var
str:TRequestAuthLogin;
var i: integer;
begin
str.length:=SIZEOF(str);
str.s1:=0;
str.s2:=8;
str.s3:=0;
str.s4:=0;
for i:=1 to 14 do
if i>length(login)
then str.login[i]:=chr(0)
else str.login[i]:=login[i];
for i:=1 to 16 do
if i>length(password)
then str.pass[i]:=chr(0)
else str.pass[i]:=password[i];
str.checksum:=0;
str.s5:=0;
showdata(str, sizeof(str));
str.checksum:=CheckSum(str.fch);
showdata(str, sizeof(str));

With L2BlowFish.Create do
try
Init(Token,length(Token));
bfEncode(str.buf,length(str.buf));
finally
free;
end;

showdata(str, sizeof(str)); // отображение пакета в мемо

ClientSocket1.Socket.SendBuf(str,sizeof(str));
end;


Получается:
Сформированный пакет:
32 00 00 74 65 73 74 6C 6F 67 69 6E 00 00 00 00
00 74 65 73 74 70 61 73 73 00 00 00 00 00 00 00
00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00

Добавлена checksum:
32 00 00 74 65 73 74 6C 6F 67 69 6E 00 00 00 00
00 74 65 73 74 70 61 73 73 00 00 00 00 00 00 00
00 08 00 00 00 00 00 00 00 00 19 76 0D 18 00 00
00 00

Зашифровано BlowFish:
32 00 E1 AC FE 48 16 7F 8A 9B 31 06 F1 1B 6A 2E
82 05 7A DE 27 3E 85 7D E9 68 2B 22 2D EF 7B 76
1F 2F 41 C5 1A 43 EE E2 02 77 52 DF 15 33 46 C5
6B 5C

И все равно сервер ничего мне не присылая рвет соединение.

Вот что показывает снифер (тут правда с IP и ТСP-заголовками):
Вот, что получается, если работать с клиентом, вводя те же логин и пароль:

Packet ID: 13 TTL: 119
Packet size: 51 bytes type: TCP
Source IP : 195.42.69.24: 2106
Destination IP : 10.11.3.11: 3257
------------------------------ Packet dump -----------------------------------
000000 45 00 00 33 77 30 00 00 | 77 06 B7 3C C3 2A 45 18 E..3w0..w..<.*E.
000010 0A 0B 03 0B 08 3A 0C B9 | DF C4 C6 17 5B 6E 00 0B .....:......[n..
000020 50 18 FD 20 83 0B 00 00 | 0B 00 00 32 13 67 6D 5A P.. .......2.gmZ
000030 78 00 00 x..


================================================== ============================
Packet ID: 14 TTL: 128
Packet size: 90 bytes type: TCP
Source IP : 10.11.3.11: 3257
Destination IP : 195.42.69.24: 2106
------------------------------ Packet dump -----------------------------------
000000 45 00 00 5A 3D 34 40 00 | 80 06 A8 11 0A 0B 03 0B E..Z=4@.........
000010 C3 2A 45 18 0C B9 08 3A | 5B 6E 00 0B DF C4 C6 22 .*E....:[n....."
000020 50 18 FF F4 4F 78 00 00 | 32 00 C0 C8 F0 18 F0 10 P...Ox..2.......
000030 1E 9C 21 DD 8D 8D 64 24 | 8B 52 66 20 26 8A DE BF .!...d$.Rf &...
000040 83 96 43 C6 34 40 6D AE | 0A 76 41 61 6F 5C 4B BD ..C.4@m..vAao\K.
000050 6F A5 C2 AA 4D DA FE 17 | 4A 27 o...M...J'

================================================== ================================

А это получается, если я вручную формирую и отправляю:

Packet ID: 5 TTL: 119
Packet size: 51 bytes type: TCP
Source IP : 195.42.69.24: 2106
Destination IP : 10.11.3.11: 3263
------------------------------ Packet dump -----------------------------------
000000 45 00 00 33 25 9C 00 00 | 77 06 08 D1 C3 2A 45 18 E..3%...w....*E.
000010 0A 0B 03 0B 08 3A 0C BF | 31 27 7F EA 49 7F CC 06 .....:..1'.I..
000020 50 18 FD 20 1B BF 00 00 | 0B 00 00 C7 0F D7 12 5A P.. ..........Z
000030 78 00 00 x..


================================================== ============================
Packet ID: 6 TTL: 128
Packet size: 40 bytes type: TCP
Source IP : 10.11.3.11: 3263
Destination IP : 195.42.69.24: 2106
------------------------------ Packet dump -----------------------------------
000000 45 00 00 28 3D 99 40 00 | 80 06 A7 DE 0A 0B 03 0B E..(=.@.........
000010 C3 2A 45 18 0C BF 08 3A | 49 7F CC 06 31 27 7F F5 .*E....:I..1'.
000020 50 10 FF F4 BE EB 00 00 P.......


================================================== ============================
Packet ID: 7 TTL: 128
Packet size: 90 bytes type: TCP
Source IP : 10.11.3.11: 3263
Destination IP : 195.42.69.24: 2106
------------------------------ Packet dump -----------------------------------
000000 45 00 00 5A 3D 9A 40 00 | 80 06 A7 AB 0A 0B 03 0B E..Z=.@.........
000010 C3 2A 45 18 0C BF 08 3A | 49 7F CC 06 31 27 7F F5 .*E....:I..1'.
000020 50 18 FF F4 90 FA 00 00 | 32 00 E1 AC FE 48 16 7F P.......2....H.
000030 8A 9B 31 06 F1 1B 6A 2E | 82 05 7A DE 27 3E 85 7D ..1..j...z.'>.}
000040 E9 68 2B 22 2D EF 7B 76 | 1F 2F 41 C5 1A 43 EE E2 .h+"-.{v/A.C..
000050 02 77 52 DF 15 33 46 C5 | 6B 5C .wR..3F.k\


Как видно, пакеты от меня и от клиента отличаются.
Похоже, я снова делаю что-то неправильно...
так как впервые я заинтересовался протоколом ла2 (со вчерашнего дня) , то не знаю даже в чем проблема.
Помогите, кто может...

[I]Добавлено через 9 минут
Вобщем скорее всего тут одно из двух:
1. Я неправильно криптую пакет.
2. Я неправильно вычисляю контрольную сумму.

Насчет контрольной суммы, делаю так, как прочитал на одном из форумов:


До этапа шифрования в исходящие пакеты добавляется чексумма:
Из данных поочерёдно отделяются 32-битные слова. Первое XOR'ится со вторым. Результат этой операции XOR'ится со следующим словом и так далее.

xkor
12.10.2011, 15:31
glukmaker, ты бы пакет от клиента дешифровать попробовал, зачем на сервер слать не разобравшись правильно ли шифруешь?

SeregaZ
12.10.2011, 17:30
я тоже свое 5 копеек хочу внести :)

защиты на сервере и в клиенте точно нет? если есть, то помимо пакетов может слаться на сервер информация о железе.

glukmaker
13.10.2011, 18:23
glukmaker, ты бы пакет от клиента дешифровать попробовал, зачем на сервер слать не разобравшись правильно ли шифруешь?

Уже пробовал. Не могу расшифровать... Похоже что токен на сервере не "стандартный", и я его не знаю.

сервер c4 http://la2.draconic.ru

пробовал узнать токен с помощью EngExt_ME.exe - получаю Unknown ENGINE.DLL format.

Можно было бы спросить у местных ботоводов, но навряд-ли кто-то признается в том, что он ботами пользуется...

А у меня вобще-то конечная цель - получить доступ к альянсовому чату.

Добавлено через 1 час 13 минут
Все. Проблема была в токене.:yahoo:
Скачал Walker Patcher, правда он мне аж 5 токенов выдал.
Но методом расшифровки пакета, посылаемого клиентом я нашел из них нужный.

Вобщем с отсылкой пакета RequestAuthLogin уже все ясно... Теперь пошел читать описание протокола и пытаться по нему лезть дальше.




================================================== =======================================

Добавлено через 22 часа 21 минуту
Проблемы с сервером авторизации успешно преодолены.
Теперь я могу авторизоваться и получать SessionKey2

Теперь вторая часть (работа с гейм-сервером):

Согласно найденному в инете:
После установки соединения, клиент высылает пакет ProtocolVersion, содержащий версию протокола.

Но, в одном источнике описание такое:
00
XX XX XX XX // Версия протокола

В другом такое:
ProtocolVersion

Формат:
07 01 // Длина
00 // Тип
XX XX XX XX // ProtocolVersion
[далее идет массив-константа, который хз от чего зависит, у меня он такой:]
09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02
55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53
00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04
54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56
56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04
07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05
52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02
04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51
55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05
08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07
53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02
53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01
05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06
01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01
04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D
01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06

что на самом деле правильно?
И что подразумевается под ProtocolVersion? Значение, которое мы получили в пакете Init от логин-сервера? Или что-то другое?

SeregaZ
13.10.2011, 22:40
я так понимаю это исходящий пакет?
попробуй вытащить планку памяти, или добавь жесткий диск, или отключить сидиром, а лучше все вместе и посмотри на эту константу. я думаю она изменится :)

alexteam
13.10.2011, 22:49
что на самом деле правильно?
пх попробуй подцепить к клиенту. и смотри что нужно слать.

зы. опять же. в случае если нет дополнительный криптовки траффика.
зы2. за пх могут посадить в бан.

glukmaker
13.10.2011, 23:33
Проснифал, что клиент отправляет:
================================================== ============================
Packet ID: 32 TTL: 128
Packet size: 303 bytes type: TCP
Source IP : 192.168.128.10: 3098
Destination IP : 195.42.69.24: 7777
------------------------------ Packet dump -----------------------------------
000000 45 00 01 2F BC 8A 40 00 | 80 06 F4 48 C0 A8 80 0A E../..@....H....
000010 C3 2A 45 18 0C 1A 1E 61 | 33 DA C5 3A 6E 52 01 CE .*E..a3..:nR..
000020 50 18 FF FF C1 B4 00 00 | 07 01 00 90 02 00 00 09 P...............
000030 07 54 56 03 09 0B 01 07 | 02 54 54 56 07 00 02 55 .TV......TTV...U
000040 56 00 51 00 53 57 04 07 | 55 08 54 01 07 01 53 00 V.Q.SW..U.T...S.
000050 56 55 56 01 06 05 04 51 | 03 08 51 08 51 56 04 54 VUV....Q..Q.QV.T
000060 06 55 08 02 09 51 56 01 | 53 06 55 04 53 00 56 56 .U...QV.S.U.S.VV
000070 53 01 09 02 09 01 51 54 | 51 09 55 56 09 03 04 07 S.....QTQ.UV....
000080 05 55 04 06 55 04 06 09 | 04 51 01 08 08 06 05 52 .U..U....Q.....R
000090 06 04 01 07 54 03 06 52 | 55 06 55 55 51 01 02 04 ....T..RU.UUQ...
000100 54 03 55 54 01 57 51 55 | 05 52 05 54 07 51 51 55 T.UT.WQU.R.T.QQU
000110 07 02 53 53 00 52 05 52 | 07 01 54 00 03 05 05 08 ..SS.R.R..T.....
000120 06 05 05 06 03 00 0D 08 | 01 07 09 03 51 03 07 53 ............Q..S
000130 09 51 06 07 54 0A 50 56 | 02 52 04 05 55 51 02 53 .Q..T.PV.R..UQ.S
000140 00 08 54 04 52 56 06 02 | 09 00 08 03 53 56 01 05 ..T.RV......SV..
000150 00 55 06 08 56 04 0D 06 | 07 52 06 07 04 0A 06 01 .U..V....R......
000160 04 54 04 00 05 02 04 54 | 00 09 52 53 05 04 01 04 .T.....T..RS....
000170 05 05 01 52 51 52 0D 06 | 51 08 09 54 53 00 0D 01 ...RQR..Q..TS...
000180 02 03 54 53 01 05 03 08 | 56 54 07 02 54 0B 06 ..TS....VT..T..

Похоже, что этот непонятный массив у меня совпадает с тем, который приводил в примере неизвестный мне человек.
Некоторые говорят, что можно вообще нули отправить и сервер это нормально примет.

Но остается вопрос насчет ProtocolVersion. Из дампа видно что это: 90 02 00 00 (если в десятичную систему перевести то получается 656).
Объясните физический смысл этого параметра?

andrewcik
14.10.2011, 00:21
а что такое токен? можно ли его узнать если есть сам сервак или он генерируется уникально для клиента?

и что насчёт RSA шифрования? в каких пакетах оно применяется?

кстати сделал всё как тут описывается и получил ответ логин сервера: wrong checksum from client [192.168.1.XXX]
пробовал на серваке HFive

вот кусок кода сервера на java, который раскодировывает пакет RequestAuthLogin:

Cipher rsaCipher = Cipher.getInstance("RSA/ECB/nopadding");
rsaCipher.init(2, client.getRSAPrivateKey());
decrypted = rsaCipher.doFinal(this._raw, 0, 128);
this._user = new String(decrypted, 94, 14).trim();
this._user = this._user.toLowerCase();
this._password = new String(decrypted, 108, 16).trim();
this._ncotp = decrypted[124];
this._ncotp |= decrypted[125] << 8;
this._ncotp |= decrypted[126] << 16;
this._ncotp |= decrypted[127] << 24;


из этого следует вроде что пакет составлен неверно, да?

xkor
14.10.2011, 01:33
Объясните физический смысл этого параметра?это версия протокола на клиенте

andrewcik, ну ты сам на все свои вопросы и ответил...

andrewcik
14.10.2011, 10:38
Кстати мне функция send возвращает результат своей работы в виде - 50, что это я немогу понять? в описании ошибок нет цифр 50, есть 10000, 10050, 10051 и т.д.

glukmaker
14.10.2011, 13:47
Ну вобщем пока решил пакет ProtocolVersion оставить в том виде в каком его передает клиент, и не пытаться понять его суть...
Вернее насчет того, что клиент передает серверу информацию о своем протоколе - понятно.
Непонятно только смысл передаваемых 256 байт данных, начиная с 8-го... И непонятно то, почему у сервера своя нумерация протоколов, а у клиента своя... Ведь протокол - это вроде нечто общее, определяющее правила взаимодействия клиента и сервера.

Добавлено через 1 час 0 минут
Отправил пакет protocolVersion. Сервер мне прислал пакет с XOR-ключом.

А вот дальше пока возникла проблема с шифрованием:

Описание такое:
1.2. Шифрация пакетов GameServer'a:
Чтобы не загружать ваши и без того замученные головы, вместо алгоритмов, я дам готовые исходники (немного измененные для наглядности):


char key_sc[8];
char key_cs[8];

void Encrypt(char *raw, int size)
{
int temp = 0;
for (int i=0; i<size; i++)
{
int temp2 = raw[i] &0xff;
raw[i] = (char)(temp2 ^ (key_cs[i&7] &0xff) ^ temp);
temp = raw[i];
}
int old = key_cs[0] &0xff;
old |= key_cs[1] << 8 &0xff00;
old |= key_cs[2] << 0x10 &0xff0000;
old |= key_cs[3] << 0x18 &0xff000000;
old += size;
key_cs[0] = (char)(old &0xff);
key_cs[1] = (char)(old >> 0x08 &0xff);
key_cs[2] = (char)(old >> 0x10 &0xff);
key_cs[3] = (char)(old >> 0x18 &0xff);
}


void Decode(char *input, int size)
{
int i = 0;
int j = 0;
for(int k=0; k < size; k++)
{
int i1 = input[k] & 0xFF;
input[k] = (char)(i1 ^ key_sc[j++] & 0xFF ^i);
i = i1;
if(j>7) j=0;
}
long l = key_sc[0] & 0xFF;
l |= key_sc[1] << 8 & 0xFF00;
l |= key_sc[2] << 16 & 0xFF0000;
l |= key_sc[3] << 24 & 0xFF000000;
l += size;
key_sc[0] = (char)(l & 255L);
key_sc[1] = (char)(l >> 8 & 255L);
key_sc[2] = (char)(l >> 16 & 255L);
key_sc[3] = (char)(l >> 24 & 255L);
}


void Key(char* packet, int len)
{
key_sc[0] = packet[4];
key_sc[1] = packet[5];
key_sc[2] = packet[6];
key_sc[3] = packet[7];
key_sc[4] = (char)0xA1;
key_sc[5] = (char)0x6C;
key_sc[6] = (char)0x54;
key_sc[7] = (char)0x87;
for(i=0;i<8;i++) {key_cs[i]=key_sc[i];}
}

void add_ckecksum(unsigned char *raw, int count) //вычисляет чексумму и вставляет её в пакет
{ //как пользоватся: add_ckecksum(CelyjPaket+2, DlinaPaketa-(2+4+4));
unsigned long chksum = 0;
unsigned long ecx;
int i = 0;
for(i = 0; i < count; i += 4)
{
ecx = (unsigned long)raw[i];
ecx |= (unsigned long)raw[i + 1]<<8;
ecx |= (unsigned long)raw[i + 2]<<16;
ecx |= (unsigned long)raw[i + 3]<<24;
chksum ^= ecx;
}
memcpy(raw+count, (char *)&chksum, 4);
}

void RSAKeyDecode(char* RSAKey)
{
for (int i = 0; i < 64; i++)
{
RSAKey[i + 64] ^= RSAKey[i];
}
for (int i = 0; i < 4; i++)
{
RSAKey[i + 13] ^= RSAKey[i + 52];
}
for (int i = 0; i < 64; i++)
{
RSAKey[i] ^= RSAKey[i + 64];
}
for (int i = 0; i < 4; i++)
{
BYTE tmp = RSAKey[i];
RSAKey[i] = RSAKey[i + 77];
RSAKey[i + 77] = tmp;
}
}


Но сишный код мне очень трудно понять.
Может кто-нить на словах объяснить как идет шифрация/дешифрация и смена ключа?

andrewcik
14.10.2011, 13:54
это вот и есть чтоли ТОКЕН?
Packet ID: 32 Packet size: 267
Source IP : 192.168.1.25: 61787
Destination IP : 192.168.1.6: 7777
------------------------------------------------------------------------------
000000 0B 01 0E 0B 01 00 00 09 | 07 54 56 03 09 0B 01 07 .........TV.....
000010 02 54 54 56 07 00 02 55 | 56 00 51 00 53 57 04 07 .TTV...UV.Q.SW..
000020 55 08 54 01 07 01 53 00 | 56 55 56 01 06 05 04 51 U.T...S.VUV....Q
000030 03 08 51 08 51 56 04 54 | 06 55 08 02 09 51 56 01 ..Q.QV.T.U...QV.
000040 53 06 55 04 53 00 56 56 | 53 01 09 02 09 01 51 54 S.U.S.VVS.....QT
000050 51 09 55 56 09 03 04 07 | 05 55 04 06 55 04 06 09 Q.UV.....U..U...
000060 04 51 01 08 08 06 05 52 | 06 04 01 07 54 03 06 52 .Q.....R....T..R
000070 55 06 55 55 51 01 02 04 | 54 03 55 54 01 57 51 55 U.UUQ...T.UT.WQU
000080 05 52 05 54 07 51 51 55 | 07 02 53 53 00 52 05 52 .R.T.QQU..SS.R.R
000090 07 01 54 00 03 05 05 08 | 06 05 05 06 03 00 0D 08 ..T.............
0000A0 01 07 09 03 51 03 07 53 | 09 51 06 07 54 0A 50 56 ....Q..S.Q..T.PV
0000B0 02 52 04 05 55 51 02 53 | 00 08 54 04 52 56 06 02 .R..UQ.S..T.RV..
0000C0 09 00 08 03 53 56 01 05 | 00 55 06 08 56 04 0D 06 ....SV...U..V...
0000D0 07 52 06 07 04 0A 06 01 | 04 54 04 00 05 02 04 54 .R.......T.....T
0000E0 00 09 52 53 05 04 01 04 | 05 05 01 52 51 52 0D 06 ..RS.......RQR..
0000F0 51 08 09 54 53 00 0D 01 | 02 03 54 53 01 05 03 08 Q..TS.....TS....
000100 56 54 07 02 54 0B 06 A6 | 23 F4 FE VT..T...#..

xkor
14.10.2011, 14:28
Кстати мне функция send возвращает результат своей работы в виде - 50, что это я немогу понять?функция send возвращает количество отправленных байт, в случае ошибки она возвращает -1

glukmaker
14.10.2011, 16:25
Я так понял, что в описанном алгоритме шифрации/дешифрации подразумевается 16-байтный ключ. Но сервер присылает нам только 4 байта.

Где брать остальные 12 байтов?

Добавлено через 1 час 0 минут
Вроде понял. Вроде взял не то описание.
нашел такое (8-байтный ключ. младшие 4 байта получаем от сервера, старшие как я понял фиксированные $87546CA1 (или их еще предварительно вычислить нужно?)):

char key_sc[8];
char key_cs[8];

void Encrypt(char *raw, int size)
{
int temp = 0;
for (int i=0; i<size; i++)
{
int temp2 = raw[i] &0xff;
raw[i] = (char)(temp2 ^ (key_cs[i&7] &0xff) ^ temp);
temp = raw[i];
}
int old = key_cs[0] &0xff;
old |= key_cs[1] << 8 &0xff00;
old |= key_cs[2] << 0x10 &0xff0000;
old |= key_cs[3] << 0x18 &0xff000000;
old += size;
key_cs[0] = (char)(old &0xff);
key_cs[1] = (char)(old >> 0x08 &0xff);
key_cs[2] = (char)(old >> 0x10 &0xff);
key_cs[3] = (char)(old >> 0x18 &0xff);
}



С учетом вышеприведенного, я перевел это на Дельфи так:

TXorKeyData=packed array[1..8] of byte;

type TXorKey=packed record
case boolean of
true: (KeyArray:TXorKeyData;);
false: (First_Key:cardinal;
SecondKey:cardinal;);
end;

...

procedure XOREncrypt(var data;len:integer;var key:TXorKey);
var
i:integer;
S:Pchar;
temp,temp2:char;
old:Cardinal;
begin
S:=Pchar(@data);
temp:=Char(0);
for i:=0 to len-1 do
begin
temp2:=S[i];
s[i]:=char(ord(temp2) xor key.KeyArray[i and 7] xor ord(temp));
temp:=s[i];
end;
key.First_Key:=Key.First_Key+len;
end;


Правильно? Или я что-то недопонял в сишной реализации алгоритма?

xkor
14.10.2011, 17:31
glukmaker, http://l2ph.coderx.ru/wsvn/filedetails.php?repname=l2phx3&path=%2F3.5.x%2Funits%2Fuencdec.pas
тебя там интересуют L2Xor.DecryptGP, L2Xor.EncryptGP и L2Xor.InitKey
в методе L2Xor.InitKey параметр Interlude для твоего сервера будет равен 0

Добавлено через 2 минуты
а хотя вот более оптимальный вариант:
unit CryptXOR;

interface

type
TxorCrypt = object
public
GKeyS,GKeyR:array[0..15] of Byte;
isInit: Boolean;
keyLen: integer;
procedure InitKey(const XorKey; Interlude: Boolean = False);
procedure DecryptGP(var Data; const Size: Word);
procedure EncryptGP(var Data; const Size: Word);
end;

implementation

procedure TxorCrypt.DecryptGP(var Data; const Size: Word);
var
k:integer;
pck:array[0..0] of Byte absolute Data;
begin
if not isInit then Exit;
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor GKeyR[k and keyLen] xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor GKeyR[0];
Inc(PCardinal(@GKeyR[keyLen-7])^,size);
end;

procedure TxorCrypt.EncryptGP(var Data; const Size: Word);
var
i:integer;
pck:array[0..0] of Byte absolute Data;
begin
if not isInit then Exit;
if size<>0 then pck[0]:=pck[0] xor GKeyS[0];
for i:=1 to size-1 do
pck[i]:=pck[i] xor GKeyS[i and keyLen] xor pck[i-1];
Inc(PCardinal(@GKeyS[keyLen-7])^,size);
end;

procedure TxorCrypt.InitKey(const XorKey; Interlude: Boolean = False);
const
KeyConst: array[0..3] of Byte = ($A1,$6C,$54,$87);
KeyConstInterlude: array[0..7] of Byte = ($C8,$27,$93,$01,$A1,$6C,$31,$97);
begin
if Interlude then begin
keyLen:=15;
Move(XorKey,GKeyS,8);
Move(KeyConstInterlude,GKeyS[8],8);
end else begin
keyLen:=7;
Move(XorKey,GKeyS,4);
Move(KeyConst,GKeyS[4],4);
end;
Move(GKeyS,GKeyR,16);
isInit:=True;
end;

end.

Hint
15.10.2011, 13:55
Мой модуль для удобной работы с L2-потоком:
http://pastebin.com/X9BnJJJ8
Не надо думать о шифровании, о делении потока на пакеты и прочих мелочах.

Требуется установить свои обработчики PacketEvent (сюда передается очередной дешифрованный пакет) и SendEvent (сюда передается строка для передачи на сервер).
Сырые данные от сервера передавать в метод ProcessData, отправлять через метод Send.

Обработчик PacketEvent получает объект класса TL2Packet (доступны все функции ReadX) и управляющий объект класса TL2Stream. Писать данные можно в свой объект TL2Packet (все WriteX функции), а потом вызываеть L2Stream.Send(L2Packet.Data).

glukmaker
16.10.2011, 16:39
Вобщем у меня все получилось. Загвоздка была в том, что при выборе чара я слал его Id, а нужно было номер чарслота (как оказалось с в xor-шифровании я не сделал ошибки, как думал ранее).

Авторизацию (до посылки пакета EnterWorld включительно) реализовал.
И далее теперь могу принимать и отправлять пакеты.
Спасибо всем, кто помог!

Мой модуль для удобной работы с L2-потоком

Обязательно посмотрю. Я сам уже было подумал все, что я написал оформить в виде компонента. Но вот увидел твое сообщение. Эх. если бы ты раньше написал, я бы не стал мучаться... А то теперь не знаю, что взять за основу: твой модуль или то, что я уже сам написал дорабатывать.

SeregaZ
16.10.2011, 16:43
свой лучше. пока напишешь мозг сломаешь, время потеряешь, но зато станешь в этом гуру. да и свой код "роднее".

andrewcik
16.10.2011, 23:49
а у меня походу гуард стоит чтоли? первый пакет от серва приходит вот этот:
000000 BA 00 DE 86 44 3C 7C 5B | 73 BF 9A 75 EE B3 1C 4D ....D<|[s..u..M
000010 03 EF 2C D7 41 70 57 3A | A4 E0 5C 92 DC 09 E5 2E ..,.ApW:..\.....
000020 C2 49 4D 42 C8 C5 2C 78 | 68 D1 CF D7 E1 D7 34 EA .IMB..,xh.....4.
000030 7B DC 7B D2 A2 CB 5E FB | D5 B6 AC 3D AF 39 D5 B7 {.{...^....=.9..
000040 AF 2F C6 DA D1 51 AD AB | 5D C5 F1 FD F3 AC 9D 59 ./...Q..]......Y
000050 C3 25 E0 7A 53 86 35 D1 | 6A E3 DF 87 16 B6 EE 73 .%.zS.5.j......s
000060 22 B1 FB 52 F2 39 A1 C6 | 22 C0 A9 49 CD EF E7 E7 "..R.9.."..I....
000070 3A AB 8B CC 57 A3 AE 00 | 77 7E F5 3B 74 ED 86 70 :...W...w~.;t..p
000080 1A FE 7C AE C4 07 D3 87 | 76 DF CA 7F EF 23 4D 6F .|.....v...#Mo
000090 FF 73 67 32 45 07 F0 0B | 2E A1 DB 47 30 8D CA F6 .sg2E......G0...
0000A0 9C 64 08 00 57 E0 00 9A | BF 20 AC 27 ED 00 B2 5D .d..W.... .'...]
0000B0 95 8D 8B 71 0A E8 25 84 | 6D CE ...q..%.m.

пытался его расшифровать - нифига невышло((
он даже ваще не похож на пакет Init

xkor
17.10.2011, 00:02
andrewcik, очень даже похож на протокол c621)

Добавлено через 2 минуты
то есть пакет зашифрован BlowFish с начальным ключем, под ним XOR, в пакете новый BlowFish ключ и RSA ключ для формирования последующих пакетов)

andrewcik
18.10.2011, 08:55
чёта я всёравно не могу вдуплиться как этот Init пакет расшифровать
вроде делаю всё верно: сначало блоуфиш раскодирую, потом разксориваю и всёравно какая-то ерунда выходит)
да и в описаниях протокола С621 написано что он равен 170байтам, а этот 186байт
000000 BA 00 DE 86 44 3C 7C 5B | 73 BF 9A 75 EE B3 1C 4D ....D<|[s..u..M
000010 03 EF 2C D7 41 70 57 3A | A4 E0 5C 92 DC 09 E5 2E ..,.ApW:..\.....
000020 C2 49 4D 42 C8 C5 2C 78 | 68 D1 CF D7 E1 D7 34 EA .IMB..,xh.....4.
000030 7B DC 7B D2 A2 CB 5E FB | D5 B6 AC 3D AF 39 D5 B7 {.{...^....=.9..
000040 AF 2F C6 DA D1 51 AD AB | 5D C5 F1 FD F3 AC 9D 59 ./...Q..]......Y
000050 C3 25 E0 7A 53 86 35 D1 | 6A E3 DF 87 16 B6 EE 73 .%.zS.5.j......s
000060 22 B1 FB 52 F2 39 A1 C6 | 22 C0 A9 49 CD EF E7 E7 "..R.9.."..I....
000070 3A AB 8B CC 57 A3 AE 00 | 77 7E F5 3B 74 ED 86 70 :...W...w~.;t..p
000080 1A FE 7C AE C4 07 D3 87 | 76 DF CA 7F EF 23 4D 6F .|.....v...#Mo
000090 FF 73 67 32 45 07 F0 0B | 2E A1 DB 47 30 8D CA F6 .sg2E......G0...
0000A0 9C 64 08 00 57 E0 00 9A | BF 20 AC 27 ED 00 B2 5D .d..W.... .'...]
0000B0 95 8D 8B 71 0A E8 25 84 | 6D CE ...q..%.m.

очень прошу объяснить доходчивей, и пожалуйста если можно с кодом

supernewbie
18.10.2011, 13:46
дак 170 байт + 16 чексуммы, всё ок

andrewcik
19.10.2011, 11:55
вот полученый Init пакет:
BA 00 64 9A D8 4C 43 8D 22 8B B6 53 AD FE E4 07
ED 32 55 94 CD 03 54 64 37 B7 A2 63 97 09 5E 24
AD C9 45 CB A8 A6 42 BD 6D FD 2D 7B A7 76 B3 DF
C8 BE 6F E8 D6 B2 C3 7C D8 48 5E 15 45 D0 BE E0
A8 4F B1 D3 3F 2A 18 F5 BC 81 CC CD C4 29 59 7D
A6 A4 5D D2 34 E9 A2 2B EA 87 C0 D0 90 BE 3A F2
8F 9F D1 BF 37 0D 2A 55 0E 77 49 32 AF D9 93 90
0C 73 D0 BF E0 BF 5D 39 88 88 73 86 CD 39 97 AA
A2 A1 74 F6 6B 0F 87 15 95 E1 9E 90 99 F7 B4 EE
FD 96 05 A2 1F 5C DA B8 55 AC D8 9D 04 F8 61 F5
9C 83 38 41 EA 84 F0 C5 78 9A 32 CB AB AE CA EA
BA 01 BD 1F A6 68 95 7F 95 A7
а вот расшифрованный:
92 D5 79 FF F3 54 2E 1C F8 73 F8 12 1A 10 91 F5
7A BA 9C AC B9 DA A0 A4 98 F8 D3 65 A6 D6 CF 60
32 DC 6B 1D 0F E5 C8 E3 4B F8 68 E5 50 39 12 B0
08 D5 CB 74 B9 DC 16 FA 04 EE 71 54 14 94 53 FB
21 FF FA 17 B6 FD FC 58 C3 9B 86 E3 D9 06 0C BA
5C 1D D3 37 E3 60 6A 25 D4 DE 3E 73 E4 74 15 86
B1 9C 1E D4 CF D7 3C F4 3F 9F 41 F7 9A D7 96 00
FA 5F 07 CD D3 17 FF AF BC 3A E2 82 88 6A 83 5B
84 D4 F2 6F B7 28 73 04 F2 97 24 65 29 52 A4 E2
DD 6E 30 70 E8 36 34 C7 A6 5C DA 83 30 39 03 71
DC 53 AB 53 36 BC 61 6D D4 E1 35 F5 F8 5B 14 5C
31 52 33 FC 59 E2 C0 08 95 A7
как понять правильно я его расшифровал или нет?

xkor
19.10.2011, 14:18
andrewcik, начнём с того что байты размера расшифровывать было не надо)
а правильно будет когда первый байт данных (ну который сразу после размера) будет нулём)

guplen
19.10.2011, 15:38
http://coderx.ru/showthread.php?t=670

Эта тема ответит на многие вопросы.

andrewcik
19.10.2011, 19:14
ыы сделал, но ответ приходит "логин фэйл". у сервака как и говорил есть гуард, одна дллка с именем Fire.dll. мож кто знает как её обойти или уже мож была такая темка?
пс: сделал симуляцию сервера в виртуалбоксе (сервер без защит) - логинится.
ща пока сижу гуглю мож найду чего-нить о этой дллке

Nickers
19.10.2011, 20:09
andrewcik, где-то была информация, что нужно fire.dll заменить fire.u и все будет ок. (Прикрепил)

andrewcik
19.10.2011, 20:36
заменять то посути нечего, я напрямую конектюсь к логин серверу, а клиент игры походу использует эту дллку - я же нет.
я заснифил и увидел что ЛС и клиент отправляют друг-другу по паре лишних пакетов.
================================================== ============================
Packet ID: 4 Packet size: 186
Source IP : xxx.xxx.xxx.xxx: 2106
Destination IP : 192.168.1.25: 54824
------------------------------------------------------------------------------
000000 BA 00 71 48 D1 5C A9 10 | C4 5E EF 4A A1 98 8E 8D ..qH.\...^.J....
000010 32 0C FF F4 24 F4 1A 27 | 4F 30 3C C8 0D 2C A6 01 2...$.'O0<..,..
000020 5A A5 61 96 3C FC 48 81 | 73 18 89 6E E1 CD A8 71 Z.a.<.H.s..n...q
000030 49 74 EB DF 58 6D 19 8F | DA 98 6F A9 27 E4 53 76 It..Xm...o.'.Sv
000040 6A 61 36 CC 3A BD 5A FF | 77 B0 4D 3B 0A AE 81 E5 ja6.:.Z.w.M;....
000050 81 15 C2 82 7F 45 71 F5 | 46 1F 71 DA 90 08 C6 08 ....Eq.Fq.....
000060 13 32 79 51 A0 26 B8 E1 | 03 D5 C4 4B 86 E9 2D C3 .2yQ.&.....K..-.
000070 EC 95 BD DD 72 94 80 3C | 32 26 F7 56 D3 02 AA 8D ....r..<2&.V....
000080 73 C4 35 11 0D 31 3E 7E | 82 45 A5 DC A4 E4 91 46 s.5..1>~.E.....F
000090 2F B5 7E C7 C0 A5 BD 34 | 16 D5 64 C0 6D 92 6D 91 /.~....4..d.m.m.
0000A0 A5 50 B3 BB A4 F2 B5 DF | D1 1C 98 9F 72 70 2C B1 .P.........rp,.
0000B0 AF 65 60 98 9C 80 7B 6B | 6E 6B .e`...{knk


================================================== ============================
Packet ID: 5 Packet size: 42
Source IP : 192.168.1.25: 54824
Destination IP : xxx.xxx.xxx.xxx: 2106
------------------------------------------------------------------------------
000000 2A 00 F0 02 FF 1A 29 21 | AC B3 59 01 DE 60 AC C2 *....)!..Y..`..
000010 7D 95 68 20 E4 E7 63 AE | C1 2D E4 31 C4 C1 08 2C }.h ..c..-.1...,
000020 7D 0D 46 D6 A1 9B 80 85 | 47 46 }.F.....GF


================================================== ============================
Packet ID: 7 Packet size: 34
Source IP : xxx.xxx.xxx.xxx: 2106
Destination IP : 192.168.1.25: 54824
------------------------------------------------------------------------------
000000 22 00 F7 F1 CF BA 0F 2D | C8 F2 46 D6 A1 9B 80 85 "......-..F.....
000010 47 46 46 D6 A1 9B 80 85 | 47 46 EA 98 6E AA BA 2A GFF.....GF..n..*
000020 86 B8 ..


================================================== ============================
Packet ID: 8 Packet size: 255
Source IP : 192.168.1.25: 54824
Destination IP : xxx.xxx.xxx.xxx: 2106
------------------------------------------------------------------------------
000000 FF 00 F0 C2 00 E1 77 AD | 0F EA 49 0C 49 DF D5 BE ......w...I.I...
000010 F8 00 AD 10 15 74 46 68 | 88 16 31 71 95 E7 47 2E .....tFh..1q..G.
000020 DE 07 53 70 4D 30 D0 63 | 54 1D 6E BF A5 02 CA BF ..SpM0.cTn.....
000030 C6 34 1B 32 37 92 16 E0 | 7C 12 D8 B2 E6 59 6C DA .427...|....Yl.
000040 BC 32 91 E6 20 72 60 1C | 75 17 6C D6 BE 00 00 7C .2.. r`u.l....|
000050 A4 EF A6 D1 A5 28 EF A4 | F4 B4 AE C0 59 FA DC 9E .....(......Y...
000060 B7 78 D7 F6 63 4C 98 AE | AC EE 1E 30 6B 14 55 E9 .x..cL....0k.U.
000070 22 DA 44 CF 40 B7 A0 43 | C1 A3 C4 F5 73 A1 54 23 ".D.@..C....s.T#
000080 F0 03 15 24 C0 42 8A 12 | BA F4 3D A0 96 46 D6 A1 ...$.B....=..F..
000090 9B 80 85 47 46 E8 42 31 | BB 72 C1 66 E8 A4 D6 58 ...GF.B1.r.f...X
0000A0 33 73 3E 39 4C 09 02 E7 | 94 7D 6E 8D 10 1B 38 C9 3s>9L....}n..8.
0000B0 21 0C 5B E1 3F 17 DC 0C | 59 64 1F E0 A9 46 D6 A1 !.[.?...Yd..F..
0000C0 9B 80 85 47 46 18 88 DB | 00 EC 3F 02 BA D4 A5 12 ...GF.....?.....
0000D0 65 41 6E 77 6E 99 3F EE | 34 76 49 51 6E 35 F1 F4 eAnwn.?.4vIQn5..
0000E0 DB 2E 6A EC 6C 5F DB FB | 9E DC 60 72 C7 33 F4 A6 ..j.l_....`r.3..
0000F0 57 7B BA DD 07 E7 77 24 | FF 13 C0 FD 45 2B 5A W{....w$....E+Z


================================================== ============================
Packet ID: 10 Packet size: 50
Source IP : xxx.xxx.xxx.xxx: 2106
Destination IP : 192.168.1.25: 54824
------------------------------------------------------------------------------
000000 32 00 A8 66 55 4B 05 6C | 3E BC 0C 8B E6 E6 83 61 2..fUK.l>......a
000010 70 5B BD 0E B4 90 6D F9 | 1B 89 46 D6 A1 9B 80 85 p[....m..F.....
000020 47 46 46 D6 A1 9B 80 85 | 47 46 FD F0 A9 38 F9 94 GFF.....GF...8..
000030 A6 09 ..


================================================== ============================
Packet ID: 11 Packet size: 34
Source IP : 192.168.1.25: 54824
Destination IP : xxx.xxx.xxx.xxx: 2106
------------------------------------------------------------------------------
000000 22 00 3A 32 D4 C0 E1 C5 | BD AE 36 93 6A C8 83 E4 ".:2......6.j...
000010 9A 4F 34 BF 83 F9 DF 8E | 98 68 46 D6 A1 9B 80 85 .O4......hF.....
000020 47 46 GF


================================================== ============================
Packet ID: 13 Packet size: 34
Source IP : xxx.xxx.xxx.xxx: 2106
Destination IP : 192.168.1.25: 54824
------------------------------------------------------------------------------
000000 22 00 84 C5 37 D1 29 AB | 54 35 79 83 21 04 22 4D "...7.).T5y.!."M
000010 84 D0 72 72 FC 56 4E 1D | 4B 5C 07 89 37 5C 95 9B ..rr.VNK\..7\..
000020 75 37 u7


================================================== ============================
Packet ID: 14 Packet size: 34
Source IP : 192.168.1.25: 54824
Destination IP : xxx.xxx.xxx.xxx: 2106
------------------------------------------------------------------------------
000000 22 00 D6 AA 00 1B 12 1E | 64 91 38 E9 86 AB 6C 24 ".....d.8...l$
000010 64 81 62 6A 25 51 7F B9 | 00 EA 46 D6 A1 9B 80 85 d.bj%Q...F.....
000020 47 46

Nickers
19.10.2011, 21:09
andrewcik, А ты, кстати, это зачем изучаешь? Брутфорс делаешь, Бота своего или просто интересно? (Последний вариант самый ок)
Лично мне это очень интересно, но я в программировании хуй простой, а книжка по С++ ток до трети пройдена.

andrewcik
19.10.2011, 23:27
в частности вот непонятный пакет который уходит на ЛС:
Packet ID: 8 Packet size: 255
Source IP : 192.168.1.25: 54824
Destination IP : xxx.xxx.xxx.xxx: 2106
------------------------------------------------------------------------------
000000 FF 00 F0 C2 00 E1 77 AD | 0F EA 49 0C 49 DF D5 BE ......w...I.I...
000010 F8 00 AD 10 15 74 46 68 | 88 16 31 71 95 E7 47 2E .....tFh..1q..G.
000020 DE 07 53 70 4D 30 D0 63 | 54 1D 6E BF A5 02 CA BF ..SpM0.cTn.....
000030 C6 34 1B 32 37 92 16 E0 | 7C 12 D8 B2 E6 59 6C DA .427...|....Yl.
000040 BC 32 91 E6 20 72 60 1C | 75 17 6C D6 BE 00 00 7C .2.. r`u.l....|
000050 A4 EF A6 D1 A5 28 EF A4 | F4 B4 AE C0 59 FA DC 9E .....(......Y...
000060 B7 78 D7 F6 63 4C 98 AE | AC EE 1E 30 6B 14 55 E9 .x..cL....0k.U.
000070 22 DA 44 CF 40 B7 A0 43 | C1 A3 C4 F5 73 A1 54 23 ".D.@..C....s.T#
000080 F0 03 15 24 C0 42 8A 12 | BA F4 3D A0 96 46 D6 A1 ...$.B....=..F..
000090 9B 80 85 47 46 E8 42 31 | BB 72 C1 66 E8 A4 D6 58 ...GF.B1.r.f...X
0000A0 33 73 3E 39 4C 09 02 E7 | 94 7D 6E 8D 10 1B 38 C9 3s>9L....}n..8.
0000B0 21 0C 5B E1 3F 17 DC 0C | 59 64 1F E0 A9 46 D6 A1 !.[.?...Yd..F..
0000C0 9B 80 85 47 46 18 88 DB | 00 EC 3F 02 BA D4 A5 12 ...GF.....?.....
0000D0 65 41 6E 77 6E 99 3F EE | 34 76 49 51 6E 35 F1 F4 eAnwn.?.4vIQn5..
0000E0 DB 2E 6A EC 6C 5F DB FB | 9E DC 60 72 C7 33 F4 A6 ..j.l_....`r.3..
0000F0 57 7B BA DD 07 E7 77 24 | FF 13 C0 FD 45 2B 5A W{....w$....E+Z

Добавлено через 2 часа 3 минуты
ыыы ошибся. это логин пакет)

guplen
19.10.2011, 23:49
Это пакет который содержит логин и пароль. Но его дополняют какойто информацией. Вообщем это защита Хинта, ставится на ПТС сборках. Обхода в паблике не видел.

Hint
20.10.2011, 00:08
Это пакет который содержит логин и пароль. Но его дополняют какойто информацией. Вообщем это защита Хинта, ставится на ПТС сборках. Обхода в паблике не видел.

Обходы есть, но нет алгоритма шифрования.

Pinko
20.10.2011, 01:11
давно писано
мож поможет
http://l2-community.com/showpost.php?p=410&postcount=1

Hint
20.10.2011, 01:22
давно писано
мож поможет
http://l2-community.com/showpost.php?p=410&postcount=1

Это от "старой" защиты (она не имеет практически ничего общего с "новой").

andrewcik
20.10.2011, 16:57
кто знает что за ерунда? я проснифил первый пакет от клиента к GS и с помощью своей программы отправил тот же самый пакет (он константа оказался), вот он
Длина пакета: 267 (0x10B)
-------------------------------------------------------
0x0000| 0B 01 0E 0B 01 00 00 09 07 54 56 03 09 0B 01 07
0x0010| 02 54 54 56 07 00 02 55 56 00 51 00 53 57 04 07
0x0020| 55 08 54 01 07 01 53 00 56 55 56 01 06 05 04 51
0x0030| 03 08 51 08 51 56 04 54 06 55 08 02 09 51 56 01
0x0040| 53 06 55 04 53 00 56 56 53 01 09 02 09 01 51 54
0x0050| 51 09 55 56 09 03 04 07 05 55 04 06 55 04 06 09
0x0060| 04 51 01 08 08 06 05 52 06 04 01 07 54 03 06 52
0x0070| 55 06 55 55 51 01 02 04 54 03 55 54 01 57 51 55
0x0080| 05 52 05 54 07 51 51 55 07 02 53 53 00 52 05 52
0x0090| 07 01 54 00 03 05 05 08 06 05 05 06 03 00 0D 08
0x00A0| 01 07 09 03 51 03 07 53 09 51 06 07 54 0A 50 56
0x00B0| 02 52 04 05 55 51 02 53 00 08 54 04 52 56 06 02
0x00C0| 09 00 08 03 53 56 01 05 00 55 06 08 56 04 0D 06
0x00D0| 07 52 06 07 04 0A 06 01 04 54 04 00 05 02 04 54
0x00E0| 00 09 52 53 05 04 01 04 05 05 01 52 51 52 0D 06
0x00F0| 51 08 09 54 53 00 0D 01 02 03 54 53 01 05 03 08
0x0100| 56 54 07 02 54 0B 06 A6 23 F4 FE
а в ответ приходит только это:
Длина пакета: 3 (0x03)
-------------------------------------------------------
0x0000| 03 00 20
длина этого пакета постоянно 3байта, но значение 3 байта постоянно меняется.
клиент отправляет тоже самое и получает в ответ норм пакет

supernewbie
21.10.2011, 10:59
да опять блоуфишишь бито или доп шифр стоит