Что ж вам 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
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами
я хачу сначала исходящий трафик затестировать в деле-) для сдачи манора применить его-) там входящий мне не нужен-) входящий чуть пожэ сделаю я думаю там ничего сложного не будет.. щас надо сделать 2 скрипта. 1 чтоб распаковывал а другой- запаковывал.. и в серединке размещу скрипт на сдачу манора-) протестирую в деле то что програмил больше месяца-)
Добавлено спустя 8 минут 22 секунды:
как прочту топ с начала - с чего всё начиналось.. аж страшно становится-)
__________________
Цитата:
Сообщение от pybukon
прежде чета попросить я немнога раскажу чтоб вы понили как мне плоха
Цитата:
Сообщение от Byrger
А как сделать мой скрипт бесконечным?
Цитата:
Сообщение от XKOR
.. каждый день ионизированной ногой протирает больную)
Цитата:
Сообщение от PsyR
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами
я хачу сначала исходящий трафик затестировать в деле-)
Ты нашел, откуда начальный ключ выдирать?
обрати внимание на скрипт выше.. его можно стартонуть в произвольном месте.. он сам ключ найдет и вычислит из пакета (СЕСТЬ/ВСТАТЬ) и после етого тока начинает алгоритм применять.. скрипт етот пакет по сигнатуре- определяет..
Код:
//*****************ИНИЦИАЛИЗИРУЕМ НАЧАЛЬНЫЙ КЛЮЧ ПРИ СТАРТЕ СКРИПТА*******************
//используем действие (сесть/всать) после запуска скрипта
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;
end;
end;
Добавлено спустя 58 минут 40 секунд:
меня интерисует другой вопрос..
допустим имеем 2 скрипта: 1 вверху- дешефрирует, 2- внизу- запаковывает обратно переменную PCK.. в середине помещаю скриптик любой, например скрипт который отправит серваку- пакет на СОЦ ДЕЙСТВИЕ.. я так понимаю что етот пакет небудет обрабатываться другими скриптами.. он сразу попадает в движок пакетхака и отправляется.. и по скриптам не проходит.. поетому как скоректировать ключ в скрипте который запаковывает- трафик, с учетом етого пакета?
расскажите етот момент кто знает? возможноли вапще реализовать то что я хачу- скриптами? или без ковыряния исходников пакетхака- никак?
__________________
Цитата:
Сообщение от pybukon
прежде чета попросить я немнога раскажу чтоб вы понили как мне плоха
Цитата:
Сообщение от Byrger
А как сделать мой скрипт бесконечным?
Цитата:
Сообщение от XKOR
.. каждый день ионизированной ногой протирает больную)
Цитата:
Сообщение от PsyR
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами
На сколько помню, пакетхак исполняет скрипты по очереди, сверху вниз из списка. Попробуй первым расшифровщик, вторым, который что-то делает, а следующий скрипт зашифровщик. Скрипты можно двигать в списке. Друг другу будет передаваться PCK, вот его и изменяй в первом и втором скрипте в третьем создавай и отсылай BUF, PCK скорее всего надо убивать.
если промежуточный скрипт будет сам что то отсылать не через pck то это небудет шифроваться последним скриптом...
но я заканчиваю версию пакетхака в котором можно будет делать newxor.dll при условии разной шифрации на приём и отправку, так что с её помощью можно будет реализовать)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
VORON, могу посоветовать сделать так:
напиши 2 процедуры зашифровать и расшифровать,для каждой свой ключ, но вначале, при инициализации, ключ одинаковый - сохраняешь его и для зашифровки, и для расшифровки.
Потом примерно так:
If (FromClient) and (ConnectName='Хз кто') then
begin
Rasshifrovatvsenaxx(pck,keyClientIN);
<сюда стандартный обработчик, типа case pck[1] of>
Zashifrovatvsenaxx(pck,keyClientOut);
end;
и для пакетов, самостоятельно отправляемых тобой на сервер перед отправкой вызываешь
buf:=<суперчитерскийпакетнапримернаманор>;
Zashifrovatvsenaxx(buf,keyClientOut);
SendToServerEx('Хз кто');
QAK, ну впринципе да.. я про ето думал.. т.е. можно реализовать в пределах одного скрипта.. туда запихнуть: сам скрипт который нужен+расшифровку+зашифровку.. но чета у меня не стоит на такой подход.. пока ХКОР- доделывает новый пакетхак у меня есть время на взлом входящего трафика.. поетому- когда я закончу с ним то как раз новый пакетхак будет готов (наверно) и тогда проблема отпадет сама собой..
QAK, а знаеш в чем самый смак ломануть шифр на серваке, а не тупо подобрать себе другой сервак без шифровки? в том что на серваке без шифрации ты 1 из 1000 скриптоводов и особо ничем не выделяешся из толпы.. у всех есть хиллеры- боты, все сдают манор скриптом (и его сдать скриптом тяжело) .. а вот на зашифрованном серваке я 1 такой буду-) и весь манор мой будет-) и ХИЛЛЕРЫ тока у меня в ПВП будут-) .. это даст огромное преимущество перед другими..
__________________
Цитата:
Сообщение от pybukon
прежде чета попросить я немнога раскажу чтоб вы понили как мне плоха
Цитата:
Сообщение от Byrger
А как сделать мой скрипт бесконечным?
Цитата:
Сообщение от XKOR
.. каждый день ионизированной ногой протирает больную)
Цитата:
Сообщение от PsyR
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами
mdaa =) Мощная фраза =) Ты лучше исходящи пока погоняй, на предмет правильности расшифровки, или давай входящий мачить=) Можно ведь модуль написать с 2мя процедурами, и просто подключать его =) лентяй епть =)