PDA

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


st01en
09.12.2007, 07:28
Уважаемые программеры и xkor в частности,


В целях подтянуть программщину а заодно облегчить себе жизнь в л2 решил написать что-то типа сигнализации о приближении врага.
Пакетики от ГС принимаю успешно, но никак не могу разобратся как их расшифровывать.
Скачал модули (l2cript.zip) с вашего сайта, я так понимаю оттуда мне нужен только CryptXOR.pas
Вот только всеравно затрудняюсь понять что нужно делать.
Просмотрел несколько форумов и видел что подобные темы поднимались, но нигде четкого ответа не увидел :(
Сам уже неделю ломаю голову, но методом тыка не охота работать, а понять алгоритм расшифровки не могу.

Мог бы кто-то по доброте душевной показать на примере что нужно накодить(было бы замечательно если с коментами)?
Насколько я понял из прочтения форумов/статей, пакеты от и к ГС шифруются отдельно, т.е. исходящие мне можно не ловить.

Скажем от сервера я получаю пакеты (приведу первых 4):

10 00 00 01 F2 37 00 00 01 00 00 00 05 00 00 00
1-й пакет от ГС, в нем передается ключ шифрования.

44 01 E1 D7 D7 D7 76 57 03 C5 37 4B 4B 12 B3 92 C6 77 85 F3 F3 F3 52 1B D0 54 A6 F5 F5 8C 2D 23 77 94 66 34 34 46 E7 EE BA 4B B9 E1 E1 E1 40 80 AE 2F DD EA EA EA 4B 27 73 F4 06 31 31 31 90 FE AA 2D DF F7 F7 F7 56 3B 6F E8 1A 1C 37 37 96 3F 2A AD 5F B8 55 AA F4 9C 9E 17 C8 4D 38 53 B2 02 AF 56 CE 45 D1 87 66 2E 7E F9 0B 9C F8 F8 59 3D 69 EE 1C 2B 2B 2B 8A E6 B2 35 C7 F0 F0 F0 51 3D 69 EE 1C 2B 2B 2B 8A E6 B2 35 C7 F0 F0 F0 51 3D 69 EE 1C 2B 2B 2B 8A E6 B2 35 C7 F0 F0 F0 51 3D 69 EE 1C 2B 2B 2B 8A E6 B2 35 C7 FF C4 0E AE C2 96 11 E3 02 38 F2 52 B0 F3 B1 42 7F 66 A3 03 85 EB A6 55 F2 E5 20 80 7D 3E 7C 8F B8 B8 B8 19 75 21 A6 54 63 63 63 C2 AE FA 7D 8F B8 B8 B8 19 75 21 A6 54 63 63 63 C2 AE FA 7D 8F CC CC CC 6D 01 55 D2 20 3E 3E 3E 9F B2 EF 68 9A BF BF BF 1E 42 16 91 63 2E 2A 2A 8B 9C CC 4B B9 8E 8E 8E 2F 43 17 90 62 55 55 55 F4 98 CC 4B B9 8D 8D 8D 2C 41 15 92 60 56 56 56 F7 98 9A 13 CC 49 3C 57 B6 06 AB 52 CA 41 D5 83 62 0E 5A DD 2F 07 07 07 A6 CB 9F 18 EA DD
2-й пакет, тут насколько я понял юзая l2phx, инфа о выбраном по умолчанию чару.

05 00 CC F7 F6
3-й пакет, SSQInfo, каким цветом небо с луной красить

19 01 22 56 56 17 B6 91 C5 1B 2C 58 58 6E CF E2 B6 31 06 1A 85 86 27 4B 1F 34 79 46 46 46 E7 8B DF 58 6F 56 56 56 F7 9B CF 4A 7D 44 44 5B FA 96 C2 44 73 4A 4A 7B F1 9D C9 8B FD C4 C4 14 58 CB 60 E3 82 B5 98 2A FE F9 ED B6 78 3F 55 E9 DC E6 F2 51 62 5B 5B FB 3E 52 06 89 BE 87 87 87 26 4A 1E 99 AE 97 97 BE 1F 73 27 82 B5 8C 8C AC 0D 61 35 AB 9C A5 A5 A9 08 64 30 AD 9A A3 A3 A3 02 6E 3A BD 8A B3 B3 B3 12 7E 2A AD 9A A3 A3 A3 02 6E 3A BD 8A B3 B3 B3 12 7E 2A AD 9A A3 A3 A3 02 6E 3A BD 8A B3 B3 B3 12 7E 2A AD 9A A3 A3 A3 02 6E 3A BD 8A B3 B3 B3 12 7E 2A AD 9A A3 A3 A3 02 6E 3A BD 8A B3 B3 B3 12 7E 2A AD 9A A3 A3 A3 02 6E 3A BD 8A B3 B3 B3 12 7E 2A AD 9A A3 A3 A3 02 6E 3A BD 8A B3 B3 B3 12 7E 2A AD 9A A3 A3 A3 02 6E 3A BD 8A B3 B3 B3 12 7E 2A AD 9A A3 A3 52 F6 9A CE 49 7E 47 47 58 F9 95 C1 46 71 48 48 48 E9 85 D1 56 61 58 58 58 F9 95 C1
4-й пакет, выбраный чар, им дальше будем входить в мир

Ну и дальше все шифруется по тому же принципу.
Пакеты эти у меня хранятся в TStringList (мб их не в строках как-то хранить нужно)?

Хотелось бы увидеть функцию которая получает пакет в вышеприведенном виде и отдает расшифрованый пакет (с использованием CryptXOR.pas или без. "без" будет мне понятней, "с" будет вам быстрее).


Спасибо.

xkor
09.12.2007, 14:22
блин ну посмотри как пакетхаке расшифровываются...
ЗЫ да и что CryptXOR.pas непонятно?, юзаем Init и передаёш в качестве параметра ключ (если ключ в пакете pck в виде строки то пишем pck[4] в параметр, но это если строка обычная (тоесть массив байт) а не как у тя в виде хекса...)
далее для каждого приходящего пакета юзаем DecryptGP(pck[2],Length(pck)-2) если pck это весь пакет включая размер и тоже в виде обычной строки (String типа имеется в виду...)

st01en
11.12.2007, 04:25
Здравствуйте xkor и остальные,

Возможно, что все действительно просто, но прошу сделать скидку на то, что я "программист" самоучка, так что возможно некоторые элементарные вещи мне кажутся сложными.

Посмотрите, пожалуйста, на прикрепленную тестовую программку, что там не так?

P.S. Функции StringToHex и HexToString нагло выдраны из исходников l2phx'a :twisted: , не судите строго O:-)

Спасибо.

xkor
11.12.2007, 17:17
ну на первый взгляд всё так, дома гляну по вторым взглядом а то тут дельфика нет)

