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

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

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

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

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

Внешне вроде очень похоже ) Единственное что в BlowfishEngine.java не нашел аналогий функциям bfDecode и bfEncode Видимо их придется дописывать
Kilatif вне форума   Ответить с цитированием
Старый 10.02.2012, 16:43   #17
Пользователь
 
Регистрация: 29.01.2012
Адрес: г. Минск
Сообщений: 64
Сказал Спасибо: 10
Имеет 5 спасибок в 5 сообщенях
Tin-moon пока неопределено
По умолчанию

Цитата:
Сообщение от Kilatif Посмотреть сообщение
Внешне вроде очень похоже ) Единственное что в BlowfishEngine.java не нашел аналогий функциям bfDecode и bfEncode Видимо их придется дописывать
Они походу есть в других классах, аля логин_крипт, нью_логин_крипт, и бФ_кейген. Сори за русский английский спешил). Только опять же непонятно подойдут эти функции или нет.
Tin-moon вне форума   Ответить с цитированием
Старый 10.02.2012, 19:34   #18
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

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

Kilatif помоги понять что тут происходит?
Код:
      MAX_PKT_SIZE=$FFFF;
      FillChar(main_buff,Length(main_buff),0); // заполнить буфер 0
      Len:=recv(RS_Sock,main_buff,MAX_PKT_SIZE,0); // я так понимаю пишем в буфер но зачем размер MAX_PKT_SIZE, но Len чему будет равно??
      inc(RecvPktCount);            // +1
      LS_parser(main_buff,Len);   // тут непонятно чему будет равна длина??
Первый приходящий пакет 186

Код:
procedure LS_parser(buff: array of byte; Len: integer);
var
  temp: array [0..MAX_PKT_SIZE-1] of char; // какой размер тут будет ??
  s: string;
  i: integer;
begin
  if RecvPktCount=1 then begin
    if buff[2]=0 then DecodeBF:=false
    else DecodeBF:=true;
  end;
  if DecodeBF then begin
    Move(buff[2],temp[0],Len-2);  // вот это критично.. что тут происходит
    bf.bfDecode(temp,Len-2);
    if temp[0]=#0 then begin
      SetLength(s,Len-2);
      for i:=0 to Len-3 do s[i+1]:=temp[i];
      s:=AntiXor(s);
      for i:=0 to Len-3 do temp[i]:=s[i+1];
      //Move(s[1],temp[0],Length(s));
    end;
    Move(temp[0],buff[2],Len-2);
  end;
Пробую уже работать, пока валится наверно из-за Move
Вложения
Тип файла: rar Unit1.rar (2.7 Кб, 59 просмотров)
Tin-moon вне форума   Ответить с цитированием
Старый 11.02.2012, 14:24   #20
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
насчёт move - аналог arraycopy в яве вроде
__________________
Начало.
supernewbie вне форума   Ответить с цитированием
Ответ

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


Опции темы
Опции просмотра

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

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


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

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

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