Lineage 2

  • Форум
  • Анонсы
  • Вход
  • Регистрация
  • Разделы
    • Каталог файлов
    • Программы Lineage 2
    • Боты Lineage 2
    • Статьи Lineage 2
    • Квесты Lineage 2
    • Статьи по разработке
    • Шаблоны / Web-Обвязки
  • Контакты
Последние ответы
Тема Раздел
Уязвимые сервера Lineage 2 Актуальные уязвимости
[Шара] Макет промо страницы для Lineage 2 Web - часть для серве
FAQ для новичков Актуальные уязвимости
Все варианты обхода защит в одной теме! Актуальные уязвимости
Используем API Lineage 2 с помощью Engine.dll... Программирование
Пишем бота для Lineage 2 [Delphi] #1 Программирование
Прямые руки или обход Smart Guard? Актуальные уязвимости
Войти Регистрация
Меню форума
  • Поиск по форуму
  • Пользователи
  • Последние сообщения
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум Lineage 2 » Вмешательство в внутриигровой процесс » Актуальные уязвимости Lineage 2 » Все варианты обхода защит в одной теме! (Всевозможные варианты обхода различных - защит в Lineage 2)
Все варианты обхода защит в одной теме!
Оффлайн Po6oKon

Администраторы

1
23.10.2016, 14:51
Оффлайн Po6oKon
23.10.2016, 14:51
Администраторы
Репутация: 22
Сообщений: 148
Давайте все вместе, даже и ты читатель, можешь так же отписать о новой теме обхода всевозможных игровых защит Lineage 2, есть очень множество вариантов обхода той или иной защиты, но лучше всё это разместить в одной теме, нежели делать по 100500 страниц и засорять Поисковые Системы!

Обход SmartGuard
Настройка L2PHX и Обход защиты для неё

Доступно только для пользователей

Зарегистрируйся!:)
Добавить в Skype
22
Оффлайн mega

Пользователи

2
02.11.2016, 14:01
Оффлайн mega
02.11.2016, 14:01
Пользователи
Репутация: 0
Сообщений: 13
Вполне легко обходится любая защита в том числе и "SmartGuard" при помощи "Виртуальной машины" и "Прокси" biggrin , если вам нужно запустить L2PHX, но есть и редакторы памяти типа "HxD" которых не видит
даже и "Смарт"
Сообщение отредактировал mega - Ср, 02.11.2016, 14:05
0
Оффлайн Po6oKon

Администраторы

3
04.11.2016, 22:15
Оффлайн Po6oKon
04.11.2016, 22:15
Администраторы
Репутация: 22
Сообщений: 148
mega, хммм...на счёт виртуальной машины точно не скажу, а вот на счёт прокси правда! Обойти - можно! Доступно только для пользователей

Зарегистрируйся!:)
Добавить в Skype
22
Оффлайн Po6oKon

Администраторы

4
04.11.2016, 22:19
Оффлайн Po6oKon
04.11.2016, 22:19
Администраторы
Репутация: 22
Сообщений: 148
P.S.: Вот только одна беда с клиентом, если данные не отосланы при старте клиента, вряд ли получится пройти через логин-сервер. Хорошо закриптованы.

Зарегистрируйся!:)
Добавить в Skype
22
Оффлайн mega

Пользователи

5
05.11.2016, 09:36
Оффлайн mega
05.11.2016, 09:36
Пользователи
Репутация: 0
Сообщений: 13
Можно ещё и при помощи "ProcessExplorer", дело в том, что когда ты обходишь защиту при помощи "Виртуальной Машины", то "Proxifier" и Виртуалка работают как одно целое,
Цитата Po6oKon
если данные не отосланы при старте клиента, вряд ли получится пройти через логин-сервер
"L2phx" стоит на виртуалке, а "Lin]e[age" у тебя на основной ОС, Запускаешь Пакетник в Виртуалке, запускаешь клиент игры, Самрт прогрузился,запустился клиент, после этого запускаешь Проксю, она перенаправляет трафик в Пакетник, тем самым Смарт и не подазривает, что трафик игры отслеживается, Смарт не настроен под Проксю, чёб её блочить, а если настроят, то естественно не подо все) если делать это подо все возможные программы, то будет весить ппц сколько и стоить тоже, догда ДОНАТ возрастёт в РАЗЫ, перестанут пользоваться ею, просто там зашито, то что в шаре лежит, то чем пользуются многие, а те кто пользуются другим софтом, ваще не парятся tongue
Сообщение отредактировал mega - Сб, 05.11.2016, 10:23
0
Оффлайн Po6oKon

Администраторы

6
06.11.2016, 18:19
Оффлайн Po6oKon
06.11.2016, 18:19
Администраторы
Репутация: 22
Сообщений: 148
Интересно однако получается... Но вроде же нельзя запускать виртуалку под смарт гуардом? Или я не прав? Кстати...тот публичный ключ который выдаёт смарт можно подменить, тем самым упростить расшифровку закриптованных данных smile