stirena
11.12.2007, 17:48
На первый взгляд:
надо поправить вот в этой строчке

l2.DecryptGP(pck[3],length(pck)-2);

т.к у string нету 0-го символа, они начинаются с 1

st01en
12.12.2007, 15:04
На первый взгляд:
надо поправить вот в этой строчке

l2.DecryptGP(pck[3],length(pck)-2);

т.к у string нету 0-го символа, они начинаются с 1
Да, похоже, что именно в этом и была загвоздка. Плюс я еще немного неправильно пакеты ловил изначально (в первом посте, поправил, чтоб не вводить в заблуждение тех кто, возможно, столкнется с такой же проблемой). Вот такой код работает:

if ListBox1.ItemIndex = 0 then
l2.InitKey(pck[5])
else
l2.DecryptGP(pck[3],length(pck)-2);

Спасибо.

st01en
16.01.2008, 04:14
Здравствуйте,

Извините что я опять пристаю с скорей всего глупым вопросом.

Небольшое предисловие:
Как я уже писал я вообщем то не программист, так для души, для себя балуюсь.
Так вот, все мое «программирование» - это сдирание кусков кода из различных источников и объединение их в одно целое с добавлением своих алгоритмов. Дешифрацию пакетов я взял у xkor'а.

Собственно теперь о моей очередной проблеме:
Ловлю пакеты я куском кода, содранным из прикрепленной программы (главный модуль monmain.pas ну и все необзодимые ему подключаемые), вообщем то там все модули готовы и особых проблем с этим нет, кроме одной. При логине в игру на определенном этапе (в самом начале, 8-й или9-й пакет от сервера) должен прийти пакет с id F3 и размером 23 байта, но дело в том что мне этот пакет приходит с правильным id но размером 1452 байт (и в дальнейшем я получаю еще пакеты такого размера, более длинного пакета не получил ни разу, причем не только от л2 но и от любой программы, закачка, аудио-вещание, видео и т.п.). Так вот, первые 23 байта соответствуют тому, что ловится в l2phx, но дальше что-то не понятное. Более того, если верить l2phx(а я верю) я должен получить таких пакетов (F3) несколько подряд, чего у меня не происходит, т.е. l2phx ловит больше пакетов, чем моя программа. В итоге все дальнейшие пакеты у меня расшифровываются неправильно и я, честно говоря, даже не уверен, что они правильно ловятся.

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

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

