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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 22.06.2009, 10:46   #61
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Yegor, а ты что по RSA шифруешь? логин(14 символов) + пароль(16 символов) + 4 нулевых байта?
RSA ключ дескремблируешь?
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 22.06.2009, 18:10   #62
Рыцарь
 
Аватар для dmitry501
 
Регистрация: 01.10.2007
Сообщений: 293
Сказал Спасибо: 42
Имеет 50 спасибок в 37 сообщенях
dmitry501 пока неопределено
По умолчанию

Цитата:
Сообщение от xkor Посмотреть сообщение
Yegor, а ты что по RSA шифруешь? логин(14 символов) + пароль(16 символов) + 4 нулевых байта?
RSA ключ дескремблируешь?
Ты бы вместо страшных слов дал ссылку на то что они значат
dmitry501 вне форума   Ответить с цитированием
Старый 22.06.2009, 18:42   #63
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

dmitry501, да блин, как дескремблировать RSA ключ тока на этом форуме написано минимум в 2х темах, одна из которых то ли прямо под этой то ли через одну...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 22.06.2009, 23:49   #64
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

xkor, да я все эти темы перерыл все нашел. Дескремблирую ключ твоей функцией, скремблирую функцией из примера la2_client_emu. Вот как там пакет строится :

procedure RequestAuthLogin(login,password: string);
var
data: array[0..175] of byte;
crypt_text: string;
begin
FillChar(data,Length(data),0);
crypt_text:=RSAEncrypt(login,password,RepairKey(rs aKey2));
Move(crypt_text[1],data[1],128);
Move(GGAuthResponse,data[129],4);
data[149]:=8;
AddCheckSumm(Data,160);

SendPkt(Data,176);
end;

один нюанс в описании пакетов http://www.la2kings.ru/la2bot/packets.html в этом пакета видно что перед логином идут не все нули а есть один символ $20, может это не опечатка?

RequestAuthLogin (RSA)


Формат:
AA 00 // Длина
00 // Тип
[начало зашифрованного блока]
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20
00 00 XX XX XX XX XX XX XX XX XX XX XX XX XX XX // Login (учтите, эта строка - массив из 14 символов)
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX // Password (... из 16 символов ...)
[конец зашифрованного блока]
XX XX XX XX // GGAuthResponse из GGAuth
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
08 00 00 00 00 00 00 00 00
XX XX XX XX // чексумма
00 00 00 00

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

Yegor, не опечатка, правда для чего нужен этот байтик непонятно...
ЗЫ кстати думаю уже можно сказать что именно в этом байтике заключалась защита шоков на интерлюдии, тока значение там было другое)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 23.06.2009, 01:24   #66
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

xkor, дак а сейчас что ставить? это же RSA на 1 бит будет отличаться этот массив и совем другой будет сразу вид пакетов


Ураааааааааааа!!!!!!!!!!!!! Я зделал это, ну конечно благодаря вашей помощи.


Авторизация на Логин-сервере прошла успешно
RS disconnected



function RSAEncrypt(a,p,rsakey:string):string;
var
zSt: string;
sD,sR,sM:string;
m,e,d,r:TFGInt;
begin
//это то что добавил без этого никак
SetLength(zSt, 98);
FillChar(zSt[1], Length(zSt), 0);
zSt[95]:= #$20;


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:=zSt+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;

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

Yegor, гы, по началу возникло странное чувство откуда код такой похожий на тот что у меня, потом вспомнил что я его сам когда то где то списал)
ЗЫ счас то я не FGInt использую а GMP, пашет в 20 раз быстрее и не глючит (FGInt изредка бывает ошибается вроде)
вот как у меня было кста:
delphi Код:
function RSAEncrypt(a, p: string; var rsakey): string; var   sD,sR,sM:string;   m,e,d,r: TFGInt; begin   RSAkeyDecode(rsakey);   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:=#$20#0#0+a+p+#0#0#0#0;   SetLength(sM,128);   Move(rsakey,sM[1],128);   Base10StringToFGInt('65537',e);   Base256StringToFGInt(sD,d);   Base256StringToFGInt(sM,m);   FGIntMontgomeryModExp(d,e,m,r);   FGIntToBase256String(r,sR);   result:=sR; end;
ЗЫ нули перед тем неизвестным байтиком бессмысленны ибо это всё равно что написать 000000340, что будет равно 340
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Старый 23.06.2009, 03:25   #68
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

да действительно до байта с $20 нули необязательно ставить, результат один и тот же. По алгоритму это просто одно большое 128 байтное число.
И что такое GMP?

Это просто другая библиотека для работы с этими числами? Я на их сайте http://gmplib.org/ нашел только исходники под С.

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

Yegor, угу, тока на С она, но нам нужны не сорцы а libgmp-3.dll
воть импорт всех функций которые для РСА могут потребоваться:
delphi Код:
mpz_t = record     mp_alloc,     mp_size: Integer;     mp_d:    Pointer;   end; const   gmpdll = 'libgmp-3.dll'; procedure mpz_init(var Dest: mpz_t); cdecl;   external gmpdll name '__gmpz_init'; procedure mpz_init_set_ui(var Dest: mpz_t; Src: Cardinal); cdecl;   external gmpdll name '__gmpz_init_set_ui'; procedure mpz_clear(var Dest: mpz_t); cdecl;   external gmpdll name '__gmpz_clear'; procedure mpz_powm(var Dest: mpz_t; const Base, Exponent, Modulus: mpz_t); cdecl;   external gmpdll name '__gmpz_powm'; procedure mpz_powm_ui(var Dest: mpz_t; var Base: mpz_t; Exponent: Cardinal;   const Modulus: mpz_t); cdecl;   external gmpdll name '__gmpz_powm_ui'; function  mpz_probab_prime_p(var Src: mpz_t; Repetitions: Integer): Integer; cdecl;   external gmpdll name '__gmpz_probab_prime_p'; procedure mpz_add_ui(var Dest: mpz_t; var Src1: mpz_t; Src2: Cardinal); cdecl;   external gmpdll name '__gmpz_add_ui'; procedure mpz_random(var Dest: mpz_t; MaxSize: Integer); cdecl;   external gmpdll name '__gmpz_random'; procedure mpz_nextprime(var Dest: mpz_t; var Src: mpz_t); cdecl;   external gmpdll name '__gmpz_nextprime'; procedure mpz_mul(var Dest: mpz_t; var Src1, Src2: mpz_t); cdecl;   external gmpdll name '__gmpz_mul'; procedure mpz_sub_ui(var Dest: mpz_t; var Src1: mpz_t; Src2: Cardinal); cdecl;   external gmpdll name '__gmpz_sub_ui'; function  mpz_invert(var Dest: mpz_t; var Src, Modulus: mpz_t): Integer; cdecl;   external gmpdll name '__gmpz_invert'; function  mpz_get_str(Dest: PAnsiChar; Base: Integer; var Src: mpz_t): PAnsiChar; cdecl;   external gmpdll name '__gmpz_get_str'; procedure mpz_mul_ui(var Dest: mpz_t; var Src1: mpz_t; Src2: Cardinal); cdecl;   external gmpdll name '__gmpz_mul_ui'; procedure mpz_mul_si(var Dest: mpz_t; var Src1: mpz_t; Src2: Integer); cdecl;   external gmpdll name '__gmpz_mul_si'; procedure mpz_mod(var Dest: mpz_t; var Src1,Src2: mpz_t); cdecl;   external gmpdll name '__gmpz_mod'; function  mpz_cmp_si(var Src1: mpz_t; Src2: Integer): Integer; cdecl;   external gmpdll name '__gmpz_cmp_si'; procedure mpz_cdiv_q(var Dest: mpz_t; var Src1, Src2: mpz_t); cdecl;   external gmpdll name '__gmpz_cdiv_q'; function  mpz_size(var Src1: mpz_t): Integer; cdecl;   external gmpdll name '__gmpz_size'; procedure mpz_import(var rop: mpz_t; count, order, size, endian,   nails: Cardinal; const op); cdecl;   external gmpdll name '__gmpz_import'; procedure mpz_export(var rop, count; order, size, endian,   nails: Cardinal; const op: mpz_t); cdecl;   external gmpdll name '__gmpz_export';
реализации функций шифрования/дешифрования и генерации ключей пока публиковать не буду...

Добавлено через 1 час 8 минут
libgmp-3.dll кстати можно взять из l2encdec, он тоже на ней работает
__________________
Я здесь практически не появляюсь!, Skype - ikskor

Последний раз редактировалось xkor, 23.06.2009 в 20:20. Причина: Добавлено сообщение
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Старый 24.06.2009, 12:01   #70
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

xkor,ну для того чтобы реализовать алгоритм RSA нужно его знать, а так жедля использования библиотеки GMP нужно значть что делает ккждая ее функция. Я как понял она сделана в певую очередь для математичесских операций над большими числами. Сейчас я изучаю алгоритм RSA.

Добавлено через 9 часов 17 минут
Чисто из интереса решил проверить этот алгоритм сами знаете на каком сервере - логин сервер проходит успешно. Там наверно в отличие от шока сильно перекручена шифрация на гейм сервере.

Все полностью доделал процесс входа в мир. Вставил все в своего мини бота. Карта с игроками загружаеться через 0,5 секунды после нажатия кнопки "логин". Непойму почему стандартный волкер так долго чухаеться, хотя может специально ждет дабы не вызывать лишних подозрений.

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


Что за тишина на форуме, люди вы где? Я наверно создам у себя на машине текстовый файл и буду там сам с собой переписываться, разницы не будет никакой

Последний раз редактировалось Yegor, 25.06.2009 в 15:45. Причина: Добавлено сообщение
Yegor вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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