Обращение открытых ключей шифрования MuOnline

Автор P4FSupport, 2014 Март 22, 17:46

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] muonlineобращение открытых ключейшифрование

P4FSupport

Автор статьи Жора Корнев

Сегодня мы поговорим опять о MuOnline, на тему обращения открытых ключей шифрования, т.е. о способе получении закрытой пары ключей.

Чтобы ввести в курс дела немного опишу сам механизм шифрования сетевого трафика в MuOnline. Для передачи данных используются 2 вида пакетов, это открытые 0xC1, 0xC2 и зашифрованные 0xC3, 0xC4. Для шифрования же используется алгоритм на базе открытыхзакрытых ключей. Клиент содержит открытый ключ enc1.dat и закрытый dec2.dat, сервер так же содержит вторую пару: открытый enc2.dat и закрытый dec1.dat. Банальная криптосистема с открытым ключом, которая встречается на версиях с 1 сезона и до MuEx, если я не ошибаюсь.

Шифрование ложится только на критические пакеты. Однако сам протокол игры является очень не надёжным, что относится как к пакетам зашифрованного типа так и к открытым C1C2. Причём на большинстве приватных серверов, стоят стандартные ключи, которые может заполучить любой желающий полным комплектом. Очевидно, что на такой плодотворной для читерства почве не могло не вырасти пару крутых читов, что и случилось. Вот только чтобы перехватывать трафик и модифицировать его, читы должны были уметь расшифровывать и шифровать трафик серверными ключами. Но поскольку генераторов ключей на то время не было, было вполне достаточно использовать в читах стандартную связку ключей. Сейчас же стало популярно заменять стандартные ключи шифрования на уникальные, однако так ли надёжно это решение?

Дело в том, что сам алгоритм шифрования в MuOnline является не слишком криптостойким. Он блочный, но точный алгоритм назвать не могу. На входе поступает 64 битный блок данных, он разбивается на 16 битные значения, которые шифруются 32 битными ключами(значение некоторых не превышают 16 бит), на выходе получается чуть больше данных (добавляется чексум). Давайте взглянем на пару ключей шифрования:

encode
0x0001f44f 0x00028386 0x0001125b 0x0001a192 modulus
0x00005bc1 0x00002e87 0x00004d68 0x0000354f enc_key
0x0000bd1d 0x0000b455 0x00003b43 0x00009239 xor_key

decode
0x0001f44f 0x00028386 0x0001125b 0x0001a192 modulus
0x00007b38 0x000007ff 0x0000deb3 0x000027c7 dec_key
0x0000bd1d 0x0000b455 0x00003b43 0x00009239 xor_key

Как видно диапазон modulus и xor_key в обоих ключах одинаковы, так и должно быть. Весь секрет шифрования на самом деле находится в закрытом ключе dec_key, который будет использоваться для расшифровки. Когда данные шифруются и расшифровываются в каждой итерации применяются именно 32 битные ключи(mod, xor, encdec). То есть сначала первым столбиком, потом вторым столбиком и т.д. Наша задача зная modulus, enc_key, xor_key получить dec_key состоящий из четырех 32 битных значений.

Чтобы произвести атаку на ключи, сначала нужно понять на каком свойстве они базируется. В нашем случае не трудно заметить что всё держится на простейшей модульной арифметике.

for ( int i=0;i<4;i++) {//encode
dwEncBuffer[i] = (
(this->m_dwXORKey[i] ^ ((WORD*)lpEncSource)[i] ^ dwEncValue) * this->m_dwEncryptionKey[i]) % this->m_dwModulus[i];
dwEncValue=dwEncBuffer[i]&0xFFFF;
}

for (int i=0;i<4;i++) {//decode
Temp1 = (( this->m_dwDecryptionKey[i] * (dwDecBuffer[i])) % ( this->m_dwModulus[i])) ^ this->m_dwXORKey[i]^Temp;
Temp = dwDecBuffer[i]&0xFFFF;
((WORD*)lpDecDest)[i] = (Temp1);
}

Это основная часть алгоритма шифрования, всё остальное никак не связано с encdec ключами. Немного упростим задачу отбросив излишки и переведём всё в псевдо-представление:

plaintext * enc % mod = ciphertext
ciphertext * dec % mod = plaintext