Возможно, немного сумбурно, но голова уже кипит от всего этого, если что-то не понятно – просто спросите, постараюсь объяснить более подробно.

Cпасибо.

xkor
16.01.2008, 16:16
У меня проскакивала идея, что несколько пакетов подряд склеиваются в один
собсно так и есть, причём ты ловиш TCP пакет, и в нем может быть как целое число пакетов линейки так и не целое, тоесть игровой пакет может начинаться в одном TCP пакете а заканчиваться в другом
вобщем логика твоих действий должна быть примерно такой:
при поступлении пакета ты добавляеш его в буфер, а затем начинаеш из буфера вытаскивать игровые пакеты читая первые два байта в которых указана длинна пакета, а затем оставшиеся байты согласно размеру который тока что узнал (за вычетом уже прочитанных 2х байт), далее удаляеш из буфера прочитанный пакет, обрабатываеш его и если в буфере ещё есть данные опять читаеш два байта в которых указан размер следующего пакета и если в буфере есть ещё стока байт то опять читаеш оставшиеся, а если в буфере осталось меньше данных чем указано, значит остаток пакета ещё не пришёл поэтому надо ждать нового TCP пакета чтоб добавить его данные в конец буфера ну а дальше всё по старому)

Добавлено спустя 1 минуту 25 секунд:
кстати некоторые сниферы могут один и тот же TCP пакет выдавать дважды подряд иногда, при этом естественно тоже всё собьётся так что если будет наблюдаться такое явление то придётся ещё фильтр повторов сделать...

16.01.2008, 21:51
Это для интерлюдии или для камаэлей?

st01en
19.01.2008, 14:29
Спасибо xkor, все действительно оказалось просто, если бы был внимательней - сам бы догадался.

Это для интерлюдии или для камаэлей?это для души :wink:

Спасибо еще раз.

19.01.2008, 15:21
В камаэлях первый пакет с ключем - 15h длиной :cry: не могу найти описалово ее

st01en
08.02.2008, 10:27
Опять я в поисках пинка который задаст мне правильную траекторию.

Очень удачный пример сегодня получился что б показать свою проблему.
Стою возле непися который периодически машет ручкой, сегодня получилось поймать 10 пакетиков подряд без вкрапления других пакетов:

0B 00 2D 4F 66 10 48 02 00 00 00
0B 00 2D 80 66 10 48 02 00 00 00
0B 00 2D 37 66 10 48 02 00 00 00
0B 00 2D 3E 66 10 48 02 00 00 00
0B 00 2D 74 66 10 48 02 00 00 00
0B 00 2D 7B 66 10 48 02 00 00 00
0B 00 2D 7D 66 10 48 02 00 00 00
0B 00 56 7D 66 10 48 02 00 00 7B
0B 00 24 3E 66 10 48 02 00 00 09
0B 00 32 77 66 10 48 02 00 00 1F
Собственно ворос, что произошло на 8-м пакете из этих десяти?

В сумме это где-то около 700-го пакета от сервера, но бывает что шифрация сбивается и раньше.
Итак, куда мне копать, чего я еще не знаю?

Спасибо.

st01en
08.02.2008, 10:27
Опять я в поисках пинка который задаст мне правильную траекторию.

Очень удачный пример сегодня получился что б показать свою проблему.
Стою возле непися который периодически машет ручкой, сегодня получилось поймать 10 пакетиков подряд без вкрапления других пакетов:

