Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 13.07.2009, 13:59   #1
Новичок
 
Регистрация: 12.07.2009
Сообщений: 13
Сказал Спасибо: 1
Имеет 2 спасибок в 2 сообщенях
Aieks777 пока неопределено
По умолчанию Gracia Final (RuOff) - XOR key

Вкратце:
Код:
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[IPHeaderSize], 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 то сорри, я сейчас на работе и проверить немогу
ЗЗЫ: На поиск не отправлять, ибо я в сетевом програмировании, тем более АПИшном пробую себя впервые, так что даже если ответы есть на мои вопросы, то я их непонял скорее всего, или просто незаметил тему )
ЗЗЗЫ: Так же хотелось бы на основе данной темки сделать фак(когда я сам разберусь), как писать снифер+расшифровщик+простейший анализатор пакетов... для самого низкого уровня подготовки программиста

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


Скачать файл

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

Скачать файл

Последний раз редактировалось Aieks777, 13.07.2009 в 13:59. Причина: Добавлено сообщение
Aieks777 вне форума   Ответить с цитированием
За это сообщение Aieks777 нажился спасибкой от:
Старый 13.07.2009, 16:56   #2
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

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

Цитата:
Сообщение от Aieks777 Посмотреть сообщение
ЗЗЗЫ: Так же хотелось бы на основе данной темки сделать фак(когда я сам разберусь), как писать снифер+расшифровщик+простейший анализатор пакетов... для самого низкого уровня подготовки программиста
нафига?, наплодить побольше нубопрогеров пишущих методом копипаста не понимая как это работает?)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 13.07.2009, 20:48   #3
Новичок
 
Регистрация: 12.07.2009
Сообщений: 13
Сказал Спасибо: 1
Имеет 2 спасибок в 2 сообщенях
Aieks777 пока неопределено
По умолчанию

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

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

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

Последний раз редактировалось Aieks777, 14.07.2009 в 09:42.
Aieks777 вне форума   Ответить с цитированием
Старый 14.07.2009, 17:33   #4
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Угу а вот там где вы хотите это применять длина пакета как раз тоже шифруется неизвестно чем.
Yegor вне форума   Ответить с цитированием
Старый 14.07.2009, 20:04   #5
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Yegor, ну тока для исходящих, и вторая шифровка идёт уже поверх трафика и не по пакетам а целиком на поток, поэтому там пох размер/не размер...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 15.07.2009, 15:39   #6
Новичок
 
Регистрация: 12.07.2009
Сообщений: 13
Сказал Спасибо: 1
Имеет 2 спасибок в 2 сообщенях
Aieks777 пока неопределено
По умолчанию

Цитата:
Сообщение от xkor Посмотреть сообщение
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 памяти) ><" приду домой разберусь, а сейчас просто знающие люди проследите ход логики, верно я мыслю или нет?

Последний раз редактировалось Aieks777, 15.07.2009 в 16:55.
Aieks777 вне форума   Ответить с цитированием
Старый 15.07.2009, 18:05   #7
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию

убери обработку исходящего трафика, все остальное оставь как для грации. входящий трафик не шефруется почти даже снифер л2он работает на входящем трафике.
Grinch вне форума   Ответить с цитированием
Старый 15.07.2009, 18:39   #8
Новичок
 
Регистрация: 12.07.2009
Сообщений: 13
Сказал Спасибо: 1
Имеет 2 спасибок в 2 сообщенях
Aieks777 пока неопределено
По умолчанию



Вообщем вот дамп пакета "как есть", то есть не производились никакие действия кроме 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 минуту больше по клавишам стучать чтобы написать подробный ответ
ЗЗЫ: Повторюсь, указывайте на ошибки, не надо сразу причислять к нубам, на ошибках учатся

Последний раз редактировалось Aieks777, 16.07.2009 в 09:54.
Aieks777 вне форума   Ответить с цитированием
Старый 16.07.2009, 00:29   #9
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

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

Цитата:
Сообщение от Aieks777 Посмотреть сообщение
Еще помимо этого в массиве GKeyR байт под номером KeyLen-7 увеличиваем на Size(зачем, и почему именно KeyLen-7, видимо для Грации это будет KeyLen-15??)
во первых не байт а 4хбайтовое число типа Cardinal (он же LongWord) находящееся по смещению размер_пакета - 7, во вторых KeyLen для того и введен чтобы KeyLen-7 всегда указывало на изменчивую часть ключа, то есть до интерлюда это были первые 4 байта, а после - 4 байта начиная с 8го (при нумерации с нуля естественно)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Старый 16.07.2009, 09:37   #10
Новичок
 
Регистрация: 12.07.2009
Сообщений: 13
Сказал Спасибо: 1
Имеет 2 спасибок в 2 сообщенях
Aieks777 пока неопределено
По умолчанию

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

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

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

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

Последний раз редактировалось Aieks777, 16.07.2009 в 14:53. Причина: Невыдержал :-D
Aieks777 вне форума   Ответить с цитированием
За это сообщение Aieks777 нажился спасибкой от:
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 02:14.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!