PDA

Просмотр полной версии : Gracia Final (RuOff) - XOR key


Aieks777
13.07.2009, 13:59
Вкратце:

procedure TSnifferThread.ParcePacket(const PacketSize: Word);
var
IPHeader: TIPHeader;
ICMPHeader: TICMPHeader;
TCPHeader: TTCPHeader;
ci: Integer;
PacketType:String;
Addr:TInAddr;
begin
Inc(MainForm.TotalPacketCount);
// Кол-во пакетов
Move(Packet[0], IPHeader, IPHeaderSize);

// Определяем тип пакета
case IPHeader.iph_protocol of
IPPROTO_ICMP: // ICMP
begin
Move(Packet, ICMPHeader, ICMPHeaderSize);
end;
IPPROTO_TCP: // TCP
begin
Move(Packet[IPHeaderSize], TCPHeader, TCPHeaderSize);
end;

else
PacketType := 'Unsupported (0x' + IntToHex(IPHeader.iph_protocol, 2) + ')';
end;

// Фильтр по IP

Addr.S_addr := IPHeader.iph_src;
if inet_ntoa(Addr)=MainForm.RemHost.Text then begin

HexData:='';
for ci:=1 to PacketSize do HexData:=HexData+' | '+IntToHex(Packet[ci], 2);
HexData:=HexData+#13+#10;
MainForm.HexMemo.Lines.Add(HexData);

IntData:='';
for ci:=1 to PacketSize do IntData:=IntData+' | '+IntToStr(Packet[ci]);
IntData:=IntData+#13+#10;
MainForm.IntMemo.Lines.Add(IntData);

Synchronize(ShowPacket);
end;

^^^^это все прием пакета

Вопрос в следущем: нужно как я понимаю пакет отправить на Дэкрипт по xor'у чтобы видеть реальную структуру пакета (если что попровляйте), по xor'у я знаю следущее: чтобы расшифровать нужен Ключ-длина пакета которая указывается в начале пакета, т.е. первые 2 байта типа A0 00(если что поправьте), также нужна некая константа шифрования, из исходников к l2phx из Newxor'a вижу следущее: константа для интерлюдии=15, для других хроник=7, нужна константа для Gracia Final для руоффа(это суть вопроса).

Попутные вопросы: на расшифровку надо отправлять пакет без первых 2 байт или полностью?

ЗЫ: Если константа шифрования=7 то сорри, я сейчас на работе и проверить немогу
ЗЗЫ: На поиск не отправлять, ибо я в сетевом програмировании, тем более АПИшном пробую себя впервые, так что даже если ответы есть на мои вопросы, то я их непонял скорее всего, или просто незаметил тему )
ЗЗЗЫ: Так же хотелось бы на основе данной темки сделать фак(когда я сам разберусь), как писать снифер+расшифровщик+простейший анализатор пакетов... для самого низкого уровня подготовки программиста

Жду ответов, коментов, и здоровой критики где можно сделать лучше, быстрее, менее ресурсотребовательным мой код, с указанием где именно исправить, или хотя бы какой функцией/алгоритмом заменить! :-)


Скачать файл (http://dump.ru/file/3050439)

[I]Добавлено через 3 часа 53 минуты
Добавил дешифровку по XOR'у в модуль XORUnit.pas на основе Coding.pas из l2phx'а, проблемы с параметрами и возможно с инизализацией Объекта класса декодирования

Скачать файл (http://dump.ru/file/3050785)

xkor
13.07.2009, 16:56
из исходников к l2phx из Newxor'a вижу следущее: константа для интерлюдии=15, для других хроник=7на самом деле до интерлюда 7, начиная с интерлюда 15, но это не константа а размер ключа шифрования минус один
Попутные вопросы: на расшифровку надо отправлять пакет без первых 2 байт или полностью?размер не шифруется и при изменении ключа размер берётся только данных, без 2х байтов размера, то есть истинный размер минус два

ЗЗЗЫ: Так же хотелось бы на основе данной темки сделать фак(когда я сам разберусь), как писать снифер+расшифровщик+простейший анализатор пакетов... для самого низкого уровня подготовки программистанафига?, наплодить побольше нубопрогеров пишущих методом копипаста не понимая как это работает?)

Aieks777
13.07.2009, 20:48
Щас пришел домой, буду конкретно разбиратся, а то на работе даже этот простенький проект компилится минуты 3... ><" По ходу буду задавать вопросы

ЗЫ: как понимаю в случае вопрос указывать конкретный участок кода, где возникли проблемы, а не весь проект чтоб как сказано не копипастили?)

PPS: Срочно требуется хорошая статейка по шифровке BlowFish!!

Yegor
14.07.2009, 17:33
Угу а вот там где вы хотите это применять длина пакета как раз тоже шифруется неизвестно чем.

xkor
14.07.2009, 20:04
Yegor, ну тока для исходящих, и вторая шифровка идёт уже поверх трафика и не по пакетам а целиком на поток, поэтому там пох размер/не размер...

Aieks777
15.07.2009, 15:39
Yegor, ну тока для исходящих, и вторая шифровка идёт уже поверх трафика и не по пакетам а целиком на поток, поэтому там пох размер/не размер...

xkor, как я понял, ключ шифрации(шифровки, О_о) для исходящих пакетов каждый раз разный, и высылается сервером, а ключ для входящих пакетов всегда константа, то есть для меня он равен 15(Грация) и таблица замены(как я понял токен), не меняется или вообще не используется?

Пожалуста дайте ктонить линк на статью с описанием работы ГС-К и ЛС-К, а то нашел только для С4 и как я понял для версии хроник выше Интерлюдии токен вообще поменял своё предназначение и используется несколько иначе, хотелось бы больше инфы по этому поводу, а то разбиратся в исходниках l2phx'а довольно мучительно, на мой взгляд все слишком сильно разбросано по разным местам )


CryptInit



Назначение: передает клиенту ключ шифрования(XOR)
Формат:
00
01 // неизветсно
XX XX XX XX ... // Массив длинной 16 байт - ключ XOR
01 00 00 00 // неизветсно
01 00 00 00 // неизветсно

Вот нашел, пакет который высылает XOR-ключ, который используется для последущей дешифровки пакетов от геймсервара, этот пакет из С4, для грации он тоже характерен? Если да, то чтобы расшифровать этот пакет, нужно его сначала разXOR'ить по ключу 15, который является статическим, а все последущие уже дешифровать с помощью ключа из пакета CryptInit?

Сразу говорю, интересует только прием пакетов



Так вроде разобрался чуток, вообщем Блоуфиш по сути надстройка на XOR'ом, как я понял идет разXOR'ивание по ключу 15, и замена по таблице замена(в википедии по Блоуфишу читал), эта таблица - GKeyR, которая является структурой, вот только где вы заполняете GKeyR я не нашел ибо комп лагает жутко когда я модули pas'овские открываю (на работе пень второй с 256 памяти) ><" приду домой разберусь, а сейчас просто знающие люди проследите ход логики, верно я мыслю или нет?

Grinch
15.07.2009, 18:05
убери обработку исходящего трафика, все остальное оставь как для грации. входящий трафик не шефруется почти даже снифер л2он работает на входящем трафике.

Aieks777
15.07.2009, 18:39
http://i25.tinypic.com/30kyrnm.jpg

Вообщем вот дамп пакета "как есть", то есть не производились никакие действия кроме IntToHex... что дальше, а то вы меня совсем запутали! Дальше как я понимаю отрезаем первые 2 байта отвечающие за размер пакета, потом прозводим сортировку в обратном порядке и получаем пакет, так чтоли? Затем берем берем первый байт который отвечает за тип пакета(сказать, двигатся, сесть и т.д.) и производим анализ какие паметры хранятся в остальном теле пакета...
Итого что получается(беру средний дамп пакета между разделителями ============): отсекаем А0 00, пересортировываем с конца наперед, и получаем :
07 1Е 8B 7D 31 94 64 6D
XX XX XX XX XX XX XX XX
отсюда 07 - Revive:H(ObjectID) из l2phx, то есть нечто типа перерисовки положения объекта наверное... Но исходя из этого остается еще большая куча байтов, СЛИШКОМ большая для ID некоторого объекта, из чего следует что действия неправильны, и следавательно наибольшая вероятность что он зашифрован ))


Едем дальше:

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


Создаем Объект класса TXorCoding
Заполняем нулями массивы: GKeyR заполняем нулями SizeOf(GKeyR) раз, и GKeyS заполняем нулями SizeOf(GKeyS) раз
Устанавливаем длину(?) KeyLen в ноль


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;

Что у нас тут интересного:
Принимем в процедуре пакет Data в хексе, и ничего более, также принимаем число Size отвечающее за размер пакета
Расксориваем пакет, с байта Size-1, что посути является SizeOf(ВЕСЬ ПАКЕТ БЕЗ ОТСЕЧЕНИЯ ПЕРВЫХ 2УХ БАЙТ) - 3
В ходе Расксоривания также одновременно и сортировка в обратном порядке
Еще помимо этого в массиве GKeyR байт под номером KeyLen-7 увеличиваем на Size(зачем, и почему именно KeyLen-7, видимо для Грации это будет KeyLen-15??)


Как я понял для дешифровки ВХОДЯЩЕГО трафика мне ничего более использовать ненадо

ЗЫ: Народ, я сел за АПИ 3 дня назад, сжальтесь и пишите поподробнее, знающим людям тут на 1 минуту больше по клавишам стучать чтобы написать подробный ответ
ЗЗЫ: Повторюсь, указывайте на ошибки, не надо сразу причислять к нубам, на ошибках учатся

xkor
16.07.2009, 00:29
Расксориваем пакет, с байта Size-1, что посути является SizeOf(ВЕСЬ ПАКЕТ БЕЗ ОТСЕЧЕНИЯ ПЕРВЫХ 2УХ БАЙТ) - 3почему -3?, расксориваем с самого последнего байта пакета, первые два байта не трогаем, DecryptGP предполагает что в неё передаётся пакет без первых двух байт размера, поэтому и нужен второй параметр - размер...

Еще помимо этого в массиве GKeyR байт под номером KeyLen-7 увеличиваем на Size(зачем, и почему именно KeyLen-7, видимо для Грации это будет KeyLen-15??)во первых не байт а 4хбайтовое число типа Cardinal (он же LongWord) находящееся по смещению размер_пакета - 7, во вторых KeyLen для того и введен чтобы KeyLen-7 всегда указывало на изменчивую часть ключа, то есть до интерлюда это были первые 4 байта, а после - 4 байта начиная с 8го (при нумерации с нуля естественно)

Aieks777
16.07.2009, 09:37
Вот сразу бы так! Уже все по-тихоньку проясняется... Думаю вечером уже будет программка расшифровывающая пакеты верно, спасибо!

UPD: Невытерпел.... ^^

Протестите ктонить на руоффе Скачать файл (http://dump.ru/file/3065455)(IP сами введите, а то он у них динамика... вчера вечером кляпался к серву так уже на конце 111 было, Windows+R->cmd->netstat /b-> и ищите там l2.bin к какому IP кляпается)

Кстати заметил такой прикол, при выключеном касперском в списках адаптеров отображается его адаптер... Этот козел чтоли заменяет системный NDIS-драйвер, чтобы снифать пакеты на канальном уровне? )

xkor
16.07.2009, 13:50
Aieks777, не заменяет а добавляет свой.., его можно увидеть в свойствах любого подключения)

NLObP
16.07.2009, 13:58
Aieks777, просьба не выкладывать просто экзешник, а добавлять исходники для того, чтобы можно было самостоятельно сделать прогу и проверить её работу.

PS: на форуме были исходники la2_client_emu (коннект к логинсерверу), который правильно работает с трафиком грации и руофф в том числе (можно смело делать l2online).

Yegor
16.07.2009, 14:11
NLObP, он правильно работает только при небольшом исправлении

NLObP
16.07.2009, 14:15
NLObP, он правильно работает только при небольшом исправлении
Каком? У меня сразу работает и для джавы и для оффа.

Yegor
16.07.2009, 16:01
NLObP, там в пакете где передается логин и пароль закодированный по RSA надо ещё символ добавить. Без этого, во всяком случае на шоке, не заработало. С лобавлением проверял на офе и других серверах - LoginOK/

xkor
16.07.2009, 17:35
Yegor, да на шоке когда то защита была чисто в этом байтике)

Yegor
17.07.2009, 05:03
xkor, мы уже с тобой это обсуждали в другой ветке, другие сервера этим байтиком тоже не брезгуют.

Aieks777
20.07.2009, 10:59
Щас домой приду сырцы скину... Впринципе вроде работает, только почему-то принимает по одному пакету, после-чего стоп-старт надо перекликивать... Насчет готовых/полуготовых прог... Самому разбиратся интересней ^_^

Добавлено через 9 минут

PS: на форуме были исходники la2_client_emu (коннект к логинсерверу), который правильно работает с трафиком грации и руофф в том числе (можно смело делать l2online).

Повторюсь, самому разбиратся интереснее, но я щас посмотрю, хотя меня не интересует отправка пакетов, тем более логин-серверу, все-что нужно только прием причем от гейм-сервера :)

LOL
28.07.2009, 20:25
а отправку сделает кто нить?)
или может уже есть готовый вариант для отправки пакетов без кика? или я отстал от жизни)

Aieks777
03.08.2009, 22:31
Почти ))

xkor
03.08.2009, 23:23
реализовал я полноценную работу пакетхака на руофе, но в паблик естесно выкладывать не буду)

Maxno
04.08.2009, 00:16
А говорил не посилам ;)

Yegor
04.08.2009, 00:16
xkor, принцип перехвата теперь уже другой? Работает наверно по принципу ингейм бота?

xkor
04.08.2009, 01:06
Yegor, ну примерно как ИГ только немного другие функции хукаю, неделю блин сидел в IDA и сравнивал engine.dll от руофа и распакованную старую какую то...

Yegor
04.08.2009, 02:39
xkor, тоесть алгоритм не взломан :(

Ну все ранво молодец. Мы верили в тебя. Хотя я не знаю зачем мне пакетхак на руофе.

xkor
04.08.2009, 18:09
Yegor, ну у тебя его и нет), хотя я тоже хз зачем он мне на руофе, да и на не руофе тоже)

Добавлено через 15 часов 22 минуты
ыыы, после сегодняшнего апдейта и у меня опять нет))))

Yegor
04.08.2009, 19:06
xkor, этот апдейт наверно лично для тебя сделали, предвидя страшные последствия читов реализованных на пакетном уровне.

Grinch
04.08.2009, 20:27
реализовал я полноценную работу пакетхака на руофе, но в паблик естесно выкладывать не буду)
я успел протестить всю ночь до апдейта сидел ) пакеты снифал сцуко, а счастье было так близко

xkor
05.08.2009, 02:56
ну кстати я уже длл почти адаптировал под изменения, из двух смещений нашел оба, но одно меня смущает джампами, такое впечатление что там уже есть перехват %), а перехват перехвата придется делать немного по другому...

Добавлено через 4 часа 45 минут
блин, ппц, чтот они там антиперехватовское замутили сцуки, перехват ставится вроде, но как до него дело доходит как будто и нет его...

Yegor
05.08.2009, 11:44
xkor, а гг удаеться вырубить? А то старые методы не прокатывают уже.

Grinch
05.08.2009, 12:04
блин, ппц, чтот они там антиперехватовское замутили сцуки, перехват ставится вроде, но как до него дело доходит как будто и нет его...
где т я читал о подобном давным давно, хм... во склироз, там типа процедуры которая с эталоном сравнивает вот только эталон найти и поправить до нужного нам, но хз где я эт читал фак не на ач ли :)

destructor
03.09.2009, 13:39
xkor, а адреса не подкинеш?:)

xkor
03.09.2009, 15:54
destructor, у меня последних нет, после того как я последний раз адреса находил их уже пару раз меняли...

destructor
03.09.2009, 19:20
значит находил где то "не там"...

xkor
04.09.2009, 01:32
destructor, в смысле "не там"?