0B 00 2D 4F 66 10 48 02 00 00 00
0B 00 2D 80 66 10 48 02 00 00 00
0B 00 2D 37 66 10 48 02 00 00 00
0B 00 2D 3E 66 10 48 02 00 00 00
0B 00 2D 74 66 10 48 02 00 00 00
0B 00 2D 7B 66 10 48 02 00 00 00
0B 00 2D 7D 66 10 48 02 00 00 00
0B 00 56 7D 66 10 48 02 00 00 7B
0B 00 24 3E 66 10 48 02 00 00 09
0B 00 32 77 66 10 48 02 00 00 1F
Собственно ворос, что произошло на 8-м пакете из этих десяти?

В сумме это где-то около 700-го пакета от сервера, но бывает что шифрация сбивается и раньше.
Итак, куда мне копать, чего я еще не знаю?

Спасибо.

xkor
09.02.2008, 01:23
В сумме это где-то около 700-го пакета от сервера, но бывает что шифрация сбивается и раньше.
Итак, куда мне копать, чего я еще не знаю?

Спасибо.
ну незная что ты знаеш мы врятли скажем чего ты незнаеш :wink:

xkor
09.02.2008, 01:23
В сумме это где-то около 700-го пакета от сервера, но бывает что шифрация сбивается и раньше.
Итак, куда мне копать, чего я еще не знаю?

Спасибо.
ну незная что ты знаеш мы врятли скажем чего ты незнаеш :wink:

st01en
09.02.2008, 19:50
Ну я хотел имел виду, что не знаю какие подводные камни могут привести к такому сбою в расшифровке.
Например если исходить из того, что я ничего не знаю, но быстро учусь :crazy: . Можете что-то посоветовать?

Добавлено спустя 16 часов 28 минут 20 секунд:
Проверил на всякий случай. Снифер два раза подряд один и тот же пакет не ловит.
Не знаю куда смотреть, все еще осложняется тем что не могу толком l2phx использовать, только через бота на каком-то левом сервере (на моем защита стоит).
Прийду с работы, выложу то что нашкодил, только зарание предупреждаю - не пугайтесь :)

Блин, попался же мне этот сайт на глаза. Играл бы себе и горя не знал, а теперь не высыпаюсь (не обращайте внимания - крик души :crazy:)

st01en
09.02.2008, 19:50
Ну я хотел имел виду, что не знаю какие подводные камни могут привести к такому сбою в расшифровке.
Например если исходить из того, что я ничего не знаю, но быстро учусь :crazy: . Можете что-то посоветовать?

Добавлено спустя 16 часов 28 минут 20 секунд:
Проверил на всякий случай. Снифер два раза подряд один и тот же пакет не ловит.
Не знаю куда смотреть, все еще осложняется тем что не могу толком l2phx использовать, только через бота на каком-то левом сервере (на моем защита стоит).
Прийду с работы, выложу то что нашкодил, только зарание предупреждаю - не пугайтесь :)

Блин, попался же мне этот сайт на глаза. Играл бы себе и горя не знал, а теперь не высыпаюсь (не обращайте внимания - крик души :crazy:)

st01en
14.02.2008, 19:14
Вообщем не сразу после работы но тем не менее.
Я сдаюсь, скажите мне что у меня не так, помоему все упростил дальше некуда.
в атаче код (он хавает все подряд пакеты 03, но это сейчас не суть важно так что пусть так будет. А вот почему сбивается шифрация я не пойму, к тому же я так и не смог понять какие для этого требуются условия).

st01en
14.02.2008, 19:14
Вообщем не сразу после работы но тем не менее.
Я сдаюсь, скажите мне что у меня не так, помоему все упростил дальше некуда.
в атаче код (он хавает все подряд пакеты 03, но это сейчас не суть важно так что пусть так будет. А вот почему сбивается шифрация я не пойму, к тому же я так и не смог понять какие для этого требуются условия).

14.02.2008, 22:54
unit monsock;

<...>
{
Also note Windows 2000 SP4 and Windows XP SP2 appear to ignore most sent packets,
but Windows 2003 SP1 correctly captures all (or most) sent packets.

Microsoft is also restricting the use of RAW sockets in recent service packs,
XP SP2 stops raw sockets being used to send data but receive still works.
}

14.02.2008, 22:54
unit monsock;

<...>
{
Also note Windows 2000 SP4 and Windows XP SP2 appear to ignore most sent packets,
but Windows 2003 SP1 correctly captures all (or most) sent packets.

Microsoft is also restricting the use of RAW sockets in recent service packs,
XP SP2 stops raw sockets being used to send data but receive still works.
}