Как видно в основе всего лежит примитивное свойство модульной арифметики. Обратимся к математической формуле нахождения обратных величин по модулю:

a * x (mod n) = 1
В нашем случае в роли a выступает один из encdec ключей, в роли x неизвестный второй encdec ключ, а n это ключ mod. Так же согласно условию ключи enc, dec являются взаимно простыми с ключом mod. Таким образом зная a и n мы можем подобрать обратное число x простым перебором.

Окей давайте попробуем брут форс. Но как насчёт диапазона перебора? Исходя из свойств модуля, каждый из encdec ключей не может быть >= mod. Таким образом мы сильно сокращаем диапазон поиска. Но есть ещё одна особенность алгоритма шифрования, значение ключей encdec не может быть больше 16 бит, из-за того что операции производятся с 16 битными значениями. Получаем что максимальный диапазон перебор не превышает отметки 0xFFFF :)

Я накидал небольшой код, демонстрирующий технику обращения ключей. Причём перебор выполняется мгновенно, таким образом подкинем ещё одну палку в колёса защищенности MuOnline. Увы, но очевидно что без сторонней защиты стандартные средства протекции игры просто бесполезны.

Прилагаю рабочий код: https://github.com/JKornev/MuEncDec-Brutforcer

Всем спасибо за внимание.


Simp1e

просто подгрузить новые ключи защиты много не прибавится =) но если умно подходить к вопросу то действительно помогает уже около 5 лет на моих серверах стоят новые ключи читаков мало)

DoS.Ninja

Цитата: Simp1e от 2014 Март 22, 20:35  просто подгрузить новые ключи защиты много не прибавится =) но если умно подходить к вопросу то действительно помогает уже около 5 лет на моих серверах стоят новые ключи читаков мало)
В ключах вообще смысла мало, если только полностью отказатся от C1C2, так как читы работают и на открытых пакетах.

Кстати привет xakumm'y который теперь математически и практически доказанный пустозвон

xakum

P4FSupport разобрал по полочкам, молодец чё, может объяснишь еще откуда можно взять enc_key, если задача стоит не подобрать dec_key к существующему enc_key, а создать новую пару enc_key/dec_key например.  :rolleyes:

Цитата: DoS.Ninja от 2014 Апр. 04, 18:00  Кстати привет xakumm'y который теперь математически и практически доказанный пустозвон
только вот я это делал 3 года назад  :trololo:, а 3 недели назад, ткнул тебя носом в то, что обратимое шифрование используется и в исходниках все есть на блюдечке даже...  как результат, через 3 недели появился данный обзор.
Спойлер
Цитата: xakum от 2014 Март 05, 16:01  
Цитата: DoS.Ninja от 2014 Март 05, 13:33  Ломать простые защиты особого ума и не надо, а вот разработать даже простую, учитывая все требования, это задачи не для каких-то хекеров-крекеров. До сих пор считаешь свои encdec лучшим АЧ всех времён?)
сломай хотя бы пентиум тулсы, а потом будешь тут что то доказывать, что тут просто и для чего ума не нужно, балабол.  (poolparty)
encdec античитом небыли никогда, а лишь одной из ступенек увеличивающих защиту от читов типа прокси, там не криптостойкое шифрование используется и оно обратимо, но против такого ламо как ты - сойдет, ведь ты даже понятия не имеешь, скорее всего, модификация какого механизма шифрования используется в му до 6+ сезона, хотя даже исходники сервера в паблике есть и можно посмотреть.  :rolleyes:
[свернуть]
p.s. пентиум тулсы уже разобрал то или опять будешь отмазываться, что те это не нужно? ты же рассказывал, что для этого ума не нужно особого...
Цитата: DoS.Ninja от 2014 Март 05, 13:33  Ломать простые защиты особого ума и не надо
... или балабол!? :loool:

DoS.Ninja

#4
Я тебе 2 года назад говорил что ключи обратимы и ничерта не протектят, хотя это говно не стоило 200$. Если ты так оцениваешь свой интелектуальный труд, то это многое обьясняет.

И хватит тыкать тут свой крек пентиум тулзов, ладно было бы там что сложного отреверсить

