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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 09.02.2012, 23:05   #1
Пользователь
 
Регистрация: 29.01.2012
Адрес: г. Минск
Сообщений: 64
Сказал Спасибо: 10
Имеет 5 спасибок в 5 сообщенях
Tin-moon пока неопределено
По умолчанию

Возникла проблема вот с этим:
Код:
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;
как переписать отделавшись легким испугом?? Лучше конечно использовать ява функции.

Тут получатся, что шифруется блок "логин+пароль", или отдельно каждое потом записываются в соответствующие места?
Tin-moon вне форума   Ответить с цитированием
Старый 10.02.2012, 01:48   #2
Местный
 
Регистрация: 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   #3
Пользователь
 
Регистрация: 29.01.2012
Адрес: г. Минск
Сообщений: 64
Сказал Спасибо: 10
Имеет 5 спасибок в 5 сообщенях
Tin-moon пока неопределено
По умолчанию

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

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

Tin-moon, значение m ты задаешь сам. Как оно у тебя отрицательное получиться оО?
Kilatif вне форума   Ответить с цитированием
Старый 16.02.2012, 17:41   #8
Пользователь
 
Регистрация: 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   #9
Местный
 
Регистрация: 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 спасибками от:
Старый 10.02.2012, 16:18   #10
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

Внешне вроде очень похоже ) Единственное что в BlowfishEngine.java не нашел аналогий функциям bfDecode и bfEncode Видимо их придется дописывать
Kilatif вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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