st01en
15.02.2008, 22:50
хм, похоже на правду
но у меня и с WinPcap'oм та же проблема :(
Ну что ж, покрайней мере насколько я понял все остальное, что я понаписывал, работе особо не мешает и нужно копать в сторону сниффера.
Буду искать.
Любые подсказки\советы\etc. приветствуются ;)

Спасибо.

Добавлено спустя 22 часа 40 минут 18 секунд:
Вот тоже, только с использование WinPcap.
Проблема та же, например:

бегу, просто бегу:

1019: 1F 00 01 D8 F7 30 4A 50 3D 02 00 89 64 00 00 09 F8 FF FF 2B 3C 02 00 CF 63 00 00 28 F8 FF FF
1020: 1F 00 26 D8 F7 30 4A 50 3D 02 27 89 64 00 00 09 F8 FF D8 2B 3C 02 00 CF 63 00 27 28 F8 FF FF
1021: 1F 00 EC D9 F7 30 4A A1 3E 02 ED 99 64 00 00 09 F8 FF 12 CA 3C 02 00 34 64 00 ED 29 F8 FF FF

на 1020-м пакете что-то сломалось

Выручите :o

st01en
15.02.2008, 22:50
хм, похоже на правду
но у меня и с WinPcap'oм та же проблема :(
Ну что ж, покрайней мере насколько я понял все остальное, что я понаписывал, работе особо не мешает и нужно копать в сторону сниффера.
Буду искать.
Любые подсказки\советы\etc. приветствуются ;)

Спасибо.

Добавлено спустя 22 часа 40 минут 18 секунд:
Вот тоже, только с использование WinPcap.
Проблема та же, например:

бегу, просто бегу:

1019: 1F 00 01 D8 F7 30 4A 50 3D 02 00 89 64 00 00 09 F8 FF FF 2B 3C 02 00 CF 63 00 00 28 F8 FF FF
1020: 1F 00 26 D8 F7 30 4A 50 3D 02 27 89 64 00 00 09 F8 FF D8 2B 3C 02 00 CF 63 00 27 28 F8 FF FF
1021: 1F 00 EC D9 F7 30 4A A1 3E 02 ED 99 64 00 00 09 F8 FF 12 CA 3C 02 00 34 64 00 ED 29 F8 FF FF

на 1020-м пакете что-то сломалось

Выручите :o

st01en
18.02.2008, 11:06
Up :cry:
если я не ошибаюсь то все упирается в сниффер.
мб ну его нафик то что я понаписывал, если есть исходники на делфи любого друго-го подходящего снифера - прийму с радостью.

st01en
18.02.2008, 11:06
Up :cry:
если я не ошибаюсь то все упирается в сниффер.
мб ну его нафик то что я понаписывал, если есть исходники на делфи любого друго-го подходящего снифера - прийму с радостью.

PanAm
18.02.2008, 14:10
MicroOLAP Packet Sniffer SDK
http://www.microolap.com/ (http://www.microolap.com/) :-)

PanAm
18.02.2008, 14:10
MicroOLAP Packet Sniffer SDK
http://www.microolap.com/ (http://www.microolap.com/) :-)

st01en
18.02.2008, 16:54
Спасибо. Дорого блин, но сейчас с триалом поковыряюсь.

st01en
18.02.2008, 16:54
Спасибо. Дорого блин, но сейчас с триалом поковыряюсь.

lazyfish
17.03.2008, 09:52
st01en, ну и как успехи?

а по поводу тех "ломающихся пакетов", если еще интересно:
если пакет пустой или <60 б, (насколько я понял, операционной системой, и то не каждой) добавляется некая избыточная информация, что б стало как раз 60 байт.
wireshark называет эти байты ethernet trailer'ом, хотя это и не так на самом деле.
http://hardware.mcse.ms/archive102-2005-6-197136.html

это ты, скорее всего, ошибочно принимал за tcp данные.
ну, и, есс-но, если перепосылка пакета или пришли не в том порядке, то тоже все сломается

st01en
08.04.2008, 17:28
st01en, ну и как успехи?Все закончилось плохо. Я забил на л2 + на сервере поставили защиту которая меня не пускает в игру даже просто что б до-разбираться с программкой. Если кто-то сделает что-то такое на делфи и поделится исходниками - буду благодарен, но сам уже заниматься этим не буду.