Показать сообщение отдельно
Старый 23.01.2008, 20:11   #81
Рыцарь
 
Аватар для VORON
 
Регистрация: 06.08.2007
Сообщений: 209
Сказал Спасибо: 6
Имеет 67 спасибок в 34 сообщенях
VORON пока неопределено
По умолчанию Re:

Цитата:
Сообщение от dmitry501
Что ж вам if так не нравится то?
Вполне нормальная инструкция.
На уровне маш. кодов исполняется очень быстро :)
Да, Димко.. я долго исследовал и соглашусь с тобой.. без ифов там никак..
кстатти очень удобно для подобных задач использовать скрипт для подбора алгоритма и мониторинга необходимых переменных..
я например накидал вот такой:
Код:
var
frm:Tform;
memo:Tmemo;
pac:string; //расшифрованный пакет в HEX формате
D1,d2,d3,d4,d5,d6,d7,d8:integer;   //2 разряда 1-го байта.. используются для перевода стринг в HEX
b1,b2,b3,b4:integer;
i:integer; // вспомогательная
size:integer;  //размер пакета
keyClientIN: array [0..7] of byte;  //8 байтов ключа
keyClientOUT: array [0..7] of byte;
keyServerIN: array [0..7] of byte;
keyServerOUT: array [0..7] of byte;
paket:string;

StartKeyCatch:boolean; //указатель на то что начальный ключ отловлен
//////////////////
k: integer;
b,a: integer;
//////////////////
stroka:string;
keyHEX:string;
sizeHEX:string;
BHEX:string;

const
hexdigit = '0123456789ABCDEF';




procedure Init; //Вызывается при включении скрипта
begin
  frm := TForm.Create(nil);
  frm.Caption := 'Chat';
  frm.BorderStyle := bsSizeable;
  frm.Position := poScreenCenter;
  frm.align:=alBottom;
  frm.Width:=700;
  frm.Height:=200;
  frm.FormStyle:=FsStayOnTop;
  frm.Show;

  memo :=TMemo.create(nil);
  memo.parent:=frm;
  memo.align:=alClient;
  memo.WordWrap:=false;
  memo.ScrollBars:=ssBoth;

StartKeyCatch := false;

end;

procedure Free; //Вызывается при выключении скрипта
begin
  memo.free;
  frm.Free;
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
//*****************ИНИЦИАЛИЗИРУЕМ НАЧАЛЬНЫЙ КЛЮЧ ПРИ СТАРТЕ СКРИПТА*******************
//используем действие (сесть/всать) после запуска скрипта
 if FromClient and StartKeyCatch = false then
 begin
  if length(pck) = 10 then
  if (ord(pck[1]) xor $45) = (ord(pck[8]) xor ord(pck[9])) then
  if (ord(pck[1]) xor ord(pck[2])) = (ord(pck[9]) xor ord(pck[10])) then
  begin
  keyClientIN[0]:= ord(pck[1]) xor $45;
  keyClientIN[1]:= ord(pck[1]) xor ord(pck[2]);
  keyClientIN[2]:= ord(pck[2]) xor ord(pck[3]);
  keyClientIN[3]:= ord(pck[3]) xor ord(pck[4]);

  keyClientIN[4]:= ord(pck[4]) xor ord(pck[5]);
  keyClientIN[5]:= ord(pck[5]) xor ord(pck[6]);
  keyClientIN[6]:= ord(pck[6]) xor ord(pck[7]);
  keyClientIN[7]:= ord(pck[7]) xor ord(pck[8]);

  StartKeyCatch:= true;
//  memo.Lines.Add(inttostr(keyClientIN[0])+'+'+inttostr(keyClientIN[1])+' '+inttostr(keyClientIN[2])+' '+inttostr(keyClientIN[3])+' '+inttostr(keyClientIN[4])+' '+inttostr(keyClientIN[5])+' '+inttostr(keyClientIN[6])+' '+inttostr(keyClientIN[7]));
  end;
 end;


 if FromClient and StartKeyCatch = true then
 begin
//применение алгиритма фифрации к пакету.. для получения из PCK - PAKET
  size:=length(pck);
  paket:=pck;

//дешифрируем текущий пакет с использованием уже имеющегося ключа
  for k:=size-1 downto 1 do
  paket[k+1]:=chr(ORD(pck[k+1]) xor keyClientIN[k and 7] xor ord(pck[k-1+1]));
  if size<>0 then paket[0+1]:=CHR(ord(pck[0+1]) xor keyClientIN[0]);


  b:=0;
  a:=0;
//вычисляем новый ключ
//подсчет суммы всех байтов в пакете кроме первого
for k:=1 to size-1 do
begin
b:=b+ord(paket[k+1]);
a:=0;
if (size + b) > $ff then a:=1;
if (size + b) > $ffff then a:=2;
end;

