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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 23.04.2010, 16:29   #1
Новичок
 
Регистрация: 23.04.2010
Сообщений: 11
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
mr_green пока неопределено
По умолчанию Проблема с дешифрацией пакета Init и RequestAuthLogin

Добрый день.
Разбираюсь с протоколом обмена пакетами от логин сервера клиенту и от клиента логин серверу. Сервер Gracia Final. Опишу проблему:
Есть Init пакет от сервера
Код:
BA 00 54 9D 09 44 0C 5A 1C 20 26 16 C7 7B 3B DF 
D5 1B 90 3D CD F9 9E FD C5 1E 4A A7 83 B1 A0 11
73 2C 7D 32 EC DD DC FA 20 84 B1 F9 74 DA 47 02 
03 53 BB 37 6E 4D 82 24 B9 B8 E8 FB F1 43 2E 09 
C1 42 9F FA 25 7E 87 E8 6C 1D 34 6F 0B FB 5A F5 
F0 CD 4D 11 E2 A0 A2 82 35 78 1B 8F D0 12 7E F0 
70 4A E8 AE 95 75 F0 C0 23 9B 5D E2 E4 D4 B6 E2 
35 4A EA D0 12 9D 6E 35 4C 93 AB 24 B5 4C 7D 1F 
21 BE 5E DA 43 1A D0 51 86 B3 7B D3 A1 45 59 8F 
15 CF D3 96 6B 0F 56 D5 40 BA 35 21 CD 53 D3 95
B2 7A 22 79 67 31 94 77 3B F0 00 6D 38 3A 11 88
3E 6D AC 03 CB 3F 4D C7 87 F1
Расшифровали его, получили (раскидал по строчкам для удобства):
Код:
00
B8 58 00 00 
21 C6 00 00 
E4 FE 76 80 3B 52 53 27 A1 CD DD EC 57 B4 50 51 23 A3 5A 65 10 34 70 BE 20 04 2C AA 0F 77 14 0F 70 DA C8 35 07 1E 1F 53 50 E9 B3 A4 80 66 42 AD 90 BC 2D F9 AC 96 98 E1 CD 7F FF 75 90 5A 9F 6E 54 7C F7 CB 8B 68 F9 C3 98 55 85 9B E6 38 3A 67 85 00 81 38 01 BD 02 95 D9 C0 E4 F3 ED 30 AF EB BB 8F CE 61 A0 C6 EF C5 61 0C F8 00 DB 88 79 72 33 4A 15 15 F7 A0 10 06 61 91 F3 49 01 66 5E 9B 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
44 0E 96 F7 FB 9F 7B 66 29 66 D5 F8 C2 9E 5C 5E
14 E6 7F 1F 8F 67 82 
FA DD AB FE 
6C EA 53 54
Пакет от клиента RequestAuthLogin
Код:
B2 00 12 38 BF 78 4F 10 EF 89 E7 A4 78 A6 CB A1
4B 2E F4 4B FE 8C 9B B0 F0 F0 09 25 27 4E 58 D4
AD 90 02 B0 68 97 33 73 00 27 CC 0F B9 35 CB A2
26 FC 23 11 AA 4B 78 26 18 0F AB 13 A6 53 E2 3A
58 A5 B7 A5 E0 98 34 F5 B8 D1 A3 B0 C4 08 93 40 
12 71 A1 06 86 F6 2A AA C9 93 48 4A 1E BF 37 6E
C4 84 2D 13 7B C6 96 BF 7C 50 F9 F2 37 24 F3 9E 
B3 EA F1 B6 82 20 C8 69 A2 46 AF 32 A3 6A 78 C6
D9 F3 2C 14 42 E3 1D 43 91 14 9F ED 37 7D A3 B8
31 14 04 00 B3 29 AE 0C 50 26 9F ED 37 7D A3 B8
31 14 BE 24 61 A1 60 CB 7E 97 9F ED 37 7D A3 B8 
31 14
Расшифровали его, получили (раскидал по строчкам для удобства):
Код:
00 
12 C8 0E 6F AE B2 8A FF 3A 3A AC 35 06 41 DA 6F 8E 04 82 A7 86 7D 1B 74 A2 53 2C 50 D7 80 1D 70 0F 38 6F D9 FC 18 37 D7 17 C2 8B 85 DD 47 87 68 FA 3C 6C CF 69 75 F0 79 23 03 B8 75 01 CA 2F 0F 9D A6 A1 3C DF FA 61 07 33 41 C9 7B F6 AB FC 3A C7 B4 0A 60 44 83 F4 DF AF 85 D6 09 C2 DA 19 AB 09 BC D1 03 85 F2 6D A3 BF 77 24 06 AC B8 E1 B4 17 E4 9E AB 01 ED 2F FB 85 02 9A 56 B8 E8 9E 90 
B8 58 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 
08 
00 00 00 00 00 00 00 00 
00 00 
F5 18 6A 0D 00 00 00 00 
00 00 00 00 00 00 00 00
Процедура расшифрования ключа RSA
Код:
E4FE76803B525327A1CDDDEC57B4505123A35A65103470BE20042CAA0F77140F70DAC835071E1F5350E9B3A4806642AD90BC2DF9AC9698E1CD7FFF75905A9F6E547CF7CB8B68F9C39855859BE6383A678500813801BD0295D9C0E4F3ED30AFEBBB8FCE61A0C6EFC5610CF800DB887972334A1515F7A010066191F34901665E9B
vb Код:
Sub DEncryptKeyRSA(ByRef n() As Byte)  For ii = 0 To &H40 - 1  n(&H40 + ii) = n(&H40 + ii) Xor n(ii)  Next  For ii = 0 To 4 - 1  n(&HD + ii) = n(&HD + ii) Xor n(&H34 + ii)  Next  For ii = 0 To &H40 - 1  n(ii) = n(ii) Xor n(&H40 + ii)  Next  Dim tmp As Byte  For ii = 0 To 4 - 1  tmp = n(ii)  n(ii) = n(&H4D + ii)  n(&H4D + ii) = tmp  Next  End Sub
Проблема состоит в том что не могу повторить зашифрованный участок RequestAuthLogin а именно:
Код:
12 C8 0E 6F AE B2 8A FF 3A 3A AC 35 06 41 DA 6F 8E 04 82 A7 86 7D 1B 74 A2 53 2C 50 D7 80 1D 70 0F 38 6F D9 FC 18 37 D7 17 C2 8B 85 DD 47 87 68 FA 3C 6C CF 69 75 F0 79 23 03 B8 75 01 CA 2F 0F 9D A6 A1 3C DF FA 61 07 33 41 C9 7B F6 AB FC 3A C7 B4 0A 60 44 83 F4 DF AF 85 D6 09 C2 DA 19 AB 09 BC D1 03 85 F2 6D A3 BF 77 24 06 AC B8 E1 B4 17 E4 9E AB 01 ED 2F FB 85 02 9A 56 B8 E8 9E 90
Участок который шифрую создавал по примеру:
Код:
[начало зашифрованного блока]
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 символов ...)
[конец зашифрованного блока]
Код:
vb Код:
Dim modulo As BigInteger = New BigInteger(modul)    Dim res As BigInteger    Dim exp As BigInteger = "65537"    Dim logpas(127) As Byte    logpas(95) = &H20    Array.Copy(Encoding.Default.GetBytes("&&&&&&&&&"), 0, logpas, 98, "&&&&&&&&&".Length)    Array.Copy(Encoding.Default.GetBytes("&&&&&&&&&"), 0, logpas, 112, "&&&&&&&&&".Length)    Dim lg As BigInteger = New BigInteger(logpas)    res = BigInteger.ModPow(lg, exp, modulo)
Подскажите, пожалуйста, какой будет RSA ключ.

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

mr_green, а разве в грации не так?
Код:
[начало зашифрованного блока]
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 24 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 символов ...)
00 00 00 00
[конец зашифрованного блока]
хотя по логике эт одно и то же, но на серверах на которых я был этот пакет выглядел так...

ЗЫ а ты уверен что тебе надо в точности воссоздать пакет от клиента?, думаю сервер и так скушает (хотя возможно не каждый сервер, у явы вроде жестко позиции логины и пароля заданы были в сборках в которых я сорци смотрел)
ЗЗЫ бэйсик.., какое отродье...)

Добавлено через 4 минуты
кстати алгоритму RSA на самом деле пох на нули в начале, так что в общем виде шифрованный блок выглядит так:
XX // размер блока
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 символов ...)
00 00 00 00 // опять хрень какая то видать (возможно не обязательная)
__________________
Я здесь практически не появляюсь!, Skype - ikskor

Последний раз редактировалось xkor, 23.04.2010 в 19:09. Причина: Добавлено сообщение
xkor вне форума   Ответить с цитированием
Старый 23.04.2010, 20:13   #3
Новичок
 
Регистрация: 23.04.2010
Сообщений: 11
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
mr_green пока неопределено
По умолчанию

если я правильно понял то массив с логином и паролем это 128 байтное число которое возводим в степень 65537 и берем по модулю N. Вот это число 128 байт необходимо брать как оно есть, или приводить к другому виду, ну мол у нас есть «00 00 02 …» или нужно представить как «... 02 00 00». Так же ключ который я пытался дешифровать получался всегда непростым числом.
Вы можете мне сказать какой будет у меня RSA ключ при этих данных, если конечно это не займет у вас много времени?
mr_green вне форума   Ответить с цитированием
Старый 24.04.2010, 00:13   #4
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от mr_green Посмотреть сообщение
если я правильно понял то массив с логином и паролем это 128 байтное число которое возводим в степень 65537 и берем по модулю N.
именно так
Цитата:
Сообщение от mr_green Посмотреть сообщение
Вот это число 128 байт необходимо брать как оно есть, или приводить к другому виду, ну мол у нас есть «00 00 02 …» или нужно представить как «... 02 00 00».
ну брать нужно так чтобы логин находился в более старших разрядах чем пароль, однако в памяти это скорее всего будет выглядеть в инвертированном виде от того как мы блок составили так как работа с большими числами производиться через разделение их на много маленьких (по 4 байта на 32битных системах), а в x86 процессорах используется обратный порядок байт (то есть в первом байте младший разряд, ибо так удобнее преобразовывать), ну и логично было бы ещё до разбиения на мелкие подчисла инвертировать порядок байт)