То, о чем я писал в соседней ветке )

Зарегистрируйся!:)
Добавить в Skype
22
Оффлайн mega

Пользователи

7
06.11.2016, 21:08
Оффлайн mega
06.11.2016, 21:08
Пользователи
Репутация: 0
Сообщений: 13
Цитата Po6oKon ()
Но вроде же нельзя запускать виртуалку под смарт гуардом?

Можно, я те фотку прислал, там виртуалка, на виртуалке l2phx, сервер с защитой Смарт, если присмотреться, то в титуле написано имя сервера и проверить
0
Оффлайн Po6oKon

Администраторы

8
07.11.2016, 04:41
Оффлайн Po6oKon
07.11.2016, 04:41
Администраторы
Репутация: 22
Сообщений: 148
Вижу, и вправду работает smile
Вот если бы дешифровочка ещё была biggrin

P.S: Можно обойтись виртуалки, но использовать другой софт Доступно только для пользователей, который так же организует прокси сервер да и с пакетами л2 справится на ура smile

Зарегистрируйся!:)
Добавить в Skype
22
Оффлайн mega

Пользователи

9
07.11.2016, 11:01
Оффлайн mega
07.11.2016, 11:01
Пользователи
Репутация: 0
Сообщений: 13
Цитата Po6oKon ()
Вот если бы дешифровочка ещё была

Это надо самому ковырять пакетник, из клиента состовлять DLLку, чтоб шифрацию убрать.
Если знаком с Делфи или С++, то несоставит труда.
Сообщение отредактировал mega - Пн, 07.11.2016, 11:15
0
Оффлайн Po6oKon

Администраторы

10
08.11.2016, 02:54
Оффлайн Po6oKon
08.11.2016, 02:54
Администраторы
Репутация: 22
Сообщений: 148
Цитата mega ()
Это надо самому ковырять пакетник, из клиента состовлять DLLку, чтоб шифрацию убрать.
Если знаком с Делфи или С++, то несоставит труда.


Дык...Это понятно smile
Надо клиент ковырять, узнать каким образом шифруются данные, а потом только что-то вроде кряка делать. Но в первую очередь нужно узнать какие данные посылаются на сервер и какие данные он возвращает. Просто Акуму (разраб) в целях безопасности написал огромную скриптягу к веб серверу, что и затрудняет расшифровку.

Да с делфи я знаком, да и не один софт написан от меня))) а си я не учил)

Зарегистрируйся!:)
Добавить в Skype
22
Оффлайн mega

Пользователи

11
08.11.2016, 04:34
Оффлайн mega
08.11.2016, 04:34
Пользователи
Репутация: 0
Сообщений: 13
Ну раз уж знаком с языками, то вот в пакетнике надо перекодировать эту ДЛЛку под свой сервер newxor.dll,
Распаковать из архива newxor.dpr и coding.pas в любую папку
Открываешь newxor.dpr
Правишь код под свой сервак
Компилишь
0
Оффлайн Po6oKon

Администраторы

12
15.11.2016, 15:45
Оффлайн Po6oKon
15.11.2016, 15:45
Администраторы
Репутация: 22
Сообщений: 148
Цитата mega ()
Ну раз уж знаком с языками, то вот в пакетнике надо перекодировать эту ДЛЛку под свой сервер newxor.dll,
Распаковать из архива newxor.dpr и coding.pas в любую папку
Открываешь newxor.dpr
Правишь код под свой сервак
Компилишь


Дай исходный код DLL'ки гляну что к чему wink

Зарегистрируйся!:)
Добавить в Skype
22
Оффлайн mega

Пользователи

13
16.11.2016, 17:41
Оффлайн mega
16.11.2016, 17:41
Пользователи
Репутация: 0
Сообщений: 13
Для версии 3.5 с учетом не нулевых ObfuscationKey (из KeyPacket) (((копипаст)))
library newxor;

uses
usharedstructs in '..\units\usharedstructs.pas',
Classes,
windows,
sysutils;

{$R *.res}

type
TXorCoding = class(TCodingClass)
private
keyLen: Byte;
DecAccumulatorSize, EncAccumulatorSize : integer;
DecAccumulator, EncAccumulator : array [0..$ffff] of byte;
public
constructor Create;
procedure InitKey(const XorKey; Interlude: Byte = 0);override;
procedure DecryptGP(var Data; var Size: Word);override;
procedure EncryptGP(var Data; var Size: Word);override;
procedure PreDecrypt(var Data; var Size: Word); override;
procedure PostEncrypt(var Data; var Size: Word); override;
end;

