PDA

Просмотр полной версии : Пакет Interlude


Rzone
22.09.2012, 00:57
Первый пакет отправленный сервером, помогите разобраться где здесь что:
(Interlude)

BA 00
23 13 64 46 D7 14 CF C5 13 BF 8A 3E 41 23 9B 83
80 BA 88 91 67 E9 64 A9 D3 47 01 A6 01 E5 B8 FA
EC 26 E3 8E F1 D1 FB 0B C6 32 1C 29 30 EA 2D 1D
46 5C 62 FF C7 7A 92 82 CB 9A 99 C3 44 9B 77 F3
FA 2F 67 14 13 DF BA 5C 68 A7 0B B6 BA 0E 8F 33
DB 7A 21 9F 16 C3 05 B1 0B 32 89 AF 21 7C F7 B0
21 07 4C 02 D8 8F EB 6F 01 EA C4 1F BD CD 18 96
D4 AF 9A AD 51 82 F3 1A 2F 79 2F 55 58 82 BD E4
72 61 F1 D3 7C 5F B9 CD 97 2B 0A 62 BD D0 38 DF
55 E8 FD 98 FB 29 02 6F 63 B5 FA F7 75 16 BF 87
19 1E A5 D9 C4 18 37 51 5E 9D 2D 23 46 58 1A 32
5B ED A3 7F B1 C8 53 A4

Конкретный вопрос: как расшифровать/декриптовать этот пакет?

Rzone
23.09.2012, 02:11
up

Roman32
23.09.2012, 21:28
Хлам какой то,зач тебе это надо?

Rzone
24.09.2012, 04:28
В смысле хлам игра? Или хроники старые? В них еще играют.
Хочу своего бота переделать с 4х хроник на интерлюд. Первый пакет закриптован очевидно блуфиш или ксор, кто знает где здесь ключи, чем закриптовано в общем буду благодарен за любую инфу.

Roman32
24.09.2012, 20:50
ааа ИТ норм сам там играю,чё за серв мб те скину бота)

Rzone
25.09.2012, 01:18
Мне валкеры итп не нужно, мне нужно своего переделать, потому что со своим я могу делать что угодно, полный контроль. Кто-нибудь кто в пакетах разбирается может заглянет в темку? :(

PornoTraktor
25.09.2012, 01:58
не на шоколюдию ли собрался?)
я тоже своего бота с 0ля писал... вот интересное
http://www.la2kings.ru/la2bot/packets.html
http://coderx.ru/showthread.php?t=8824

Rzone
25.09.2012, 13:33
Блин так и знал будут тыкать в эти темки. Да я по ним то и делал, и они мной читаны-перечитаны, но об интерлюдии там очень поверхностно написано.

PornoTraktor
25.09.2012, 13:38
Ну там есть кое-какие неточности, но в целом все верно - и для интерлюдии и выше. Я лично по исходникам l2jserver писал, смотрел пакеты и шифрование. Просто ты заходишь не с конкретным вопросом - сделал как тут а чета не вышло, а "помогите разобраться где здесь что"...

Rzone
25.09.2012, 17:57
Слушай, а ты исходниками своими не поделишься? Если у тебя на интерлюд...

Roman32
25.09.2012, 19:22
Rzone у тебя ООГ бот?память жрёт?)

PornoTraktor
25.09.2012, 21:28
Пока не планировал выкладывать ни исходники, ни билд. Может в далеком светлом будущем... На какой серв собрался то, если не секрет? :)

Rzone
28.09.2012, 13:42
Бот оог, памяти жрет копейки, запускал сразу 60 окон:) Они при получении пакета на передвижение персонажа сравнивали ID с ID мастера, то-есть я указывал за кем им бегать, идет мастер - идут все, собираются или в кучу или как укажу по рандому рядом. Красиво было... как синхронное плавание)) но палевно ппц))

PornoTraktor можешь дать не целиком, а только часть для логин сервера в личку? Обещаю не распространять:)

PornoTraktor
29.09.2012, 17:15
а в моей самопальной софтине все "окна" в одном окне)) просто скраю список ботов между которыми можно переключаться... все равно ведь редко кто по одному роботу запускает - хз почему так не удобно в l2walker сделали.. когда внизу в taskbar-е 60 инстансов одной программы - это ад)

Rzone
29.09.2012, 18:41
Я своего тоже пытался переделать, сделать "все в одном"
сделал тип NewBot, внес в него все переменные, ключи итд, работать не захотело:) а искать баги было влом.

Добавлено через 10 минут
Нашел инфу по шифрации этого пакета( вроде это пакет Init)
Шифруется по RSA ключ находится в конце пакета, последние четыре байта. Хм... Ключ по стандартным алгоритмам RSA должен быть 8 байт не?

Пытаюсь дешифровать используя свои старые исходники, там почему-то вторая часть RSA ключа прописана константой:

key_sc[4] = $A1
key_sc[5] = $6C
key_sc[6] = $54
key_sc[7] = $87

Так пробую дешифровать(язык BlitzMax):

Global buf:Byte[10000]
Global key_cs:Byte[8], key_sc:Byte[8]

key_sc[0] =$B1
key_sc[1] =$C8
key_sc[2] =$53
key_sc[3] =A4

key_sc[4] = $A1
key_sc[5] = $6C
key_sc[6] = $54
key_sc[7] = $87

For i=0 Until 8
key_cs[i]=key_sc[i]
Next

file=ReadFile("1.txt"); L$=ReadLine(file); CloseFile(file)
For i=0 Until Len(L$)/3
b=unhex(Mid(L$,i*3+1,2))
j=i-2
If j=>0 Then buf[j]=b
Next

PrintBuf(186)

DecodeRSA(buf, 186)

PrintBuf(186)

'================================================= ====
Function DecodeRSA(raw:Byte Ptr, size:Int)
Local i:Int=0, j:Int=0, k:Int, L:Long, i1:Int
For k=0 Until size
i1 = raw[k] & $FF
raw[k] = (i1 ~ (key_sc[j] & $FF) ~ i) ; j:+1
i = i1
If j >7 Then j=0
Next
L = key_sc[0] & $FF
L = L | ((key_sc[1] Shl 8) & $FF00)
L = L | ((key_sc[2] Shl 16) & $FF0000)
L = L | ((key_sc[3] Shl 24) & $FF000000)
L:+(size-2)
key_sc[0] = L & $FF
key_sc[1] = ((L Shr 8 ) & $FF)
key_sc[2] = ((L Shr 16 ) & $FF)
key_sc[3] = ((L Shr 24 ) & $FF)
End Function

Фигня получается.... Дешифровать нужно с первыми двумя байтами или нет? Или я ключ неправильно собрал?

PornoTraktor
29.09.2012, 19:11
что?... из 184(не считая 2ух первых байтов размера) байт пакета Init 128 байт это RSA публичный ключ (приватный знает только сервер) которым ты зашьешь логин\пароль - это сделано чтобы если даже кто перехватить твой пакет, ему жопу пришлось порвать на бритаский флаг чтобы получить оттуда лог\пар))

Схема с Init такая
1.используя статичный blowfish ключ открываем 184 байта пакета
1.1 первый байт должен получится 00 - опкод пакета Init
2.[n-8,n-4] (где n - конец пакета) - это XOR ключ. Этим ключом открываем с 5го по 172 байт.
3.первые 4 байта после опкода - sessionId, затем 4 байта protocolId, после 128 RSA ключа
3.1 в RSA ключе байты перепутаны или даже проксорены - на него надо натравить какую-то статичную функцию которая сделает из него нормальный
4.с 153 байта по 169 лежит динамический blowfish ключ

Вроде нигде не наврал... если что поправьте)

Если где ошибешся, не видать тебе следующего пакета как своих ушей) good luck

Rzone
29.09.2012, 23:02
Спасибо. Ушел пробовать)

Добавлено через 1 час 24 минуты
Вот что получилось:

Было:
BA 00 23 13 64 46 D7 14 CF C5 13 BF 8A 3E 41 23
9B 83 80 BA 88 91 67 E9 64 A9 D3 47 01 A6 01 E5
B8 FA EC 26 E3 8E F1 D1 FB 0B C6 32 1C 29 30 EA
2D 1D 46 5C 62 FF C7 7A 92 82 CB 9A 99 C3 44 9B
77 F3 FA 2F 67 14 13 DF BA 5C 68 A7 0B B6 BA 0E
8F 33 DB 7A 21 9F 16 C3 05 B1 0B 32 89 AF 21 7C
F7 B0 21 07 4C 02 D8 8F EB 6F 01 EA C4 1F BD CD
18 96 D4 AF 9A AD 51 82 F3 1A 2F 79 2F 55 58 82
BD E4 72 61 F1 D3 7C 5F B9 CD 97 2B 0A 62 BD D0
38 DF 55 E8 FD 98 FB 29 02 6F 63 B5 FA F7 75 16
BF 87 19 1E A5 D9 C4 18 37 51 5E 9D 2D 23 46 58
1A 32 5B ED A3 7F B1 C8 53 A4

Стало:
BA 00 22 DE 8A 95 6E B1 63 E8 9C A2 F7 DA 46 03
A2 46 B9 5D 86 7D CB B8 FF 74 44 92 8E 86 7F 73
27 43 56 B3 E6 9E 1D 82 D4 E4 88 2D 65 64 09 B1
2C 7A 45 03 A1 81 F8 52 A7 46 5A 4F 8B 58 BD CD
1A 15 15 EA 7F FC 3E 15 D7 9E AD 09 19 1F 98 8F
3A A2 9A 03 83 56 1F AD F6 DD C5 5A 3D 01 2C CF
C2 89 D0 E5 9B C1 03 B5 E0 30 45 D1 97 A8 E7 19
8E EA 98 AF 82 4E 58 A7 9A 5B 17 8B 4B 2D BA 6B
98 BF 89 E8 D7 01 DD 56 F4 64 E7 CC 6F 54 4E DC
28 CA 1E 5F A9 0D 85 53 F4 1F 79 3C 18 5E DE 64
5F CE 14 CB CB B7 5A 90 84 1A 53 13 C4 F4 84 5B
09 0B 8D E4 2F D8 63 DC 70 1A

Ключ использовал такой: 6B 60 CB 5B 82 CE 90 B1 CC 2B 6C 55 6C 6C 6C 6C
Опкод не ноль... Где ошибся?

NLObP
29.09.2012, 23:15
Rzone, дешифровка пакетов логин сервера, где-то на форуме была, поищи.

PornoTraktor
29.09.2012, 23:21
Ключ верный, у меня тоже такой 6B 60 CB 5B 82 CE 90 B1 CC 2B 6C 55 6C 6C 6C 6C. Видимо в алгоритме обшибка...

Rzone
30.09.2012, 07:24
Нет там ошибки, он на С4 работал, я его с дельфийских исходников переписывал. А нестандартным ключом могут шифровать?
В Interlude тип шифрования был изменен - пакет
Init содержит динамический Blowfish ключ случайно генерируемый для каждого клиента. Этот пакет сначала шифруется по алгоритму XOR(ключ генерируется
случайным образом и помещается в конце пакета), а потом шифруется по алгоритму Blowfish, статическим ключом.
Это с документации про протокол Л2. Может теперь еще надо ксором дешифровать? Опкод сразу после дешифровки блоуфишем должен быть?

NLObP, Читал форум, всех везде отсылают на доки, а там про интерлюд поверхностно очень.

