PDA

Просмотр полной версии : Дешифруем трафик _L/2/s/e/r/v/...


nezabudkin
14.01.2009, 20:40
Надеюсь, по заголовку темы всем понятно о каком сервере идет речь.

И так начнем...
Немного истории:
Где-то в начале 2008 года все игровые сервера этого проекта были обновлены до 6-х хроник, одновременно с этим было введено нестандартное шифрование на игровых серверах. Алгоритм был не очень сложным, и его довольно быстро ломанули. После чего администрация сервера пошла на отчаянный шаг, и похоже, что купила алгоритм защиты у одного из дружественных ей фришардов. Тому есть несколько свидетельств. Вот эта крипто-защита была действительно маниакальной! Достаточно сказать что длинна ключа была 64КБайт!!! Алгоритм той защиты представлен тут:
http://coderx.ru/showpost.php?p=16313&postcount=233
В середине декабря 2008 на серверах опять вводят новую защиту, обсуждение алгоритма которой я и хочу организовать в этом топике.

Добавлено через 4 минуты
Все начальные выкладки по этой теме выложу чуть позже...

Добавлено через 1 час 48 минут
Что касается трафика S->C, некаких изменений в алгоритме я не нашел, ключ задается и изменяется абсолютно так же, как и раньше.

Про подключение к серверу.
Если пользоваться последними версиями пакетхаков 3.4.1.х, то при входе на гейм сервер, через пару секунд клиент вылетает с критом (внутренней ошибкой). Причем комбинация галочек в настройках пакетхака совершенно не важна. Может у кого-нибудь иначе работает? По этому использую проксификатор и последнюю версию пакетхака. Стоит заметить, что версия 3.2.0 при скрытном способе инжекта подключается без проблем, и некаких ошибок не вылезает!!!

Параметры пакетхака:
Установлена галочка: не дешифровывать трафик
снята галочка: обход смены ксор ключа
т.е. дешифрация отключена полностью!

Так выглядит пакет KeyInit S->C
00 01 02 D8 A3 1E 01 00 00 00 01 00 00 00 - эта часть пакета совершенно стандартная, в ней четко виден начальный ключ, пока не понятно используется ли он вообще, а вот потом в этом пакете следует длинный хвост из 256 байт:
71 10 98 40 F8 26 9F 7E 44 1A C2 33 A2 15 4F D5 0F FB 21 1B B1 76 FE 32 CE BB EC 93 17 F7 96 1C F0 A3 83 04 0B B0 6E E7 AF 48 74 84 80 E6 24 6A 55 DA E8 FD 49 12 B3 13 5E 46 8E 6C 35 03 7C 95 C3 43 70 73 C1 0E 52 4D 72 6B 22 08 F1 C5 89 5B A1 8F 68 9A AC 59 A9 0D FA B8 E1 4E 53 39 5F F9 BA 87 D8 D9 E4 DC C9 28 F3 82 01 4C 99 D7 C4 85 DE CD 8B 6F 27 38 18 0A 91 7D F5 51 4A AB 3C A4 6D 3F 20 4B D2 88 0C DB AA 30 31 F6 60 9E 9C 57 7F F2 E2 8A E5 DF E9 FF 2E 50 23 09 86 25 07 BF 16 A6 BC B6 56 D6 EE 94 69 5C AE EF 11 CB 00 9D 42 EB A5 B5 C6 3A 9B 06 BD FC E3 A8 05 3B 7B 54 B9 65 E0 7A CA 81 34 47 2D 3D C0 D4 63 CC 2F 67 45 75 B4 3E 14 B2 97 C7 1D 90 5A 36 62 5D ED F4 02 2C 58 1E 78 64 2B AD A0 37 8D 92 BE 29 CF 1F 79 41 D3 2A 8C 61 66 EA 19 A7 D1 B7 D0 77 C8 DD
к чему он, пока тоже не выяснено.

Исследуем трафик С->S
Перейдем к примерам пакетов.

Так выглядит пакет sit/stand
3B 3B 3B 3B 3B 3B 3B 3B 3B 3B - в оригинале - 45 00 00 00 00 00 00 00 00 00
Так выглядит пакет sit/stand с нажатым Ctrl:
3B 3B 3B 3B 3B 67 3B 3B 3B 3B - в оригинале - 45 00 00 00 00 01 00 00 00 00
Так выглядит пакет sit/stand с нажатым Shift:
3B 3B 3B 3B 3B 3B 3B 3B 3B 67 - в оригинале - 45 00 00 00 00 00 00 00 00 01

Теперь пакет say2.
Отправляем в общий чат - "1"
6B B7 6B 6B 6B 6B 6B 6B 6B - в оригинале - 38 31 00 00 00 00 00 00 00
Отправляем в общий чат - "11"
6B B7 6B B7 6B 6B 6B 6B 6B 6B 6B - в оригинале 38 31 00 31 00 00 00 00 00 00 00
Отправляем в общий чат - "111"
6B B7 6B B7 6B B7 6B 6B 6B 6B 6B 6B 6B - в оригинале 38 31 00 31 00 31 00 и т.д.

На основании этих данных можно сделать вывод, что:
1. от пакета к пакету ключ не меняется
2. ключ не зависит от длинны пакета
3. на поверхности просматривается алгоритм:
for k:=1 to size-1 do
pck[k]:=pck[k] xor pck[k-1];
который снимает лишний "муар" с кода :)

Так как от пакета к пакету ключ не меняется, нету смысла выкладывать длинные дампы пакетов.
Складывается впечатление что длинна ключа 1 байт. Возможно, ключ зависит от id-номера пакета.
При релогине, начальный ключ меняется.

Что надо выяснить:
1. Алгоритм формирования начального ключа
2. Алгоритм шифрования

Жду Ваших мыслей!

Добавлено через 3 часа 9 минут
Поправка:
алгоритм
for k:=1 to size-1 do
pck[k]:=pck[k] xor pck[k-1]
помогает дешифровке S->C,
но мешает C->S.

kostya_onishenko
15.01.2009, 02:14
Пользуюсь WPF658 от Саурона. Прекрасно перехватывает траф и никаких критов.

nezabudkin
15.01.2009, 02:32
kostya_onishenko, тебе удалось дешифровать исходящий трафик?

kostya_onishenko
15.01.2009, 11:32
nezabudkin, к сожалению пока нет. Я писал, что ключ от клиента в процессе всей сессии не меняется, я копирую пакет сдачи манора и потом его отправляю несколько раз - таким образом сдаю манор. А вот от серевера к клиенту вообще непонятно что тварится, админы точно непонятно что курили, когда делали шифрацию. А если быть точным, то они шифрацию взяли с меганета, там тоже поменяли защиту и она такаяже.

nezabudkin
15.01.2009, 12:09
Значит предыдущая и нынешняя защиты разработаны одним и тем же человеком. А судя по тому что было накручено в предыдущей версии, ломать будем месяцев 5 не меньше.

Добавлено через 5 минут
А вот от серевера к клиенту вообще непонятно что тварится

Алгоритм шифрования такой же, как и в предыдущей версии защиты. А вот алгоритм изменения ключа (счетчики) другой.

QaK
15.01.2009, 12:16
отсюда вывод: нужен лог, большой лог, длинный лог одинаковых пакетов, где есть последовательность из 8ми нулевых байт, т.е. 00 00 00 00 00 00 00 00.

kostya_onishenko
15.01.2009, 12:18
отсюда вывод: нужен лог, большой лог, длинный лог одинаковых пакетов, где есть последовательность из 8ми нулевых байт, т.е. 00 00 00 00 00 00 00 00.

скажи какие пакеты выложить, я сделаю

Aniks
15.01.2009, 13:29
Можно ещё попробывать тот же пакет выложить типа sit/stand тока с разных сесий, так как как я понял там меняется начальный ключ при рестарте.

kolosOK
15.01.2009, 17:15
скачал клиент интерлюдии, буду тоже смотреть. А есть у кого то старый патч на л2серв ?

nezabudkin
15.01.2009, 18:17
у меня нету

kostya_onishenko
15.01.2009, 22:59
скачал клиент интерлюдии, буду тоже смотреть. А есть у кого то старый патч на л2серв ?

вот выложил, хз с какого разу:)
http://depositfiles.com/files/6scgzf7rv

Lumex
16.01.2009, 01:22
А вот у меня не получится здесь бывать почаще :( Мне важен сам процесс (алгоритм поиска алгоритма, так сказать :) ) По возможности пошагово распишите, я чуть попозже буду грызть гранит.

nezabudkin
23.01.2009, 18:40
Есть приятная новость, алгоритм шифрования S->C не изменился :)
Так что ломать надо только С->S, а вот тут пока затуп...

kostya_onishenko
27.01.2009, 13:30
Есть приятная новость, алгоритм шифрования S->C не изменился :)
Так что ломать надо только С->S, а вот тут пока затуп...

да, от сервера трафик полностью дешифруется по скрипту Колоска, по старому алгоритму, а исходящий - ниче не могу сделать:(

nezabudkin
27.02.2009, 16:11
Такое ощущение, что на днях на сервере появились боты. Как минимум на трейде народ сидит уже под волкером :(

nezabudkin
18.03.2009, 01:38
ААА, kolosOk уже выложил на АЧ свои скрипты.
Блин а ведь бабла можно было срубить, я уже даже движок лицензирования к своей версии dll прикрутил, и все зря ((

kolosOK
18.03.2009, 01:40
:) сори, не хотел портить бизнес ...

NLObP
18.03.2009, 17:14
ААА, kolosOk уже выложил на АЧ свои скрипты.
Блин а ведь бабла можно было срубить, я уже даже движок лицензирования к своей версии dll прикрутил, и все зря ((

может здесь тоже выложите?

nezabudkin
20.03.2009, 19:08
В связи с тем, что сервер выдает настандартный пакет InitKey, приходится передавать его в newxor.dll с помощью скрипта. Сама newxor отловить его не может.

Собственно выкладываю здесь саму библиотеку для дешифрования трафика между клиентом и сервером (для wolker'а не подходит!), которую надо скопировать в папку с пакетхаком и скриптик, который надо скопировать в папку со скриптами.
Настройки для пакетхака привожу на прикрепленной картинке.

Скрипт нужно запустить до запуска клиента.

Кому нужны исходники dll, пришите в приват.

chank
21.03.2009, 01:38
что-то искажает данные, например нельзя открыть диалог у нпса, да и выделяется он только зажав ctrl

nezabudkin
24.03.2009, 14:40
что-то искажает данные
ошибочка закралась.... уже нашел, исправил, сейчас тестирую...


...в связи с тем, что шифрование сменилось, выкладываю исходничек newxor.dll, так сказать для истории :) (это работало до 30.03.09)

kostya_onishenko
30.03.2009, 13:00
порадовались, но не долго:( , опять сменили защиту
шифрация пакетов от сервера опять осталась таже, поменяли опять токо от клиента

nezabudkin
31.03.2009, 16:32
Увы.

Шифрация сменилась. Опять немного изменился пакет KeyInit от сервера. Там еще хвостик коротенькй добавился. И теперь ключик, при шифровании от клиента, меняется динамически от пакета к пакету.

xneo
01.04.2009, 17:37
Последний байт каждого одинакового пакета шифруется одинаково. Выходит ключ один и тот же для каждого пакета. Просто вносится ещё какой-то параметр, например номер пакета.Но если так то почему последний байт шифруется без применения этого параметра?

У меня тут вопрос возник. А кто шифрует трафик от клиента к серверу ? Я же не думаю что l2.exe перекомпиливали :) ГГ тоже нету. Трафик отлавливает какойто хук на ходу?

PanAm
02.04.2009, 15:36
На мелке была примерно такая защита (как я понимал) - внедренна своя библиотека для шифрации исходящего трафика, в первом пакете менялась версия протокола на "версию" защиты, если версии не совподали (на сервере что либо меняли в защите) клиент сам обновлял на ходу ДЛЛ.

xneo
02.04.2009, 16:50
Раз метод шифрования достаточно простой может легче декомпильнуть DLL которая шифрует траффик ?

Imperator
02.04.2009, 19:01
И теперь ключик, при шифровании от клиента, меняется динамически от пакета к пакету.
дада
и вот даже если пойманный покет который исходил от тебя же передать опять серверу, то игра виснет.
одно и то же действие каждый раз исходит от именно клиента к серверу разными пакетами
2B FD C0 4C 54 BA F2 52 7E C4 7E BA 7E B7 B7 7E B7 B7 B7
BF FC C6 4C 49 A8 99 32 7E C4 7E BA 7E B7 B7 7E B7 B7 B7
EA 5D CD 8F A0 97 E5 58 7E C4 7E BA 7E B7 B7 7E B7 B7 B7
меняется только первая часть

kolosOK
02.04.2009, 19:22
Раз метод шифрования достаточно простой может легче декомпильнуть DLL которая шифрует траффик ?

вот если соображаеш в этом, то попробуй, если получится то хотелось бы полный мануал по таким действиям :)

Imperator
02.04.2009, 20:13
Я же не думаю что l2.exe перекомпиливали
почему бы и нет. ведь теперь l2.exe стал весить на 36кб больше.

xneo
03.04.2009, 17:10
Может ктонибуть привести пару простеньких пакетов в дешифрованном виде? Желательно с разной длинной.

kolosOK
03.04.2009, 18:36
Может ктонибуть привести пару простеньких пакетов в дешифрованном виде? Желательно с разной длинной.

CharSelected
000000 15 00 0D 03 00 00 00 00 | 00 00 00 00 00 00 00 00 ................
000010 00 00 00 00 00 .....

RequestManorList
000000 05 00 D0 08 00 ..Ð..

EnterWorld
000000 6B 00 03 00 00 00 00 00 | 00 00 00 00 00 00 00 00 k...............
000010 00 00 00 C9 BC F2 A7 66 | 5A 0B 98 36 A5 BD 89 ED ...ɼò§fZ.˜6¥½‰í
000020 7F E4 D7 6B 49 E2 9F EF | 76 EB CE A3 FA F4 BF 0C ä×kIâŸïvëΣúô¿.
000030 64 A3 B4 A4 CE DC C6 08 | 3E 6E EA 45 CA D3 FE 88 d£´¤ÎÜÆ.>nêEÊÓþˆ
000040 13 87 B8 06 2C 96 F0 9B | 1E 8E BC C6 9B 98 C8 63 .‡¸.,–ð›.Ž¼Æ›˜Èc
000050 16 CF D0 29 00 00 00 00 | 00 00 00 00 00 00 00 00 .ÏÐ)............
000060 00 00 00 00 00 00 00 00 | 00 00 00 ...........

идут они по порядку от клиента 3, 4, 5 пакет от клиента ... 2 первых байта в пакете это размер

ExcesivoEnergia
04.05.2009, 15:42
kolosOK, можеш помочь , обьяснить как всё устроено, оч хочеться поботить =) Обьясните мне что и как я буду делать пока не сделаю что нужно =)

Lumex
04.05.2009, 22:39
Как все устроено надоест объяснять. Вкратце. Про логин- и гейм-серверы - это задание на дом.
Есть два типа пакетов: те которые клиент(бот) получает от сервера и те которые отправляет. И те и другие посылаются в зашифрованном виде. На данный момент шифрация пакетов от сервера клиенту не изменилась и бот со старым скриптом спокойно их расшифровывает. Проблема в другом - изменилась шифрация пакетов от клиента серверу, т.е. клиент шифрует (по старому алгоритму) пакет и отправляет серверу, а тот расшифровывает по новыму алгоритму. В результате сервер видит неправильный пакет и моментально посылает клиент на... в общем очень далеко - дисконнект. И все, не срослось у них, бывает.
Но не все пакеты шифруются, несколько первых пакетов от клиента идут без шифрации (2 штука по-моему) в ответ на которые от сервера приходит пакет InitKey (как-то так примерно, название аналогичное может быть) Так вот клиент берет из этого пакета часть - ключ. И последующие пакеты посылает используя для шифрации этот ключ. Но чтобы жизнь совсем медом не казалась, ключ изменяется после отправки каждого пакета от клиента. Изменяется по определенной последовательности - алгоритму.
Отсюда задача:
1) Определить, что именно берется из ИнитКей для ключа.
2) По какому алгоритму изменяется ключ.
Решение1: берем сниффер (спецпрогу, которая ловит пакеты линеечные). Проги: пакетхак (здесь на сайте есть), хлапекс или валкерпатчер - без разницы какую, лишь бы не сами не пытались шифровать, они это могут. Ловим пакеты, думаем, составляем последовательности. Вычисляем ключ и алгоритм. Пишем новый скрипт для ВП. Вуаля! Все работает. Или не работает. Снова думаем или
Решение2: откладываем определенную сумму, ищем человека, который может это сделать и...дальше дело техники.
Вроде все. Поправляйте, легко могу ошибаться.

