Давно уже бьюсь с тем же сервером!
Все думал выкладывать свои изыскания или нет. У меня пока затуп именно в алгоритме изменения ключа. Исследовал весь АЧ, там у народа полный затуп, все ищут мифический токен для волкера)). Понял что не только к ЭТОМУ серверу относится данный алгоритм шифрования. Админы l2/s/e r ver .ru просто купили этот алгоритм.
В итоге пришел к выводу, что действительно, чтобы ломануть шифрацию от клиента к ГС, надо написать эмулятор ГС, а конкретнее секции выбора чара. В итоге такой скрипт я разработал, но, честно говря, так и не понял алгоритма смены ключа, после чего и забил ваще на всю линейку)
Добавлено через 17 минут
В итоге, вот к чему я пришел:
У нас в защите используются 2 независимых ключа шифрования (один поверх другого). Метод шифрования везде xor.
оба ключа 8-байтные
1-ый ключ (4 байта) берется из криптинит, разбиватеся на 2 части и ксорится на константу 82 93 00 00 1A 41 00 00, получаем начальный ключ №1
2-ой ключ берется из пакета 0D RequestAuthLogin поле LoginKey2, к нему дописыватеся еще такой-же и ксорится на константу 61 F6 5B 62 1A 08 B9 CD, получаем начальный ключ №2 (хотя после последнего поста от kolosOK, я уже не очень в этом уверен)
Алгоритм изменения ключей я так и не понял, как эти ключи живут вместе тоже не понял(
Добавлено через 3 минуты
Цитата:
Сообщение от kolosOK
пока всё, щас с мыслями соберусь и может ещё накатаю
Так что, kolosOK, жду от тебя продолжения с нетерпением!!!
Последний раз редактировалось nezabudkin, 23.09.2008 в 12:56.
Причина: Добавлено сообщение
. Исследовал весь АЧ, там у народа полный затуп, все ищут мифический токен для волкера)). Понял что не только к ЭТОМУ серверу относится данный алгоритм шифрования. Админы l2/s/e r ver .ru просто купили этот алгоритм.
АЧ зборище ГМов с разных серверов, сидят с 300ми постами и отлавливают баги под хайдами чтобы пофиксить,
реально там тебе никто непоможет,
там собралось общество полубогов и на нас там смотрят с презрением.
Попробуй набери там двести постов!! если ты не ГМ и незнаешь игру изнутри
... не знаю кк насчёт гмов, но вот в плане помощи ач стал действительно не какой, всё делается за деньги, собственно сам форум себя уже исчерпал, потому как за деньги можно сделать всё что угодно из без форума ач
по мыслям ... щас времени нету всё описавать, скажу только что там кроме того что я написал больше ничего нет, есть только огромный список констант ... тоесть если вы зделаете всё ка описал выше то найдёте их, только рассматривать надо не 100 пакетов и не 200, а где то 8000
скажу только что там кроме того что я написал больше ничего нет, есть только огромный список констант ... тоесть если вы зделаете всё ка описал выше то найдёте их, только рассматривать надо не 100 пакетов и не 200, а где то 8000
Вот, блин, порадовал. Только я не очень понял, эти константы относятся к алгоритму изменения ключа (ключей) или к шифрованию пакетов посредством ключей+ набор констант?
//кстати может есть у кого эмулятор сервера, чтоб тупо посылал паКеты что я ему укажу ?
Я тут у себя поковырялся в загашниках,кое что нарыл, может пригодится вам?! http://rapidshare.com/files/14775852...r-sLA.rar.html
на вопросы по ним ответить не смогу т.к толком ничего не знаю...
если по делу то хотелось бы помощи по моему вопросу но в ПМ .
всем удачи.
И так, выкладываю алгоритмы шифрования ГС от L/2/s/e/r/v/e/r:
Здесь и далее все выкладки сделаны на основе скрипта под WPF, от автора kolosOK, за что спасибо ему большое!
От сервера:
Здесь все просто!
ключ берется из криптинит (4 байта), разбиватеся на 2 части и ксорится на константу
82 93 00 00 1A 41 00 00
x1 x2 00 00 x3 x4
где x- байты ключа из криптинит, итого размер ключа у нас 8 байт.
Далее используется стнадартный механизм шифрации/дешифрации линейки, типа:
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];
Алгоритм изменения ключа:
первые 4 байта ключа увеличиваются на длинну пакета (тоже стандартный алгоритм)
вторые 4 байта ключа получаем путем ксоринга их на первые 4 байта:
Inc(PLongWord(@GKeyR[0])^,size);
PLongWord(@GkeyR[4])^:= (PLongWord(@GKeyR[0])^) xor (PLongWord(@GKeyR[4])^);
Теперь от клиента:
Ключ1 берем аналогично,
ключ берется из криптинит (4 байта), разбиватеся на 2 части и ксорится на константу
82 93 00 00 1A 41 00 00
x1 x2 00 00 x3 x4
где x- байты ключа из криптинит, итого размер ключа у нас 8 байт.
Этим ключем дешифруем пакет 08 - RequestAuthLogin
Алгоритм шифрации/дешифрации здесь тоже стандартный.
В нем нас интересует поле LoginKey2. Запоминаем его (4 байта), и дописываем еще такой-же. Получаем ключ2.
Так-же существует массив байт (случайных чисел) в размере 65536. (Я его взял из скрипта под wpf любезно предоставленного автором kolosOK).
Алгоритм изменения ключа (вот тут разработчики намудрили!):
Ключ шифования меняется если длинна пакета больше 1 байта.
ключ1 (или потом просто ключ) ксорим на ключ2 и ксорим на 8байт из массива, взятых с определенным смещением, равным количеству дешифрованных пакетов.
Вот алгоритм:
KeyCounter1:= KeyCounter1 + 4;
if KeyCounter1= 32769 then KeyCounter1:= 1;
PLongWord(@GKeyR[0])^:= PLongWord(@GKeyR[0])^ xor PLongWord(@KeyClient[0])^;
PLongWord(@GKeyR[4])^:= PLongWord(@GKeyR[4])^ xor PLongWord(@KeyClient[4])^;
PLongWord(@GKeyR[0])^:= PLongWord(@GKeyR[0])^ xor PLongWord(@KeyConst[KeyCounter1])^;
PLongWord(@GKeyR[4])^:= PLongWord(@GKeyR[4])^ xor PLongWord(@KeyConst[65536-KeyCounter1-2])^;
Исходники моего newxor выложу на днях...
Последний раз редактировалось nezabudkin, 16.10.2008 в 14:14.
За это сообщение nezabudkin нажился 5 спасибками от:
Собственно выкладываю dll-ку, которая дешифрует вышеуказанный сервак)
В архиве кроме самой дллки и файлов исходников, есть еще 2 файла (их надо поместить в папку с пакетхаком):
keyconst - файл с константами для шифрования
name.txt - файл в котором надо указать первые 3 буквы логин нейма, можно даже указать правильно первую и третью буквы, а вторую неважно, лишь бы была)
Собственно глубокое изучение newxor.dll и фрагментов кода пакетхака, отвечающих за передачу пакетов в newxor, показало мне, что некоректно передается в библиотеку начальный ключ шифрования, по этому библиотеку очень сложно переписывать под нестандартные системы шифрования.
За это сообщение nezabudkin нажился 3 спасибками от: