Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 09.12.2007, 07:28   #1
Пользователь
 
Регистрация: 09.12.2007
Сообщений: 28
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
st01en
Стрелка Пакеты от ГС

Уважаемые программеры и 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 или без. "без" будет мне понятней, "с" будет вам быстрее).


Спасибо.
st01en вне форума   Ответить с цитированием
Старый 09.12.2007, 14:22   #2
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

блин ну посмотри как пакетхаке расшифровываются...
ЗЫ да и что CryptXOR.pas непонятно?, юзаем Init и передаёш в качестве параметра ключ (если ключ в пакете pck в виде строки то пишем pck[4] в параметр, но это если строка обычная (тоесть массив байт) а не как у тя в виде хекса...)
далее для каждого приходящего пакета юзаем DecryptGP(pck[2],Length(pck)-2) если pck это весь пакет включая размер и тоже в виде обычной строки (String типа имеется в виду...)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 11.12.2007, 04:25   #3
Пользователь
 
Регистрация: 09.12.2007
Сообщений: 28
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
st01en
По умолчанию Re: Пакеты от ГС

Здравствуйте xkor и остальные,

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

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

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

Спасибо.
st01en вне форума   Ответить с цитированием
Старый 11.12.2007, 17:17   #4
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

ну на первый взгляд всё так, дома гляну по вторым взглядом а то тут дельфика нет)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 11.12.2007, 17:48   #5
Пользователь
 
Регистрация: 08.08.2007
Адрес: гандурас
Сообщений: 20
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
stirena
По умолчанию

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

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

т.к у string нету 0-го символа, они начинаются с 1
stirena вне форума   Ответить с цитированием
Старый 12.12.2007, 15:04   #6
Пользователь
 
Регистрация: 09.12.2007
Сообщений: 28
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
st01en
По умолчанию Re:

Цитата:
Сообщение от stirena
На первый взгляд:
надо поправить вот в этой строчке

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   #7
Пользователь
 
Регистрация: 09.12.2007
Сообщений: 28
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
st01en
По умолчанию Re: Пакеты от ГС

Здравствуйте,

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

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

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

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

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

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

Cпасибо.
st01en вне форума   Ответить с цитированием
Старый 16.01.2008, 16:16   #8
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

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

Добавлено спустя 1 минуту 25 секунд:
кстати некоторые сниферы могут один и тот же TCP пакет выдавать дважды подряд иногда, при этом естественно тоже всё собьётся так что если будет наблюдаться такое явление то придётся ещё фильтр повторов сделать...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 16.01.2008, 21:51   #9
Гость
 
Сообщений: n/a
По умолчанию

Это для интерлюдии или для камаэлей?
  Ответить с цитированием
Старый 19.01.2008, 14:29   #10
Пользователь
 
Регистрация: 09.12.2007
Сообщений: 28
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
st01en
По умолчанию

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

Цитата:
Сообщение от Фауст
Это для интерлюдии или для камаэлей?
это для души :wink:

Спасибо еще раз.
st01en вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 22:36.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!