ЗЫ это в десятичной системе счисления, у FGInt есть функции для преобразования строки в такой системе во внутренний формат чисел...
ЗЗЫ на всякий случай уточню что от сервера приходит заскрембленый Module, а Public всегда равен 65537
__________________
Я здесь практически не появляюсь!, Skype - ikskor
После этого, я так понимаю, пытаюсь делать декод по блоуфишу от интерлюда (6B60CB5B82CE90B1CC2B6C556C6C6C6C) (кстати норм декодера на яву не нашёл, и не уверен что фц-ия правильно работает, поэтому сюда и пишу). В результате я получаю в декоде примерно такой пакет:
Какие мои дальнейшие действия? Ксорить? а то я уже запутался да и на яву от делфей сильно отличается) на делфях проще, но нужда заставляет на яве писать)
И я так понимаю что по блоуфишу я допустил ошибку, что включил в декод сюда ba00?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;
type
TForm1 = class(TForm)
log: TMemo;
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Client: TClientSocket;
Edit2: TEdit;
Edit3: TEdit;
Label2: TLabel;
Label3: TLabel;
procedure ClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ClientRead(Sender: TObject; Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TByteArray = array of byte;
var
Form1: TForm1;
implementation
{$R *.dfm}
function ByteArrayToHexString(const InArr: array of Byte): string;
var
tmpStrList: TStringList;
i: Integer;
begin
tmpStrList := TStringList.Create;
try
for I := Low(InArr) to High(InArr) do
begin
tmpStrList.Append(IntToHex(InArr[i], 2));
end;
tmpStrList.Delimiter := ' ';
Result := tmpStrList.DelimitedText;
finally
tmpStrList.Free;
end;
end;
procedure ToLog(log: string);
begin
form1.log.Lines.Add(log);
end;
procedure TForm1.Button1Click(Sender : TObject);
begin
{Если соединение уже установлено - прерываем его.}
if Client.Active then
begin
Client.Active:=False;
Exit; {...и выходим из обработчика}
end;
{Присваиваем свойствам Address нужные значения}
Client.Address:=Edit1.Text;
{Пытаемся открыть сокет и установить соединение}
Client.Active:=True;
end;
procedure TForm1.Button2Click(Sender : TObject);
begin
Client.Active:=False;
end;
procedure TForm1.ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode := 0;
Socket.Close;
end;
procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
len : integer;
Buffer : TByteArray;
begin
ToLog('~~~ Подключились ~~~~~~~~~~~~~~~~');
ToLog('размер пакета ' + IntToStr(Socket.ReceiveLength)+' bytes');
setLength(Buffer, Socket.ReceiveLength);
len := Socket.ReceiveBuf(Buffer[0], Socket.ReceiveLength);
ToLog('Прочитано в буфере: ' + IntToStr(len) + ' bytes');
ToLog('Ответ сервера: ' + ByteArrayToHexString(Buffer));
end;
end.
Собственно, соединение устанавливаю, ответ получаю, но не могу понять, что делать дальше, и как из полученного первого пакета получить ключ (не пинать я самоучка). Прошу разжуйте пожалуйста, книги читаю гугл и яндекс мучаю, но немогу разобраться...
Читал на раза 4-е.
Собственно, загвоздка в том, что пакеты постоянно преобразовывать через function ByteArrayToHexString? и на основе преобразованного пакета уже if else? или же напрямую через Buffer?
Shadrincev, может быть это не мое дело, но не советую писать эмулятор клиента, если вы не имеете представления о массиве байтов и как с ним работать (основы основ)