//учет частного случая
if size<>1 then
begin

keyClientIN[0]:=keyClientIN[0] xor b;
if a=0 then keyClientIN[1]:=keyClientIN[1] xor (b+size);
if a=1 then keyClientIN[1]:=keyClientIN[1] xor (b shr 8);
keyClientIN[2]:=keyClientIN[2];
keyClientIN[3]:=keyClientIN[3];


keyClientIN[4]:=keyClientIN[4] xor keyClientIN[0];
keyClientIN[5]:=keyClientIN[5] xor keyClientIN[1];
keyClientIN[6]:=keyClientIN[6] xor keyClientIN[2];
keyClientIN[7]:=keyClientIN[7] xor keyClientIN[3];

keyClientIN[5]:=keyClientIN[5] xor ((size + b) shr (a*8));
keyClientIN[5]:=keyClientIN[5] xor ((size + b) shr (8));
end;

//визуализация лога на форме
pac:='';
  for i:=1 to size do
  begin
  d1:=ord(paket[i]) shr 4;
  d2:=ord(paket[i]) - (d1 shl 4);

  pac := pac + hexdigit[(d1 and $F)+1];
  pac := pac + hexdigit[(d2 and $F)+1];
  pac:= pac + ' ';
  end;

  keyHEX:='';
  for i:=0 to 7 do
  begin
  d1:=keyClientIN[i] shr 4;
  d2:=keyClientIN[i] - (d1 shl 4);

  keyHEX:= keyHEX + hexdigit[(d1 and $F)+1];
  keyHEX:= keyHEX + hexdigit[(d2 and $F)+1];
  keyHEX:= keyHEX + ' ';
  end;

sizeHEX:='';
d1:=size-((size shr 4) shl 4);
d2:=(size shr 4)-((size shr 4) shr 4 shl 4);
d3:=(size shr 8)-((size shr 8) shr 4 shl 4);
d4:=(size shr 12)-((size shr 12) shr 4 shl 4);

sizeHEX:=sizeHEX + hexdigit[(d4 and $F)+1];
sizeHEX:=sizeHEX + hexdigit[(d3 and $F)+1];
sizeHEX:=sizeHEX + hexdigit[(d2 and $F)+1];
sizeHEX:=sizeHEX + hexdigit[(d1 and $F)+1];

bHEX:='';
d1:=b-((b shr 4) shl 4);
d2:=(b shr 4)-((b shr 4) shr 4 shl 4);
d3:=(b shr 8)-((b shr 8) shr 4 shl 4);
d4:=(b shr 12)-((b shr 12) shr 4 shl 4);
d5:=(b shr 16)-((b shr 16) shr 4 shl 4);
d6:=(b shr 18)-((b shr 18) shr 4 shl 4);
d7:=(b shr 22)-((b shr 22) shr 4 shl 4);
d8:=(b shr 26)-((b shr 26) shr 4 shl 4);

bHEX:=bHEX + hexdigit[(d8 and $F)+1];
bHEX:=bHEX + hexdigit[(d7 and $F)+1];
bHEX:=bHEX + hexdigit[(d6 and $F)+1];
bHEX:=bHEX + hexdigit[(d5 and $F)+1];
bHEX:=bHEX + hexdigit[(d4 and $F)+1];
bHEX:=bHEX + hexdigit[(d3 and $F)+1];
bHEX:=bHEX + hexdigit[(d2 and $F)+1];
bHEX:=bHEX + hexdigit[(d1 and $F)+1];



 stroka:=pac+';;'+keyHEX+';;'+ bhex+';;'+sizehex+';;'+inttostr( ((size + b) shr (8))-((b) shr (8)) );

 memo.Lines.Add(stroka);

 end;
end.
на форму в МЕМО- пишется лог исходящих пакетов в HEX (расшифрованных) и плюс еще необходимые переменные мониторятся такие как длинна пакета, ключ текущий и т.д.

Добавлено спустя 2 часа 57 минут 24 секунды:
немного поколдовав с алгоритмом- магу сказать что ИСХОДЯЩИЙ ТРАФ- СЛОМАН!-))
__________________
Цитата:
Сообщение от pybukon
прежде чета попросить я немнога раскажу чтоб вы понили как мне плоха
Цитата:
Сообщение от Byrger
А как сделать мой скрипт бесконечным?
Цитата:
Сообщение от XKOR
.. каждый день ионизированной ногой протирает больную)
Цитата:
Сообщение от PsyR
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами
VORON вне форума   Ответить с цитированием
За это сообщение VORON нажился спасибкой от: