dmitry501, да блин, как дескремблировать RSA ключ тока на этом форуме написано минимум в 2х темах, одна из которых то ли прямо под этой то ли через одну...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
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, не опечатка, правда для чего нужен этот байтик непонятно...
ЗЫ кстати думаю уже можно сказать что именно в этом байтике заключалась защита шоков на интерлюдии, тока значение там было другое)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
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, гы, по началу возникло странное чувство откуда код такой похожий на тот что у меня, потом вспомнил что я его сам когда то где то списал)
ЗЫ счас то я не 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);
iflength(a)>14thensetlength(a,14);
whilelength(a)<14do a:=a+#0;
iflength(p)>16thensetlength(p,16);
whilelength(p)<16do 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
да действительно до байта с $20 нули необязательно ставить, результат один и тот же. По алгоритму это просто одно большое 128 байтное число.
И что такое GMP?
Это просто другая библиотека для работы с этими числами? Я на их сайте http://gmplib.org/ нашел только исходники под С.
Последний раз редактировалось Yegor, 23.06.2009 в 10:11.
xkor,ну для того чтобы реализовать алгоритм RSA нужно его знать, а так жедля использования библиотеки GMP нужно значть что делает ккждая ее функция. Я как понял она сделана в певую очередь для математичесских операций над большими числами. Сейчас я изучаю алгоритм RSA.
Добавлено через 9 часов 17 минут
Чисто из интереса решил проверить этот алгоритм сами знаете на каком сервере - логин сервер проходит успешно. Там наверно в отличие от шока сильно перекручена шифрация на гейм сервере.
Все полностью доделал процесс входа в мир. Вставил все в своего мини бота. Карта с игроками загружаеться через 0,5 секунды после нажатия кнопки "логин". Непойму почему стандартный волкер так долго чухаеться, хотя может специально ждет дабы не вызывать лишних подозрений.
Наконецто на шоке устранили проблемму зависания вылетевшего персонажав игре на неопределенное время. Как и раньше теперь при повторной попытке зайти игрока выбрасывает из игры.
Что за тишина на форуме, люди вы где? Я наверно создам у себя на машине текстовый файл и буду там сам с собой переписываться, разницы не будет никакой
Последний раз редактировалось Yegor, 25.06.2009 в 15:45.
Причина: Добавлено сообщение