Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Разработка
Войти через OpenID

Разработка Раздел для совместной разработки/доработки программы

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 10.02.2012, 01:48   #1
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

Наверное самое трудно переносимое из одного языка в другой =) Потому что используется тут большие числа и в каждом языке разные модули для этого. Конкретно что делает процедура:

Код:
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); //если логин > 14 символов обрезаем
  while length(a)<14 do a:=a+#0;        //доводим логин до 14 символов

  if length(p)>16 then setlength(p,16); //если пароль > 16 символов, обрезаем
  while length(p)<16 do p:=p+#0;        //доводим пароль до 16 символов

  sD:=a+p+#0#0#0#0;                     //записывается логин+пароль+4 нулевых байт для нужного размера
  sM:=rsakey;
  Base10StringToFGInt('65537',e);       //инициализируем e числом 65537
  Base256StringToFGInt(sD,d);           //инициализируем d "числом" sD
  Base256StringToFGInt(sM,m);           //аналогично
  FGIntMontgomeryModExp(d,e,m,r);       //выполняется операция r = (d^e) mod m
  FGIntToBase256String(r,sR);           //переводится r в sR
  result:=sR;                           //PROFIT
end;
т.е. получается что да, шифруется сразу блок логин + пароль.

Последний раз редактировалось Kilatif, 10.02.2012 в 01:51.
Kilatif вне форума   Ответить с цитированием
За это сообщение Kilatif нажился спасибкой от:
Старый 10.02.2012, 02:25   #2
Пользователь
 
Регистрация: 29.01.2012
Адрес: г. Минск
Сообщений: 64
Сказал Спасибо: 10
Имеет 5 спасибок в 5 сообщенях
Tin-moon пока неопределено
По умолчанию

FGIntToBase256String(r,sR); //переводится r в sR

Переводится каким способом? Или просто копируется?
Tin-moon вне форума   Ответить с цитированием
Старый 10.02.2012, 02:33   #3
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

Цитата:
Сообщение от Tin-moon Посмотреть сообщение
FGIntToBase256String(r,sR); //переводится r в sR

Переводится каким способом? Или просто копируется?
sR - массив байт
допустим r = 0xAABBCCDDEEFF11223344
тогда sR = {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x11, 0x22, 0x33, 0x44} (порядок записи в массив может будет задом наперед, я точно не помню)
Kilatif вне форума   Ответить с цитированием
Старый 10.02.2012, 14:55   #4
Пользователь
 
Регистрация: 29.01.2012
Адрес: г. Минск
Сообщений: 64
Сказал Спасибо: 10
Имеет 5 спасибок в 5 сообщенях
Tin-moon пока неопределено
По умолчанию

Дошел до переписывания BlowFish.
Возникла проблема с типами данных...

Кто может подсказать BlowFish.pas и BlowfishEngine.java делают одно и тоже? Или придется еще чего дописывать? (во вложении 2 файла)

Возник вопрос, что можно позаимствовать у l2emu сразу их исходников, у них вроде есть много чего похожего, но сильно все запутано
Вложения
Тип файла: rar BlowFish.rar (16.4 Кб, 60 просмотров)

Последний раз редактировалось Tin-moon, 10.02.2012 в 16:11.
Tin-moon вне форума   Ответить с цитированием
Старый 16.02.2012, 09:58   #5
Пользователь
 
Регистрация: 29.01.2012
Адрес: г. Минск
Сообщений: 64
Сказал Спасибо: 10
Имеет 5 спасибок в 5 сообщенях
Tin-moon пока неопределено
По умолчанию

Цитата:
Сообщение от Kilatif Посмотреть сообщение
Код:
  FGIntMontgomeryModExp(d,e,m,r);       //выполняется операция r = (d^e) mod m
r = (d возводим в степень e) берем по модулю m ?

у меня почему-то m отрицательное получается....

