![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Съэмулировать клиент
flaxe © (2007-05-08 21:29:00)Имеется программа-клиент к инетовскому серверу. Как можно "записать" все запросы сервера и ответы клиента на них и затем написать программу, которая бы создавала видимость для сервера этого самого клиента?
flaxe (2007-05-27 10:50:00) [1]Здесь точно реализован XOR алгоритм по 2 байтам ключа, но так и не могу врубиться в чем прикол
flaxe (2007-05-21 20:46:00) [2]С горем пополам чтото сделал, теперь самое интересное:
Данные сниффера, логин 1 пароль 1
05 00 15 0C FF <- Типа приветствие сервера, на что он нам высылает
07 00 15 0D 03 35 00 <- В котором 07 00 как я понял перевернутая длина пакета, 15 0D <- Тип пакета(аналогия с 15 0С) а 03 35 00 <- Ключ.
Далее 15 03 - Шифрованый логин и пароль
15 04 ответ от сервера с уникальным ключем для дальнейших действий,
Просьба помочь разобраться в шифровании Логина и пароля(15 03).
00000000 05 00 15 0C FF .....
00000000 07 00 15 0D 03 35 00 .....5.
00000000 1F 00 15 03 0D 3C 3C 3C 3C 3C 3C 3C 3C 3C 3C 3C .....<<< <<<<<<<<
00000010 3C 0D 3C 3C 3C 3C 3C 3C 3C 3C 3C 3C 3C 3C 00 <.<<<<<< <<<<<<.
00000000 0E 00 15 04 30 CC CC CC CC 64 00 00 00 CC ....0... .d....
___________________________
00000000 05 00 15 0C FF .....
00000000 07 00 15 0D 04 2C 02 .....,.
00000000 1F 00 15 03 19 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A .....*** ********
00000010 2A 19 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 00 *.****** ******.
00000000 0E 00 15 04 30 CC CC CC CC 64 00 00 00 CC ....0... .d....
____________________________
00000000 05 00 15 0C FF .....
00000000 07 00 15 0D 04 2E 02 .......
00000000 1F 00 15 03 07 34 34 34 34 34 34 34 34 34 34 34 .....444 44444444
00000010 34 07 34 34 34 34 34 34 34 34 34 34 34 34 00 4.444444 444444.
00000000 0E 00 15 04 30 CC CC CC CC 64 00 00 00 CC 0E 00 ....0... .d......
00000010 15 04 06 CC CC CC CC 00 00 00 00 CC ........ ....
____________________________
00000000 05 00 15 0C FF .....
00000000 07 00 15 0D 03 D4 01 .......
00000000 1F 00 15 03 E2 D3 D3 D3 D3 D3 D3 D3 D3 D3 D3 D3 ........ ........
00000010 D3 E2 D3 D3 D3 D3 D3 D3 D3 D3 D3 D3 D3 D3 00 ........ .......
00000000 0E 00 15 04 30 CC CC CC CC 64 00 00 00 CC ....0... .d....
_____________________________
00000000 05 00 15 0C FF .....
00000000 07 00 15 0D 03 70 02 .....p.
00000000 1F 00 15 03 46 77 77 77 77 77 77 77 77 77 77 77 ....Fwww wwwwwwww
00000010 77 46 77 77 77 77 77 77 77 77 77 77 77 77 00 wFwwwwww wwwwww.
00000000 0E 00 15 04 30 CC CC CC CC 64 00 00 00 CC ....0... .d....
_____________________________
-> 00000000 05 00 15 0C FF .....
<- 00000000 07 00 15 0D 00 90 03 .......
-> 00000000 1F 00 15 03 A1 92 92 92 92 92 92 92 92 92 92 92 ........ ........
-> 00000010 92 A1 92 92 92 92 92 92 92 92 92 92 92 92 00 ........ .......
<- 00000000 0E 00 15 04 30 CC CC CC CC 64 00 00 00 CC ....0... .d....
______________________________
00000000 05 00 15 0C FF .....
00000000 07 00 15 0D 00 C3 00 .......
00000000 1F 00 15 03 F4 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 ........ ........
00000010 C7 F4 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 00 ........ .......
00000000 05 00 65 01 00 0E 00 15 04 30 CC CC CC CC 64 00 ..e..... .0....d.
00000010 00 00 CC ...
flaxe (2007-05-21 19:37:00) [3]и еще сразу
допустим я считываю через IdTCPClient1.ReadInteger, как мне потом это преобразовать через inttohex(IdTCPClient1.ReadInteger,???);
длину откуда браТЬ7
flaxe (2007-05-21 19:23:00) [4]Как допустим можно преобразовать String "0700" в 7?
flaxe (2007-05-21 19:08:00) [5]RF Online ^)
Nucer (2007-05-21 19:00:00) [6]Что за клиент то?
flaxe (2007-05-21 18:58:00) [7]вот это я щас какраз ключ и пытаюсь получить, как до "логина" дойдем, там будет шифрование.
Спс, щас буду разбираться
Nucer (2007-05-21 18:56:00) [8]Кстати пакеты ведь могут быть и закодированы. В той же L2 ключ каждый раз меняется в зависимости от длины очередного пакета.
Nucer (2007-05-21 18:55:00) [9]Заводишь отдельный буфер. Допустим buf:string;
В OnRead пишешь buf:=buf+socket.RecieveText; т.е. считываешь в буфер очередную порцию байт. Потом что-то вроде:
while length(buf)>2 do
begin
size:=ord(buf[1])+ord(buf[2])*256;
if length(buf)<size then break;
pck:=copy(buf,1,size);
delete(buf,1,size);
ViewPacket(pck);
end;
flaxe (2007-05-21 18:23:00) [10]Вообщемто структура пакетов такая
aa aa bb bb cc cc....
aa aa - Длина всего пакета
bb bb - Тип Пакета
сс сс сс.. - Остальные данные
Вот только как так считать, поочередно неполучается
flaxe (2007-05-21 18:16:00) [11]С передачей спасибо, вроде работает, но теперь проблема с приемом
Пытаюсь делать через
RI:=IdTCPCLient1.ReadInteger;
memo1.Lines.Add(inttohex(RI,8));
но вроде какбы оно, но нето, непойму как сначала прочитать первые 2 байта- длина строки, а потом все остальное
Сергей М. (2007-05-21 08:53:00) [12]
> команду в HEX-формате, как её можно отправить
var
SendBuff: Pointer;
BufSize: Integer;
..
BufSize := Length(Edit1.Text) div 2;
GetMem(SendBuff, BufSize);
try
if HexToBin(AnsiLowerCase(Edit1.Text), SendBuff, BufSize) = 0 then
IdTCPClient.WriteBuffer(SendBuff^, BufSize, true);
finally
FreeMem(SendBuff);
end;
flaxe (2007-05-20 21:31:00) [13]Потехонечку разбираюсь с сетевым протоколом, только вот на данный момент вопрос: допустим я в edit1.text записываю команду в HEX-формате, как её можно отправить на сервер и обратно, получив с сервера ответ впихнуть его в memo1.lines.add
Сергей М. (2007-05-17 09:16:00) [14]
> возможно ли както "расшифровать" строки, и вообще что какие
> тут есть способы?
>
Судя по данным сниффера, протокол инф.обмена между сервером и клиентом подразумевает, что первое слово в инф.сообщениях (как сервера так и клиента) - это префикс, указывающий размер сообщения в байтах, включая размер самого префикса.
flaxe (2007-05-17 01:14:00) [15]Начнем с малого:
Как мне принять всю строку целиком высланную мне с сервера? Както может можно определить её размер?
P.s. лазяя по буржуйским сайтам, часто натыкался на сокращение WSA... поиск ничего кроме World Snowmobile Association и World Summit Award :) не выдал, может известно что за хренотенька?
flaxe (2007-05-17 00:56:00) [16]Чето у меня нефига не получается :(
Вообщемто мне нужно написать БОТ'а для одной онлайн игрушки типа Ла2,
пользуюсь сейчас SMSniffer'ом + IdTCPClient1.Write(...);
но проблемма в том, что если на первую строку #$05#$00#$15#$0C#$FF судя по sniffer'y он отвечает то что нужно, то все следующее постоянно меняеются как длина строк, так и сами символы, хотя отдельные части остаются неизменными. Может кто уже занимался ранее чем-то подбным, возможно ли както "расшифровать" строки, и вообще что какие тут есть способы?
Nucer (2007-05-11 04:49:00) [17]>Как эти данные в SendBuff занести?
#$05#$00#$15#$0C#$FF
DVM (2007-05-10 22:31:00) [18]
procedure TForm1.btnSendTCPCommandClick(Sender: TObject);
var
SendBuff: array[1..15] of byte;
RecvBuff: array[1..15] of byte;
begin
IdTCPClient.Host := edtHost.Text;
IdTCPClient.Port := strtoint(edtPort.Text);
try
IdTCPClient.Connect;
except
// Ошибка!
end;
SendBuff[1] := strtoint(edit1.Text);
SendBuff[2] := strtoint(edit2.Text);
SendBuff[3] := strtoint(edit3.Text);
SendBuff[4] := strtoint(edit4.Text);
SendBuff[5] := strtoint(edit5.Text);
SendBuff[6] := strtoint(edit6.Text);
SendBuff[7] := strtoint(edit7.Text);
SendBuff[8] := strtoint(edit8.Text);
SendBuff[9] := strtoint(edit9.Text);
SendBuff[10] := strtoint(edit10.Text);
SendBuff[11] := strtoint(edit11.Text);
SendBuff[12] := strtoint(edit12.Text);
SendBuff[13] := strtoint(edit13.Text);
SendBuff[14] := strtoint(edit14.Text);
SendBuff[15] := strtoint(edit15.Text);
if IdTCPClient.Connected then
begin
IdTCPClient.WriteBuffer(SendBuff, SizeOf(SendBuff), true);
IdTCPClient.ReadBuffer(RecvBuff, SizeOf(RecvBuff));
end;
if IdTCPClient.Connected then IdTCPClient.Disconnect;
end;
flaxe (2007-05-10 21:37:00) [19]А как мне послать именно "05 00 15 0C FF" ?
Как эти данные в SendBuff занести?
DVM (2007-05-09 22:45:00) [20]IdTCPClient.WriteBuffer(SendBuff, SizeOf(SendBuff), true);