TXorCodingOut = class(TCodingClass)
private
keyLen: Byte;
DecAccumulatorSize, EncAccumulatorSize : integer;
DecAccumulator, EncAccumulator : array [0..$ffff] of byte;
public
constructor Create;
procedure InitKey(const XorKey; Interlude: Byte = 0);override;
procedure DecryptGP(var Data; var Size: Word); override;
procedure EncryptGP(var Data; var Size: Word); override;
procedure PreDecrypt(var Data; var Size: Word); override;
procedure PostEncrypt(var Data; var Size: Word); override;
end;

function CreateCoding(Value:PCodingClass): HRESULT; stdcall;
begin
Result:=0;
try
Value^:=TXorCoding.Create;
except
Result:=-1;
Value^:=nil;
end;
end;

function CreateCodingOut(Value:PCodingClass): HRESULT; stdcall;
begin
Result:=0;
try
Value^:=TXorCodingOut.Create;
except
Result:=-1;
Value^:=nil;
end;
end;

exports CreateCoding, CreateCodingOut;

{ TXorCoding }

constructor TXorCoding.Create();
begin
FillChar(GKeyS[0],SizeOf(GKeyS),0);
FillChar(GKeyR[0],SizeOf(GKeyR),0);
keyLen := 0;
EncAccumulatorSize := 0;
DecAccumulatorSize := 0;
End;

procedure TXorCoding.DecryptGP(var Data; var Size: Word);
var
k:integer;
pck:array[0..$FFFD] of Byte absolute Data;
begin
//server>>PreDecrypt>[DecryptGP] angry PH)>EncryptGP>PostEncrypt>>client
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor GKeyR[k and keyLen] xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor GKeyR[0];
Inc(PLongWord(@GKeyR[keyLen-7])^,size);
end;

procedure TXorCoding.EncryptGP(var Data; var Size: Word);
var
i:integer;
pck:array[0..$FFFD] of Byte absolute Data;
begin
//server>>PreDecrypt>DecryptGP angry PH)>[EncryptGP]>PostEncrypt>>client

if size<>0 then pck[0]:=pck[0] xor GKeyS[0];
for i:=1 to size-1 do
pck[i]:=pck[i] xor GKeyS[i and keyLen] xor pck[i-1];
Inc(PLongWord(@GKeyS[keyLen-7])^,size);
end;

procedure TXorCoding.InitKey(const XorKey; Interlude: Byte = 0);
const
KeyConst: array[0..3] of Byte = ($A1,$6C,$54,$87);
KeyIntrl: array[0..7] of Byte = ($C8,$27,$93,$01,$A1,$6C,$31,$97);
var key2:array[0..15] of Byte;
begin
if Interlude <> 0 then begin
keyLen:=15;
Move(XorKey,key2,8);
Move(KeyIntrl,key2[8],8);
end else begin
keyLen:=7;
Move(XorKey,key2,4);
Move(KeyConst,key2[4],4);
end;
Move(key2,GKeyS,16);
Move(key2,GKeyR,16);
end;

procedure TXorCoding.PreDecrypt(var Data; var Size: Word);
//server>>[PreDecrypt]>DecryptGP angry PH)>EncryptGP>PostEncrypt>>client
procedure YourDecryptFuncton(var Packet:TPacket);
begin
//сюда поступает пакетик который необходимо декриптовать.
//если ты захочешь сразу преобразовать его в декриптованный линейковский пакет
//то decryptgp оставляй пустым
//если же это поверхносный навесок на криптовку - рекомендую "раздельное питание"
end;

var
L2Packet : TPacket; //обьявлен в шаредструктуре
OutBuffer : array[0..$ffff] of byte;
begin
//выходящий буффер - пуст.
fillchar(OutBuffer, $ffff, 0);

//Суем в аккумулятор то что пришло.
move(data,DecAccumulator[DecAccumulatorSize],size);
inc(DecAccumulatorSize, Size);

Size := 0; //выход обнуляем не давая пакетхаку эту поцию обработать если на следующей проверке
//мы вылетим с этой функции либо не попадем в цикл (это и есть склейка пакетов. когда длина линейковского пакета
//меньше фактически полученных данных. мы будем ждать копя данные в аккумуляторе)

if DecAccumulatorSize < 2 then exit; //в аккумуляторе нет даже длинны.

//в акумуляторе есть чтото по длинне превышающей либо равной 2м байтам. читаем их как размер пакета
move(DecAccumulator[0], L2Packet.Size, 2);

//!если криптуеться весь траффик включая ДЛИННУ пакетов - в этом месте декриптовать L2Packet.Size!

while (L2Packet.Size <= DecAccumulatorSize) do
//Резка пакетов в этом вайле
//будем крутиться тут пока нам будет хватать фактических данных для обслуживания длинн линейковских пакетов.
begin
//подчистим дату пакета, дабы не мусор не смущал при отладке.
fillchar(l2packet.data[0], $FFFD, 0);
//вытягиваем с акумулятора данные пакета.
move(DecAccumulator[2], L2Packet.data[0], L2Packet.Size-2);
//сдвигаем батики в акумуляторе на эту же длинну, затирая считаный с аккумулятора пакет
move(DecAccumulator[L2Packet.Size], DecAccumulator[0], DecAccumulatorSize-L2Packet.Size);
//и умельшаем длинну акумулятора
dec(DecAccumulatorSize, L2Packet.Size);
//Декриптуем
YourDecryptFuncton(L2Packet);
//декриптованный пакет суем в временный выходящий буффер (он нужен только потому что нельзя мовнуть в data[xxx])
move(L2Packet, OutBuffer[Size], L2Packet.Size);
//и увеличиваем колво байт в выходящем буфере
inc(Size, L2Packet.Size);
//Режем следующий пакет
if DecAccumulatorSize >= 2 then
begin
move(DecAccumulator[0], L2Packet.Size, 2);
//декрипт длинны ?
end
else
break;
end;

//сливаем данные с временного буфера в выход буффер
move(OutBuffer[0], data, $ffff);
end;

procedure TXorCoding.PostEncrypt(var Data; var Size: Word);
//server>>PreDecrypt>DecryptGP angry PH)>EncryptGP>[PostEncrypt]>>client
//в общем точная копия декрипта, только екрипт. а так все на тех же местах.

procedure YourEncryptFuncton(var Packet:TPacket);
begin
//аналоично YourDeacryptFuncton но наоборот.

end;

var
L2Packet : TPacket;
OutBuffer : array[0..$ffff] of byte;
begin
fillchar(OutBuffer, $ffff, 0);
move(data,EncAccumulator[EncAccumulatorSize],size);
inc(EncAccumulatorSize, Size);
Size := 0;
if EncAccumulatorSize < 2 then exit;
move(EncAccumulator[0], L2Packet.Size, 2);
while (L2Packet.Size <= EncAccumulatorSize) do
begin
fillchar(l2packet.data[0], $FFFD, 0);
move(EncAccumulator[2], L2Packet.data[0], L2Packet.Size-2);
move(EncAccumulator[L2Packet.Size], EncAccumulator[0], EncAccumulatorSize-L2Packet.Size);
dec(EncAccumulatorSize, L2Packet.Size);
YourEncryptFuncton(L2Packet);
move(L2Packet, OutBuffer[Size], L2Packet.Size);
inc(Size, L2Packet.Size);
if EncAccumulatorSize >= 2 then
begin
move(EncAccumulator[0], L2Packet.Size, 2);
end
else
break;
end;
move(OutBuffer[0], data, $ffff);
end;

{ TXorCodingOut }

constructor TXorCodingOut.Create;
begin
FillChar(GKeyS[0],SizeOf(GKeyS),0);
FillChar(GKeyR[0],SizeOf(GKeyR),0);
keyLen := 0;
EncAccumulatorSize := 0;
DecAccumulatorSize := 0;
end;

procedure TXorCodingOut.DecryptGP(var Data; var Size: Word);
var
k:integer;
pck:array[0..$FFFD] of Byte absolute Data;
begin
//client>>PreDecrypt>[DecryptGP] angry PH)>EncryptGP>PostEncrypt>>server

for k:=size-1 downto 1 do
pck[k]:=pck[k] {xor GKeyR[k and keyLen]} xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor GKeyR[0];
Inc(PLongWord(@GKeyR[keyLen-7])^,size);
end;

procedure TXorCodingOut.EncryptGP(var Data; var Size: Word);
var
i:integer;
pck:array[0..$FFFD] of Byte absolute Data;
begin
//client>>PreDecrypt>DecryptGP angry PH)>[EncryptGP]>PostEncrypt>>server

if size<>0 then pck[0]:=pck[0] xor GKeyS[0];
for i:=1 to size-1 do
pck[i]:=pck[i] {xor GKeyS[i and keyLen]} xor pck[i-1];
Inc(PLongWord(@GKeyS[keyLen-7])^,size);
end;

procedure TXorCodingOut.InitKey(const XorKey; Interlude: Byte = 0);
const
KeyConst: array[0..3] of Byte = ($A1,$6C,$54,$87);
KeyIntrl: array[0..7] of Byte = ($C8,$27,$93,$01,$A1,$6C,$31,$97);
var key2:array[0..15] of Byte;
begin
if Interlude <> 0 then begin
keyLen:=15;
Move(XorKey,key2,8);
Move(KeyIntrl,key2[8],8);
end else begin
keyLen:=7;
Move(XorKey,key2,4);
Move(KeyConst,key2[4],4);
end;
Move(key2,GKeyS,16);
Move(key2,GKeyR,16);
end;

procedure TXorCodingOut.PreDecrypt(var Data; var Size: Word);
procedure YourDecryptFuncton(var Packet:TPacket);
begin
//сюда поступает пакетик который необходимо декриптовать.
//если ты захочешь сразу преобразовать его в декриптованный линейковский пакет
//то decryptgp оставляй пустым
//если же это поверхносный навесок на криптовку - рекомендую "раздельное питание"
end;