Цитата: xakum от 2014 Апр. 25, 00:01  P4FSupport разобрал по полочкам, молодец чё, может объяснишь еще откуда можно взять enc_key, если задача стоит не подобрать dec_key к существующему enc_key, а создать новую пару enc_key/dec_key например.
Ради бога это всё было сделано за 2 вечера окай?

KJloyH

#5
Цитата: DoS.Ninja от 2014 Апр. 25, 01:35  Я тебе 2 года назад говорил что ключи обратимы и ничерта не протектят, хотя это говно не стоило 200$. Если ты так оцениваешь свой интелектуальный труд, то это многое обьясняет.

И хватит тыкать тут свой крек пентиум тулзов, ладно было бы там что сложного отреверсить


Ради бога это всё было сделано за 2 вечера окай?
:mmmm:
Спойлер
https://prntscr.com/3d5dzh
[свернуть]

epmak

#6
Цитата: DoS.Ninja от 2014 Апр. 25, 01:35  Я тебе 2 года назад говорил что ключи обратимы и ничерта не протектят, хотя это говно не стоило 200$. Если ты так оцениваешь свой интелектуальный труд, то это многое обьясняет.

И хватит тыкать тут свой крек пентиум тулзов, ладно было бы там что сложного отреверсить


Ради бога это всё было сделано за 2 вечера окай?

https://www.armored.ws/chronicle-of-patching-muonline/
c_racking форум заменяет на  patching

Цитата: KJloyH от 2014 Апр. 25, 02:59  :mmmm:

P4FSupport

#7

DoS.Ninja

#8
Да это сайт лагает, ссылка не выставляется, но если через сайт по ней пройти то работает)

Уже давно реализованы генераторы, прокси, брутфорсер и т.п. всё в открытом доступе, шифрование му == говно, но доставляет мнение экспертов (chuckle)
Цитата: xakum от 2012 Июль 07, 01:36  навесное шифрование? ну да, лучше деревянные доски поверх бездорожья класть, чем асфальт проложить. ахинея полнейшая. родной механизм шифрование пакетов в МУ, работающий на любой версии сервера и клиента, не требующий никаких патчей, инжектов и накрытий exe/dll говнопакерами "ИМХО не универсально"? лолчто?  :facepalm:
Цитата: xakum от 2012 Июль 30, 10:31  и если хочешь что то доказать - покажи код или пример открытых даных. все остальное пустословие (или рукоблудие как в случае с Killbrum, который делает свое грязное дело на мою аватарку - другая причина его нежного внимания к моей скромной персоне - мне неизвестна :trollface: )

p.s. никто и не говорил, что ключи  панацея, но то что они планку защиты поднимают на новый уровень - это факт.
Цитата: SmallHabit от 2012 Июль 30, 11:16  Полностью согласен с xakum - что это новый уровень защиты. По сути остаёться простая проверка на уровне сервера на спидхак и рисование агилити(такая функция уже есть в .90ГСе по стандарту).
Цитата: Crazzy- от 2012 Авг. 01, 05:38  Непонял, ты как собюрался ключик из сервера вытащить? издеваешся? +1 к комменту хакума чушь... раз ты так говориш всё просто и легко, обойди защиту на уровне пакетов у бора в античите, т.к посути что я говорил и что у него не многим отличается.

Вот еще без тега quote из тойже темы

[b]bespredeL[/b]
ключи, новая защита.

[b]cokpat[/b]
причем тут иерархия, ты принялся доказывать что это костыль. Тебе сказали лишь то, что это сложный в обходе костыль и не более.
По крайней мере люди которые тут отписались, показали что-то делом, а не трепом, это так наблюдение.

[b]Crazzy-[/b]
О боже мой, люди хотябы ищут способы, и находят их, новые способы защиты, а вы назойлевые нехрена неделающие прыщявые бабки просто тупо сидите и рассуждаете о том , в чем никакого толкового понятия не имеете, в чем смысл? репутация прыщавой бабки? или что?  ты никому недокажеш ничего, тебя просто будут называть *оскорбление*ом знающие люди, потому им смысла нету тебе чтото обьяснять если ты полную чушь несеш, естественно если появится чит на базе етого обхода ктото задумается, но ты сначала напиши его, а мы усовершенсвуем ету защиту, в чем беда? разговоры не о чем....

............

Похожие темы (5)