PornoTraktor
30.09.2012, 10:35
Нет там ошибки, он на С4 работал, я его с дельфийских исходников переписывал. А нестандартным ключом могут шифровать?
теоретически все могут) попробуй сначала на сервере где точно ничего "дополнительного" нет)
Опкод сразу после дешифровки блоуфишем должен быть?
Да, опкод 00 виден сразу после дшифрации статичным bf ключем.
Это с документации про протокол Л2. Может теперь еще надо ксором дешифровать?
Да надо, я в пункте 2 так и написал же. Но это для того чтобы достать RSA ключ а не опкод.
Init содержит динамический Blowfish ключ случайно генерируемый для каждого клиента.
Да. в пункте 4 я писал про него как раз.
Читал форум, всех везде отсылают на доки, а там про интерлюд поверхностно очень.
Описаный мной алготим точно пашет от ИЛа до фреи, это по крайней мере то что я проверял)

Rzone
30.09.2012, 10:45
Блин... можешь своим алгоритмом мой пакет расшифровать? Пожалуйста:)

PornoTraktor
30.09.2012, 11:10
BA000076F596E5B02F5AD7913AA5EFF9
B71F235A07CFBF98D6D3E78709BE9953
282F2AB12B1BE76198BBFC99C8D4A5B7
1DD646C83D0E5CF32A1DBF15D4563200
248A33EA603DB932B3005DFDAFEEAD0E
54E92804637EA9DA410F02EACED59F99
4D7F57B94C6450170C0BAD0F63038015
5250711CCF8C580B951066FD3466EDC0
F65CC999D03011E5787C32777F0159C9
1B6390758BE3E9BAFEB182FFE30F8F67
1536B62076AE018BFB30C5696047C669
C9FFED69B270C94F390E
:p

Добавлено через 53 секунды
это сразу после дешифрации статичным bf ключиком

Rzone
30.09.2012, 13:46
Хих, нашел ошибку - размер ключа у себя не указал, было 21, сделал 16 - все заработало:) Щас буду ксорить. Алгоритм тотже что и в С4?

NLObP
30.09.2012, 13:53
Rzone, здесь исходники http://coderx.ru/showpost.php?p=13769&postcount=33

PornoTraktor
30.09.2012, 13:58
Rzone, на чем пишешь то?

Rzone
30.09.2012, 21:18
PornoTraktor, на BlitzMax - высокоуровневый язык смесь бейсика Си паскаля. При возможности подключать длл и юзать функции из уже загруженных системных либ, типа юзер32 - на нем могу написать практически все) Язык очень шустрый компилятор от ассемблера.

Добавлено через 34 минуты
NLObP, спасибо за исходники. Я так понял они только для логин сервера. У меня прекрасно проходят авторизацию, значит подводных камней быть не должно))

Первый пакет пройден) Пришлось основательно переработать дельфийские исходники.

Добавлено через 6 часов 29 минут
4.с 153 байта по 169 лежит динамический blowfish ключ

со 155 по 171, хотя если без первых двух байт длины пакета то да 153-169

PornoTraktor
30.09.2012, 21:22
Rzone, ну я подумал будет понятно что я начал нумерацию байтов с опкода - "1 первый байт должен получится 00 - опкод пакета Init"

Rzone
30.09.2012, 22:06
Блин, опять проблема. Дошел до криптования логина/пароля в исходниках процедура использующая здоровую библиотеку FGint, переписывать все очень долго, можно конечно сделать библиотеку из сырцов, но хотелось бы разобраться и написать все самому...
Тут вообще ничего не пойму:
function RSAEncrypt(a,p,rsakey:string):string;
var
sD,sR,sM:string;
m,e,d,r:TFGInt;
begin
if length(a)>14 then setlength(a,14);
while length(a)<14 do a:=a+#0;
if length(p)>16 then setlength(p,16);
while length(p)<16 do p:=p+#0;
sD:=a+p+#0#0#0#0;
sM:=rsakey;
Base10StringToFGInt('65537',e);
Base256StringToFGInt(sD,d);
Base256StringToFGInt(sM,m);
FGIntMontgomeryModExp(d,e,m,r);
FGIntToBase256String(r,sR);
result:=sR;
end;

PornoTraktor, если у тебя функция небольшая криптующая логин/пароль по RSA может поделишься?)

PornoTraktor
30.09.2012, 22:20
Rzone, у меня на жаве бот, там это делается так
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(
new java.security.spec.RSAPublicKeySpec(
new BigInteger(1, this.publicRsaKey),
new BigInteger("65537"))
);
Cipher rsaCipher = Cipher.getInstance("RSA/ECB/NoPadding");
rsaCipher.init(Cipher.ENCRYPT_MODE, publicKey);
offset = 3;
writeB(rsaCipher.doFinal(buff, offset, 0x80));
если чем-то поможет)) вообще мне кажется лучше взять какие-то готовые либы, чем изобретать велосипед. Кстати - вот везде пишут RSA... RSA, а какой RSA? Там много разновидностей алгоритма (в нашем случае "RSA/ECB/NoPadding") есть и надо знать модуль (65537) - его нигде нету! Пока сам не залез в исходники l2jserver так и не разобрался...

Rzone
01.10.2012, 21:38
Эххх... не могу зашифровать лог пасс. Устал уже... Сделал из этой функции дллку подключил FGint, все скомпилилось. При вызове функции RSAEncrypt
получаю ошибку. Дальше сделал в делфи тестовую программу, что-бы посмотреть как работает функция. Тут вообще не пойми что... Прописал прям внутри функции "от балды" лог пасс и ключ 128 символов (rsakey:string), вывел результат на форму - то работает, то нет. Стоит поменять пару символов в ключе (при том же размере) - все крит эррор.
Я в замешательстве. Есть где-нибудь другие сорцы RSA/ECB/NoPadding? Или готовые библиотеки. посоветуйте что-нибудь.

Вот сорц длл:
library Project1;
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, FGint;


function RSAEncrypt(aa,pp,rsakey:PChar):integer;
var
sD,sR,sM:string;
m,e,d,r:TFGInt;
a,p:string;
begin
a:=string(aa);
p:=string(pp);
if length(a)>14 then setlength(a,14);
while length(a)<14 do a:=a+#0;
if length(p)>16 then setlength(p,16);
while length(p)<16 do p:=p+#0;
for i:=0 to 13 do

sD:=a+p+#0#0#0#0;
sM:=string(rsakey);
Base10StringToFGInt('65537',e);
Base256StringToFGInt(sD,d);
Base256StringToFGInt(sM,m);
FGIntMontgomeryModExp(d,e,m,r); //тут ловлю крит...
FGIntToBase256String(r,sR);

//rsakey:=PChar(sR);
//result:=PChar(sR);
end;

exports RSAEncrypt;

begin
end.

PornoTraktor
01.10.2012, 23:46
терпи казак, атаманом станешь :)

Rzone
02.10.2012, 15:31
Стал атаманом:) фух... два дня возился... пришлось склеить логин пасс и ключ в один PChar передавать в длл одним массивом, там рассортировывать по sD, sM. Шифрует точно как в логе, все пашет, я так рад)
Логин сервер пройден)

PornoTraktor
02.10.2012, 17:49
до мира дошел уже?)

Rzone
02.10.2012, 19:15
Есть где-нибудь описание пакетов 746 протокола? ProtocolVersion клиент отсылает длиной 267 байт, а в С4 было 263 байта:
2 байта размер
1 байт опкод
4 байта версия протокола
256 байт протокол

Кстати, чем гейм сервер шифровать? Все тем же RSA 128 ключом?)

Rzone
04.10.2012, 23:18
Сделал=) Я в игре:) Спасибо NLObP
и огромное спасибо
PornoTraktor