var
L2Packet : TPacket; //обьявлен в шаредструктуре
OutBuffer : array[0..$ffff] of byte;
begin
//client>>[PreDecrypt]>DecryptGP angry PH)>EncryptGP>PostEncrypt>>server
//выходящий буффер - пуст.
fillchar(OutBuffer, $ffff, 0);

//Суем в аккумулятор то что пришло.
move(data,DecAccumulator[DecAccumulatorSize],size);

inc(DecAccumulatorSize, Size);

Size := 0; //выход обнуляем не давая пакетхаку эту поцию обработать если на следующей проверке
//мы вылетим с этой функции либо не попадем в цикл (это и есть склейка пакетов. когда длина линейковского пакета
//меньше фактически полученных данных. мы будем ждать копя данные в аккумуляторе)

if DecAccumulatorSize < 2 then exit; //в аккумуляторе нет даже длинны.

//в акумуляторе есть чтото по длинне превышающей либо равной 2м байтам. читаем их как размер пакета
move(DecAccumulator[0], L2Packet.Size, 2);

//!если криптуеться весь траффик включая ДЛИННУ пакетов - в этом месте декриптовать L2Packet.Size!

while (L2Packet.Size <= DecAccumulatorSize) do
//Резка пакетов в этом вайле
//будем крутиться тут пока нам будет хватать фактических данных для обслуживания длинн линейковских пакетов.
begin
//подчистим дату пакета, дабы не мусор не смущал при отладке.
fillchar(l2packet.data[0], $FFFD, 0);
//вытягиваем с акумулятора данные пакета.
move(DecAccumulator[2], L2Packet.data[0], L2Packet.Size-2);
//сдвигаем батики в акумуляторе на эту же длинну, затирая считаный с аккумулятора пакет
move(DecAccumulator[L2Packet.Size], DecAccumulator[0], DecAccumulatorSize-L2Packet.Size);
//и умельшаем длинну акумулятора
dec(DecAccumulatorSize, L2Packet.Size);
//Декриптуем
YourDecryptFuncton(L2Packet);
//декриптованный пакет суем в временный выходящий буффер (он нужен только потому что нельзя мовнуть в data[xxx])
move(L2Packet, OutBuffer[Size], L2Packet.Size);
//и увеличиваем колво байт в выходящем буфере
inc(Size, L2Packet.Size);
//Режем следующий пакет
if DecAccumulatorSize >= 2 then
begin
move(DecAccumulator[0], L2Packet.Size, 2);
//декрипт длинны ?
end
else
break;
end;

//сливаем данные с временного буфера в выход буффер
move(OutBuffer[0], data, $ffff);
end;

procedure TXorCodingOut.PostEncrypt(var Data; var Size: Word);
//в общем точная копия декрипта, только екрипт. а так все на тех же местах.

procedure YourEncryptFuncton(var Packet:TPacket);
begin
//аналоично YourDeacryptFuncton но наоборот.

end;

var
L2Packet : TPacket;
OutBuffer : array[0..$ffff] of byte;
begin
fillchar(OutBuffer, $ffff, 0);
move(data,EncAccumulator[EncAccumulatorSize],size);
inc(EncAccumulatorSize, Size);
Size := 0;
if EncAccumulatorSize < 2 then exit;
move(EncAccumulator[0], L2Packet.Size, 2);
while (L2Packet.Size <= EncAccumulatorSize) do
begin
fillchar(l2packet.data[0], $FFFD, 0);
move(EncAccumulator[2], L2Packet.data[0], L2Packet.Size-2);
move(EncAccumulator[L2Packet.Size], EncAccumulator[0], EncAccumulatorSize-L2Packet.Size);
dec(EncAccumulatorSize, L2Packet.Size);
YourEncryptFuncton(L2Packet);
move(L2Packet, OutBuffer[Size], L2Packet.Size);
inc(Size, L2Packet.Size);
if EncAccumulatorSize >= 2 then
begin
move(EncAccumulator[0], L2Packet.Size, 2);
end
else
break;
end;
move(OutBuffer[0], data, $ffff);
end;

begin

end.

unit usharedstructs;

interface
uses Classes;

const
PCK_GS_ToServer = 4;
PCK_GS_ToClient = 3;
PCK_LS_ToServer = 2;
PCK_LS_ToClient = 1;

type

TEncDecSettings =
record
isChangeXor,
isNoDecrypt,
isNoProcessToClient,
isNoProcessToServer,
isKamael,
isGraciaOff,
isSavePLog,
isNoLog,
ShowLastPacket,
HexViewOffset,
isprocesspackets : boolean;

NoFreeAfterDisconnect : boolean;
UseSocks5Chain, Socks5NeedAuth : boolean;
Socks5Port : cardinal;
Socks5Host, Socks5AuthUsername, Socks5AuthPwd : string;