Последний раз редактировалось Tin-moon, 16.02.2012 в 10:17.
Tin-moon вне форума   Ответить с цитированием
Старый 16.02.2012, 13:35   #6
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

Tin-moon, значение m ты задаешь сам. Как оно у тебя отрицательное получиться оО?
Kilatif вне форума   Ответить с цитированием
Старый 16.02.2012, 17:41   #7
Пользователь
 
Регистрация: 29.01.2012
Адрес: г. Минск
Сообщений: 64
Сказал Спасибо: 10
Имеет 5 спасибок в 5 сообщенях
Tin-moon пока неопределено
По умолчанию

Цитата:
Сообщение от Kilatif Посмотреть сообщение
Tin-moon, значение m ты задаешь сам. Как оно у тебя отрицательное получиться оО?
Возникла проблема. Отправляю пакет RequestAuthLogin. Сервер не ругается, создает новый акаунт, но имя просто бредовое. В чем может быть проблема?

Нашел ошибку не дописал 1 байт.
Полоностью переписал функционал того что было на делфи.

Что теперь делать??

Последний раз редактировалось Tin-moon, 16.02.2012 в 19:17.
Tin-moon вне форума   Ответить с цитированием
Старый 16.02.2012, 19:46   #8
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

Tin-moon, тебе в конечном итоге должен был придти пакет PlayOk. Когда он пришел, берешь оттуда нужные данные, закрываешь соединение с логин сервером и открываешь соединение с GameServer-ом, к которому тебе нужно подключиться. IP и порты GameServer-ов тебе приходили в пакете ServerList. Какие пакеты тебе нужно отсылать и принимать после установки соединения, можешь посмотреть, зайдя в игру с включенным l2phx. Нужные тебе пакеты для входа в мир начинаются с ProtocolVersion и заканчиваются EnterWorld.

Что касается шифрации.
Первые 2 пакета не шифруются (ProtocolVersion(Client->GS) и KeyInit(GS->Client)).
Пакеты после KeyInit шифруются xor-шифрованием со сменой ключа. Первый ключ берется в пакете KeyInit, остальные берутся из следующих пакетов.
Во вложении класс для работы с этим xor-шифрованием
Вложения
Тип файла: txt CryptXor.txt (2.4 Кб, 61 просмотров)
Kilatif вне форума   Ответить с цитированием
За это сообщение Kilatif нажился 2 спасибками от:
Старый 17.02.2012, 23:08   #9
Пользователь
 
Регистрация: 29.01.2012
Адрес: г. Минск
Сообщений: 64
Сказал Спасибо: 10
Имеет 5 спасибок в 5 сообщенях
Tin-moon пока неопределено
По умолчанию

Цитата:
Сообщение от Kilatif Посмотреть сообщение
закрываешь соединение с логин сервером и открываешь соединение с GameServer-ом, к которому тебе нужно подключиться.
Возник вопрос по реализации логики открытия и закрытия сокетов.
Суть:
Написал абстрактный класс для работы с сокетом (с общей логикой) унаследованный от потока. Создал 2 класса для реализации Логики работы с логин сервером и для работы с гейм сервером. Логин часть отрабатывает, а запустить гейм часть не получается.... Или ошибки или закрывается полностью приложение....
Мб какой совет есть (по структуре приложения).

И ще возник вопрос:
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
или
Код:
Назначение: передает версию протокола используемого клиентом серверу
Формат:
00
XX XX XX XX		// Версия протокола

Последний раз редактировалось Tin-moon, 17.02.2012 в 23:16.
Tin-moon вне форума   Ответить с цитированием
Старый 18.02.2012, 03:42   #10
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

Tin-moon, у меня с сокетами тоже не все впорядке, поэтому врятли тебе в этом помогу) Что касается ProtocolVersion. Я посылаю первый вариант, т.е. с константой, просто потому что так делает клиент, хотя прокатывает и второй.
Kilatif вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Разработка



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

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


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

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

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