однако как надо подавать байты в New BigInteger(modul) я понятие не имею, я вообще про класс BigInteger не слышал, разве что в .Net 4.0, но его ещё вроде не выпустили)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 24.04.2010, 04:22   #5
Новичок
 
Регистрация: 23.04.2010
Сообщений: 11
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
mr_green пока неопределено
По умолчанию

Выпустили 12го числа . И только вчера я поставил новую студию. Про хранение в памяти я приблизительное понятие имею. Просто что 00 00 02 что 02 00 00 это число, но другое. Как задумывалось при шифрации в RSA я не знал. Спасибо.
Но у меня все еще есть проблема с расшифровкой ключа. У меня числа получаются непростые. В RSA именно простые необходимы.
Я встречал ваш код:
Код:
procedure RSAkeyDecode(var raw);
var
  ab: array[0..127] of Byte absolute raw;
  i:  Word;
  b:  Byte;
begin
  for i:=0 to $3f do ab[$40+i]:=ab[$40+i] xor ab[i];
  for i:=0 to $03 do ab[$0d+i]:=ab[$0d+i] xor ab[$34+i];
  for i:=0 to $3f do ab[i]:=ab[i] xor ab[$40+i];
  for i:=0 to $03 do begin
    b:=ab[i];
    ab[i]:=ab[$4d+i];
    ab[$4d+i]:=b;
  end;
end;
В него подавать ключ в таком виде как он пришел или развернуть?
mr_green вне форума   Ответить с цитированием
Старый 24.04.2010, 12:18   #6
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

mr_green, как он пришел...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 24.04.2010, 17:55   #7
Новичок
 
Регистрация: 23.04.2010
Сообщений: 11
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
mr_green пока неопределено
По умолчанию

После дешивровки ключа получилось число:
Код:
8C6A36A68B68F9C39855859BE694ACFF6400813801BD0295D9C0E4F3ED30AFEBBB8FCE61A0C6EFC5610CF800DB887972334A1515F7A010066191F34901665E9BB082814BB03AAAE439985877B1547CF7CBA3DB5D1189722BF9C4C859E247BBE4CB550654A7D8F09631E54BA45BEE3BDFA3F638EC5B3688E7ACEE0C3C913CC1F5
Оно как не крути непростое и отрицательное.
И своей прогой и вашим кодом дешефрует одинокого.
Код:
procedure RSAkeyDecode(var raw);
var
  ab: array[0..127] of Byte absolute raw;
  i:  Word;
  b:  Byte;
begin
  for i:=0 to $3f do ab[$40+i]:=ab[$40+i] xor ab[i];
  for i:=0 to $03 do ab[$0d+i]:=ab[$0d+i] xor ab[$34+i];
  for i:=0 to $3f do ab[i]:=ab[i] xor ab[$40+i];
  for i:=0 to $03 do begin
    b:=ab[i];
    ab[i]:=ab[$4d+i];
    ab[$4d+i]:=b;
  end;
//showmessage('');
end;

procedure bfh(x:string; x2:string; var b:bb);
var i,l,ii:integer;
    s,ss:string;
begin
l:=length(x);
if length(x) mod 2 <> 0 then x:='0'+x;
i:=0;
ii:=0;
while i<=l-1 do
begin
ss:='0x'+x[i+1]+x[i+2];
b[ii]:= StrToInt64(ss);
inc(ii);
i:=i+2;
end;

l:=length(x2);
i:=0;
while i<=l-1 do
begin
ss:='0x'+x2[i+1]+x2[i+2];
b[ii]:= StrToInt64(ss);
inc(ii);
i:=i+2;
end;

end;

procedure hfb(var x:string;var x2:string; b:bb);
var i,l,ii:integer;
    s,ss:string;
    h:integer;
begin

l:=100;
ii:=0;
x:='';
x2:='';
while ii<=l-1 do
begin
h:=b[ii];
s:=inttohex(b[ii],2);
x := x+s;
inc(ii);
end;

l:=128;
while ii<=l-1 do
begin
h:=b[ii];
s:=inttohex(b[ii],2);
x2 := x2+s;
inc(ii);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var b:bb;
ss,ss2:string;
begin
ss:='E4FE76803B525327A1CDDDEC57B4505123A35A65103470BE20042CAA0F77140F70DAC835071E1F5350E9B3A4806642AD90BC2DF9AC9698E1CD7FFF75905A9F6E547CF7CB8B68F9C39855859BE6383A678500813801BD0295D9C0E4F3ED30AFEBBB8FCE61A0C6EFC5610CF800DB887972334A1515F7A010066191F3490166';
ss2:='5E9B';
bfh(ss,ss2,b);
RSAkeyDecode(b);
hfb(ss,ss2,b);
Edit1.Text:=ss;
Edit2.Text:=ss2;
end;
Быть может что-то попортило ключ? Блоу фиш или ксор…
mr_green вне форума   Ответить с цитированием
Старый 25.04.2010, 02:03   #8
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

mr_green, еслиб чтот чтот попортило ключ то попортило бы и BF ключ которым ты удачно расшифровал пакет от клиента а значит он не порченый.
Отрицательное?, а кто сказал что оно должно быть простое и положительное??
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 07.05.2010, 18:08   #9
Новичок
 
Регистрация: 23.04.2010
Сообщений: 11
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
mr_green пока неопределено
По умолчанию

Спасибо за консультацию. Логин сервер я прошел. Ошибка при использовании RSA была в том что 1-й бит 128 байтного числа был 1 и Net класс BigInteger принимал это число за отрицательное. Сделав число 129 байтным добавив «00» в старшем регистре удалось «обмануть» BigInteger.
Теперь разбираюсь что поменялось в пакете InitKey (CryptInit) . в с4 ксор ключ был 8 байт, 4 шло в пакете CryptInit, 4 были константой. В новой версии
Код:
                writeC(0x2e);
39	                writeC(_id); //0 - wrong protocol, 1 - protocol ok
40	                for (int i = 0; i < 8; i++)
41	                {
42	                        writeC(_key[i]); // key
43	                }
44	                writeD(0x01);
45	                writeD(0x01); // server id
46	                writeC(0x01);
47	                writeD(0x00); // obfuscation key
Но пакет пришел чуть другой:
Код:
19 00 
2E 
01 
70 D9 A8 CF | 12 83 3D 5E 
01 00 00 00 
01 00 00 00 
00 
92 A3 C9 48
Какой длинны ключ в грации финал?
mr_green вне форума   Ответить с цитированием
Старый 07.05.2010, 19:19   #10
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

mr_green, начиная с интерлюда ключ 16 байт, 8 приходят от сервера, 8 - константа (но на некоторых серваках эт константа тож от сервака приходит), инкрементятся теперь не первые 4 байта ключа при приходе каждого пакета а 4 байта начиная с 8го, то есть те с которых константа начинается
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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