isAION{,
ignoreServerToClient,
ignoreClientToServer}: boolean;
end;

{Используется плагинами}

PCodingClass =^TCodingClass;
TCodingClass = class(TObject)
public
GKeyS,GKeyR:array[0..15] of Byte;
procedure InitKey(const XorKey; Interlude: Byte = 0); Virtual; Abstract;
procedure DecryptGP(var Data; var Size: Word); Virtual; Abstract;
procedure EncryptGP(var Data; var Size: Word); Virtual; Abstract;
procedure PreDecrypt(var Data; var Size: Word); Virtual; Abstract;
procedure PostEncrypt(var Data; var Size: Word); Virtual; Abstract;
end;

PCorrectorData = ^TCorrectorData;
TCorrectorData = packed record
_seed : integer; // random generator seed for mixing id tables
_1_byte_table : string;
_2_byte_table : string;
_2_byte_table_size: integer;
_id_mix : boolean;
temp_seed : integer;
protocol: integer;
end;

TCharArray = array[0..$FFFF] of AnsiChar;
TCharArrayEx = array[0..$1FFFE] of AnsiChar; //2х

PPacket = ^TPacket;
TPacket = packed record case Integer of
0: (Size: Word;
Data: array[0..$FFFD] of Byte);
1: (PacketAsByteArray: array[0..$FFFF] of Byte);
2: (PacketAsCharArray: TCharArray);
3: (pckSize: Word;
pckId: Byte;
pckData: array[0..$FFFC] of Byte);
end;

TNewPacket = procedure(var Packet:tpacket;FromServer : boolean; Caller: TObject) of object; // Caller это TencDec к примеру -> TencDec(caller).name вызывает акшин только TencDec
TNewAction = procedure (action : byte; Caller: TObject) of object; //Caller зависит от action
TStringArray = array of string;

{экземпляр этого класса (точнее его потомок) передается в плагины.}
TOnTimer = procedure(const param: Cardinal); stdcall;
tConnectInfo = packed record
ConnectID:integer;
ConnectName:string[200];
end;

tConnectInfoEx = packed record //Используеться в ASL
ConnectInfo : tConnectInfo;
Valid : boolean;
end;

PPluginStruct = ^TPluginStruct;
TPluginStruct = class (tobject)
private
public
userFormHandle: THandle;
ConnectInfo : tConnectInfo;
UserFuncs : tstringlist;
function ReadC(const pck:string; const index:integer):byte; Virtual; Abstract;
function ReadH(const pck:string; const index:integer):word; Virtual; Abstract;
function ReadD(const pck:string; const index:integer):integer; Virtual; Abstract;
function ReadQ(const pck:string; const index:integer):int64; Virtual; Abstract;
function ReadF(const pck:string; const index:integer):double; Virtual; Abstract;
function ReadS(const pck:string; const index:integer):string; Virtual; Abstract;

function ReadCEx(const pck; const index:integer):byte; Virtual; Abstract;
function ReadHEx(const pck; const index:integer):word; Virtual; Abstract;
function ReadDEx(const pck; const index:integer):integer; Virtual; Abstract;
function ReadQEx(const pck; const index:integer):int64; Virtual; Abstract;
function ReadFEx(const pck; const index:integer):double; Virtual; Abstract;
function ReadSEx(const pck; const index:integer):string; Virtual; Abstract;
procedure WriteC(var pck: string; const v:byte; ind:integer=-1); Virtual; Abstract;
procedure WriteH(var pck: string; const v:word; ind:integer=-1); Virtual; Abstract;
procedure WriteD(var pck: string; const v:integer; ind:integer=-1); Virtual; Abstract;
procedure WriteQ(var pck: string; const v:int64; ind:integer=-1); Virtual; Abstract;
procedure WriteF(var pck: string; const v:double; ind:integer=-1); Virtual; Abstract;
procedure WriteS(var pck: string; const v:string; ind:integer=-1); Virtual; Abstract;
procedure WriteCEx(var pck; const v:byte; ind:integer=-1); Virtual; Abstract;
procedure WriteHEx(var pck; const v:word; ind:integer=-1); Virtual; Abstract;
procedure WriteDEx(var pck; const v:integer; ind:integer=-1); Virtual; Abstract;
procedure WriteQEx(var pck; const v:int64; ind:integer=-1); Virtual; Abstract;
procedure WriteFEx(var pck; const v:double; ind:integer=-1); Virtual; Abstract;
procedure WriteSEx(var pck; const v:string; ind:integer=-1); Virtual; Abstract;

Function SetScriptVariable(scriptid:integer; varname:string; varvalue v ariant):boolean; Virtual; Abstract;
Function GetScriptVariable(scriptid:integer; varname:string) v ariant; Virtual; Abstract;
function CallScriptFunction(scriptid:integer; Name: String; Params: Variant; var error:string): Variant; Virtual; Abstract;

function IsScriptIdValid(scriptid:integer):boolean; Virtual; Abstract;

function CreateAndRunTimerThread(const interval, usrParam: Cardinal;
const OnTimerProc: TOnTimer): Pointer; Virtual; Abstract;
procedure ChangeTimerThread(const timer: Pointer; const interval: Cardinal;
const usrParam: Cardinal = $ffffffff;
const OnTimerProc: TOnTimer = nil); Virtual; Abstract;
procedure DestroyTimerThread(var timer: Pointer); Virtual; Abstract;
function StringToHex(str1,Separator:String):String; Virtual; Abstract;
function HexToString(Hex:String):String; Virtual; Abstract;
function DataPckToStrPck(var pck): string; Virtual; Abstract;
procedure SendPacketData(var pck; const tid: integer; const ToServer: Boolean); Virtual; Abstract;
procedure SendPacketStr(pck: string; const tid: integer; const ToServer: Boolean); Virtual; Abstract;
procedure SendPacket(Size: Word; pck: string; tid: integer; ToServer: Boolean); Virtual; Abstract;

function getConnectionName(id : integer):string; Virtual; Abstract;
function getConnectioidByName(name : string):integer; Virtual; Abstract;
Function GoFirstConnection:boolean; Virtual; Abstract;
Function GoNextConnection:boolean; Virtual; Abstract;
procedure ShowUserForm(ActivateOnly:boolean); Virtual; Abstract;
Procedure HideUserForm; Virtual; Abstract;
end;

implementation

end.

Это исходник для стандартной шифрации от L2phx 3.4
library newxor;

uses
windows,
Coding in 'Coding.pas';

type
TXorCoding = class(TCodingClass)
private
keyLen: Byte;
public
constructor Create;
procedure InitKey(const XorKey; Interlude: Boolean = False);override;
procedure DecryptGP(var Data; const Size: Word);override;
procedure EncryptGP(var Data; const Size: Word);override;
end;

TXorCodingOut = class(TCodingClass)
private
keyLen: Byte;
public
constructor Create;
procedure InitKey(const XorKey; Interlude: Boolean = False);override;
procedure DecryptGP(var Data; const Size: Word);override;
procedure EncryptGP(var Data; const Size: Word);override;
end;

function CreateCoding(Value:PCodingClass): HRESULT; stdcall;
begin
Result:=0;
try
Value^:=TXorCoding.Create;
except
Result:=-1;
Value^:=nil;
end;
end;

function CreateCodingOut(Value:PCodingClass): HRESULT; stdcall;
begin
Result:=0;
try
Value^:=TXorCodingOut.Create;
except
Result:=-1;
Value^:=nil;
end;
end;

exports CreateCoding, CreateCodingOut;

{ TXorCoding }

constructor TXorCoding.Create();
begin
FillChar(GKeyS[0],SizeOf(GKeyS),0);
FillChar(GKeyR[0],SizeOf(GKeyR),0);
keyLen := 0;
End;

procedure TXorCoding.DecryptGP(var Data; const Size: Word);
var
k:integer;
pck:array[0..$4FFF] of Byte absolute Data;
begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor GKeyR[k and keyLen] xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor GKeyR[0];
Inc(PLongWord(@GKeyR[keyLen-7])^,size);
end;

procedure TXorCoding.EncryptGP(var Data; const Size: Word);
var
i:integer;
pck:array[0..$4FFF] of Byte absolute Data;
begin
if size<>0 then pck[0]:=pck[0] xor GKeyS[0];
for i:=1 to size-1 do
pck[i]:=pck[i] xor GKeyS[i and keyLen] xor pck[i-1];
Inc(PLongWord(@GKeyS[keyLen-7])^,size);
end;

procedure TXorCoding.InitKey(const XorKey; Interlude: Boolean = False);
const
KeyConst: array[0..3] of Byte = ($A1,$6C,$54,$87);
KeyIntrl: array[0..7] of Byte = ($C8,$27,$93,$01,$A1,$6C,$31,$97);
var key2:array[0..15] of Byte;
begin
if Interlude then begin
keyLen:=15;
Move(XorKey,key2,8);
Move(KeyIntrl,key2[8],8);
end else begin
keyLen:=7;
Move(XorKey,key2,4);
Move(KeyConst,key2[4],4);
end;
Move(key2,GKeyS,16);
Move(key2,GKeyR,16);
end;

{ TXorCodingOut }

constructor TXorCodingOut.Create;
begin
FillChar(GKeyS[0],SizeOf(GKeyS),0);
FillChar(GKeyR[0],SizeOf(GKeyR),0);
keyLen := 0;
end;

procedure TXorCodingOut.DecryptGP(var Data; const Size: Word);
var
k:integer;
pck:array[0..$4FFF] of Byte absolute Data;
begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor GKeyR[k and keyLen] xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor GKeyR[0];
Inc(PLongWord(@GKeyR[keyLen-7])^,size);
end;

procedure TXorCodingOut.EncryptGP(var Data; const Size: Word);
var
i:integer;
pck:array[0..$4FFF] of Byte absolute Data;
begin
if size<>0 then pck[0]:=pck[0] xor GKeyS[0];
for i:=1 to size-1 do
pck[i]:=pck[i] xor GKeyS[i and keyLen] xor pck[i-1];
Inc(PLongWord(@GKeyS[keyLen-7])^,size);
end;

procedure TXorCodingOut.InitKey(const XorKey; Interlude: Boolean);
const
KeyConst: array[0..3] of Byte = ($A1,$6C,$54,$87);
KeyIntrl: array[0..7] of Byte = ($C8,$27,$93,$01,$A1,$6C,$31,$97);
var key2:array[0..15] of Byte;
begin
if Interlude then begin
keyLen:=15;
Move(XorKey,key2,8);
Move(KeyIntrl,key2[8],8);
end else begin
keyLen:=7;
Move(XorKey,key2,4);
Move(KeyConst,key2[4],4);
end;
Move(key2,GKeyS,16);
Move(key2,GKeyR,16);
end;

begin

end.


Исходники найдешь Здесь
http://l2ph.coderx.ru/svn/l2phx3/


Google в помощь
newxor.dll тут
http://www.fayloobmennik.net/files/go/150145912.html?check=82bd98f491a780752a8bc66206dcb879&file=1512084
Сообщение отредактировал mega - Ср, 16.11.2016, 18:18
0
Оффлайн Po6oKon

Администраторы

14
01.12.2016, 00:20
Оффлайн Po6oKon
01.12.2016, 00:20
Администраторы
Репутация: 22
Сообщений: 148
mega, собственно говоря хотел у тебя спросить, висит к примеру сокс сервер через которой идёт прослушка трафика, на виртуалке запущен пакетник, который по идее должен коннектится и слушать трафик от прокси, но не слушает ... Какой софт юзаешь для поднятия сокс сервера, да и какие настройки пакетника?
За ранее благодарен smile

Зарегистрируйся!:)
Добавить в Skype
22
Оффлайн WhiteAngel

Пользователи

15
16.01.2017, 11:53
Оффлайн WhiteAngel
16.01.2017, 11:53
Пользователи
Репутация: 0
Сообщений: 2
Кто-то может объяснить каким образом СГ может блокировать кликеры? Мне не укладывается в голове.
0
Форум Lineage 2 » Вмешательство в внутриигровой процесс » Актуальные уязвимости Lineage 2 » Все варианты обхода защит в одной теме! (Всевозможные варианты обхода различных - защит в Lineage 2)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:
Нужное админу
30 Отборных SQL Запросов - Для Lineage... 30 Отборных SQL Запросов - Для Lineage...
Просмотров: 718
Рейтинг: 0.0
GM Команды Lineage 2 GM Команды Lineage 2
Просмотров: 751
Рейтинг: 0.0
Редактор геодаты - GeoEditor v1.6 Редактор геодаты - GeoEditor v1.6
Просмотров: 847
Рейтинг: 0.0
Чистый StressWeb 13 (R13.05.17) Чистый StressWeb 13 (R13.05.17)
Просмотров: 1414
Рейтинг: 0.0
Шифрование файлов UTX и UKX Шифрование файлов UTX и UKX
Просмотров: 906
Рейтинг: 5.0
Нужное игроку
Уязвимые сервера Lineage 2
Автор: Po6oKon
Время: 10:00
Все варианты обхода защит в одной теме...
Автор: Po6oKon
Время: 00:59
Прокси сервер или обход защиты?
Автор: Po6oKon
Время: 20:10
Сервера с рабочим брутом!
Автор: MrTraC
Время: 18:57
l2phx: Курс молодого бойца.
Автор: MrTraC
Время: 18:52
Реклама
О нас

Сообщество посвящаенное — популярной MMORPG онлайн игре Lineage 2.

Меню
  • Главная страница
  • Обратная связь
  • Каталог серверов
  • Каталог файлов
  • Реклама на сайте
Последние комментарии
  • La2 Remote Controller v.4.1 - Контроль за окнами Ответил: Po6oKon в 29.05.2017
  • La2 Remote Controller v.4.1 - Контроль за окнами Ответил: intrialepd13 в 20.04.2017
  • La2 Remote Controller v.4.1 - Контроль за окнами Ответил: Po6oKon в 17.04.2017
  • La2 Remote Controller v.4.1 - Контроль за окнами Ответил: intrialepd13 в 16.04.2017

© 2017 - Все права защищены | Правила пользования сайтом | Хостинг от uCoz — не верите? Спросите сами!

Авторизация на сайте

Старая форма входа
Забыл пароль | Регистрация