kostya_onishenko
12.01.2010, 16:10
мда... уже около года не меняли защиту, а ее так никто и не поломал? или забили?

QaK
12.01.2010, 20:37
Некропостер detected =) конечно, забили - есть же прекрасная армянская фришка =)

kostya_onishenko
12.01.2010, 21:25
Некропостер detected =) конечно, забили - есть же прекрасная армянская фришка =)

если не секрет, какая фишка? если это ИГ - то не интересно

QaK
12.01.2010, 21:56
kostya_onishenko, не фишка фРишка, угофф в общем ...

kostya_onishenko
12.01.2010, 22:17
kostya_onishenko, не фишка фРишка, угофф в общем ...

жаль что вопрос токо о деньгах стоит, думал интерес есть поломать:(

kostya_onishenko
25.01.2010, 21:10
QaK, в личку написать не могу, напишу тут. Если не сложно ответь. Сейчас на l2server поменяли защиту, пробовал инжектить длл ИГ бота разными способами - в любом случае почти сразу дисконект. Есть ли возможность переименовать процеес внедренной длл, повторю процесс, сама длл давно переименована? Либо второй вариант, если стоит контроль на любой инжект, можно ли это как либо найти и убить?
Заранее благодарен за ответ.
С ув. Константин

kostya_onishenko
27.01.2010, 20:52
здесь есть ктонить живой, способный посоветовать и помоч?

ra1n0
29.01.2010, 12:41
если еще акутально то стукай в асю.

kostya_onishenko
30.01.2010, 20:10
если есть вариант с денежной компенсацией - напишите сколько? думаю смогу собрать необходимую сумму среди желающих использовать бота на этом серве, хотя жаль что вопрос только в этом, но каждый живет как может...

ra1n0
03.02.2010, 11:24
фикс ИГ бота для работы с л2сервер( и не только) заключается в 4 байтах(по моему методу).

JIED
30.12.2010, 21:17
Народ а можно написать как что и зачем делать(для совсем тупых, таких как я) с помошью каких прог и если можно со скринами а то я сижу 5 день читаю шифрации и нифига не понимаю как выводить ключ и тд.

Nickers
31.12.2010, 16:24
Некро-пост))
Можно...

Сюда!!! (http://coderx.ru/showthread.php?t=6629)