Перейти к публикации

Поделитесь первыми 16 байтами Keyvault и снятым трафиком с бокса


alxxbx
 Поделиться

Рекомендованные сообщения

Кто-то мне скидывал трафик с фрибутной консоли - пакет неполноценный, часть информации в нем отсутствует, а часть которая на обычной консоли неизменна - постоянно меняется... Вот поэтому фрибутные консоли сразу банят.
Ссылка на комментарий
Поделиться на других сайтах

Кто-то мне скидывал трафик с фрибутной консоли - пакет неполноценный, часть информации в нем отсутствует, а часть которая на обычной консоли неизменна - постоянно меняется... Вот поэтому фрибутные консоли сразу банят.

Тупой вопрос. Программа что постом выше, выдирает ключи (ЦПУ) из трафика бокса?

Ссылка на комментарий
Поделиться на других сайтах

Сейчас установлю программы, и захвачу трафф. ( если еще нужно )

 

p.s. моя консолька сегодня получила бан, и поэтому вопрос об обходе бана стоит на первом месте :biggrin:

И как ноньчи банят? установка на винт? поврежденный профиль и сэйвы? Очень интерестно, потому как с прошлой осени сидел в засаде, а в августе планировал подкючиться и прикупить аркадок.

Ссылка на комментарий
Поделиться на других сайтах

поговорил пакетами с сервером xetgs.xboxlive.com, выяснилось:

 

в первую очередь он проверяет наличие PADATA205, если отсутствует, независимо от ID консоли высылает 16-ти байтный код в ответном пакете.

во вторую очередь проверяет ID консоли

в третью TIMESTAMP.

 

у каждой консоли свой ключ шифрования

Ссылка на комментарий
Поделиться на других сайтах

Всетаки выходит, что ключ шифрования в нанде.

 

Метка TIMESTAMP зашифрована 2-мя ключами - постоянным (в нанде) и сессионным, который выдается сервером при аутентификации. Метод и последовательность получения RC4 ключа пока мне непонятна.

Ссылка на комментарий
Поделиться на других сайтах

а я попробовал тупо получить на боксе содержимое памяти. А он взял и повис :) и вис на все попытки прочитать невыделенную память.

Накопал библиотечку для создания трейнеров - XPowerPlay, так что в теории что то такое возможно, но вот как она работает - найти не удалось. Информации по программированию для бокса вообще очень мало. :(

Ссылка на комментарий
Поделиться на других сайтах

Т.е. вы получили кейвалью от цпу кей,и именно им хотели расшифровать,но не получилось,из-за того что на каждой консоли грубо говоря формируются свои куки для входа,а на сервере проверяются ответные пакеты от кук,которые показываю забанена ли консоль,а "куки" формируются при помощи встроенного ключа +сессионного,который выдается по *** методу...

 

у меня просто возник вопрос - почему вы начали копать именно с KV ,откуда такие зацепки,если вы знали что майки все пихают слишком далеко?Все-таки мне кажется ключ ,каждый,создается на сервере аутификации ,потом при входе на сервера игры он сбрасывается,ибо не думаю что майки его буду давать стороним лицам,т.е. ключ не привязан к серверу а лишь им генерируется .

 

"у каждой консоли свой ключ шифрования "-т.е. если узнать алгоритм то можно впринцапи создавать лай :DDD а дальше нужны будут сервера..коорые будут лагать ..и т.д.

 

Ссори за бред наверное.

 

Ps.не хочется показаться умным- хочется разобраться во всем что написано на этих 8-ми страницах.

Изменено пользователем marcus07
Ссылка на комментарий
Поделиться на других сайтах

а я попробовал тупо получить на боксе содержимое памяти. А он взял и повис :) и вис на все попытки прочитать невыделенную память.

Накопал библиотечку для создания трейнеров - XPowerPlay, так что в теории что то такое возможно, но вот как она работает - найти не удалось. Информации по программированию для бокса вообще очень мало. :(

 

Сообразил как надо копать... Вообщем сервер шлет 16 байт - сессионный ключ зашифрованный ключем на консоли. Расшифрованным сессионным ключем зашифрована временная метка TIMESTAMP.

Надо расшифровывать сессионный ключ перебирая по 16 байт из KeyVault со смешением 1 байт, а потом расшифрованным сессионным ключем расшифровывать TIMESTAMP.

 

TIMESTAMP необходимо брать со второго пакета аутентификации, т.к. в первом он 100% - просто забит случайными числами и расшифровывать его - пустая трата времени :)

 

Т.е. вы получили кейвалью от цпу кей,и именно им хотели расшифровать,но не получилось,из-за того что на каждой консоли грубо говоря формируются свои куки для входа,а на сервере проверяются ответные пакеты от кук,которые показываю забанена ли консоль,а "куки" формируются при помощи встроенного ключа +сессионного,который выдается по *** методу...

 

у меня просто возник вопрос - почему вы начали копать именно с KV ,откуда такие зацепки,если вы знали что майки все пихают слишком далеко?Все-таки мне кажется ключ ,каждый,создается на сервере аутификации ,потом при входе на сервера игры он сбрасывается,ибо не думаю что майки его буду давать стороним лицам,т.е. ключ не привязан к серверу а лишь им генерируется .

 

"у каждой консоли свой ключ шифрования "-т.е. если узнать алгоритм то можно впринцапи создавать лай :DDD а дальше нужны будут сервера..коорые будут лагать ..и т.д.

 

Ссори за бред наверное.

 

Ps.не хочется показаться умным- хочется разобраться во всем что написано на этих 8-ми страницах.

 

 

бред конечно.

 

Заменой одного keyvault разбанивают консоли, к ключу процессора привязки нет, значит хеш пароля именно в кейваульт :)

 

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

 

предполагаю, что альтернативный сервер аутентификации откроет путь к сетевым играм :)

Изменено пользователем alxxbx
Ссылка на комментарий
Поделиться на других сайтах

на аутентификацию влияют только - ID консоли, зашифрованная временная метка TIMESTAMP и 16 байтный ключ выданный сервером.

 

проверено общением пакетами с сервером.

Ссылка на комментарий
Поделиться на других сайтах

на аутентификацию влияют только - ID консоли, зашифрованная временная метка TIMESTAMP и 16 байтный ключ выданный сервером.

 

а твой эмулятор сервера в качестве ключа отдавал 16 нулей?

Ссылка на комментарий
Поделиться на других сайтах

а твой эмулятор сервера в качестве ключа отдавал 16 нулей?

 

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

 

скорее всего как при расшифровке кейваульт необходимо использовать sha1, пример есть 2-3 страницами ранее

Ссылка на комментарий
Поделиться на других сайтах

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

 

вообщем для аутентификации в лайв необходимо ID консоли и пароль.

 

есть предположение, что хеш пароля:

1. лежит в кейваульт (попытки его извлечь пока в провале)

2. результат "колдовства" над ID консоли и будет хешем для шифрования

 

сервер спокойно расшифровывает метки из траффика 2-х летней давности!

Ссылка на комментарий
Поделиться на других сайтах

Отработанная программа на C# .NET для расшифровки Timestamp и прочего для будующей альтернативы Live.

 

Похоже что консоли при входе в Лайв аутентифицируются Windows контроллером домена и поэтому, для тестов использовал контроллер домена на Windows 2008 и клиента на Windows XP.

 

Расшифровка временной метки происходит несколько иначе чем описано в RFC 4757 (The RC4-HMAC Kerberos Encryption Types Used by Microsoft Windows):

1. экспортный вариант протокола отсутствует (выставлял регион, время - Россия и США при анализе траффика).

2. помеха (confounder) расшифровывается вместе с временной меткой, а не отдельно.

 

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

Расшифровывается метка элементарно - из пароля пользователя в юникоде формируется хеш MD4 и этим хешем с помощью RC4-HMAC расшифровывается метка.

Вариант шифрования может быть любой, я настроил сервер на такой, как у консолей - RC4-HMAC (23).

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Security.Cryptography;

using System.IO;

using LLCryptoLib.Security.Cryptography;

 

namespace DecServ2008TS

{

class Program

{

static void Main(string[] args)

{

Console.BufferHeight = 256;

 

byte[] encTS = { 0x99, 0x28, 0x33, 0xC2, 0xE1, 0xFA, 0x1C, 0x28, 0x3C, 0x4B, 0x50, 0x85, 0xD4, 0x3C, 0x00, 0x56,

0x57, 0x4D, 0xBC, 0xB3, 0xB5, 0x97, 0x39, 0x1A, 0xAA, 0xBC, 0xA2, 0xFD, 0xE8, 0x42, 0xDE, 0x3B,

0x67, 0xAB, 0x0F, 0xCE, 0x7A, 0x82, 0x27, 0xEF, 0xE9, 0x24, 0x15, 0x4B, 0x12, 0x17, 0x94, 0x40,

0xF4, 0x7C, 0x3C, 0xDF };

 

//byte[] K = { 0xF6, 0x50, 0x2C, 0xBE, 0x48, 0x02, 0xF9, 0x4A, 0xB4, 0x72, 0x28, 0x89, 0x70, 0xC1, 0x24, 0xCD };

byte[] pwd = UnicodeEncoding.Unicode.GetBytes("P@ss123");

byte[] K = new MD4CryptoServiceProvider().ComputeHash(pwd, 0, pwd.Length);

 

DecodeTimestamp(K, encTS);

Console.ReadLine();

}

 

private static void DecodeTimestamp(byte[] K, byte[] encTS)

{

byte[] checksum = new byte[16];

Array.Copy(encTS, 0, checksum, 0, checksum.Length);

 

byte[] data = new byte[encTS.Length - checksum.Length];

Array.Copy(encTS, checksum.Length, data, 0, data.Length);

 

byte[] T = new byte[4];

T[0] = (byte)1;//AS-REQ PA-ENC-TIMESTAMP padata timestamp, encrypted with the client key (T=1)

 

HMACMD5 hmac_md5 = new HMACMD5(K);

byte[] K1 = hmac_md5.ComputeHash(T, 0, T.Length);

 

hmac_md5 = new HMACMD5(K1);

byte[] K3 = hmac_md5.ComputeHash(checksum, 0, checksum.Length);

 

IARC4(K3, data);

 

if (checksum.SequenceEqual(hmac_md5.ComputeHash(data, 0, data.Length)))

{

string strTimestamp = "";

for (int i = 0; i < data.Length; i++) strTimestamp += (char)data;

Console.WriteLine("Decrypted Timestamp: {0}", strTimestamp);

dump("K", K);

}

}

 

private static void IARC4(byte[] K3, byte[] Stream)

{

byte[] S = new byte[256];

for (int i = 0; i < 256; i++) S = (byte)i;

int j = 0;

for (int i = 0; i < 256; i++)

{

j = (byte)(j + S + K3[i % K3.Length]);

byte t = S;

S = S[j];

S[j] = t;

}

int Q1, Q2;

Q1 = Q2 = 0;

for (int i = 0; i != Stream.Length; i++)

{

Q1 = (Q1 + 1) % 256;

Q2 = (Q2 + S[Q1]) % 256;

byte t = S[Q1];

S[Q1] = S[Q2];

S[Q2] = t;

Stream = (byte)(Stream ^ S[(S[Q1] + S[Q2]) % 256]);

}

}

 

private static void dump(string str, byte[] digest)

{

Console.Write("\n{0} = ", str);

for (int i = 0; i < digest.Length; i++) Console.Write("{0} ", digest.ToString("X2"));

Console.Write("\n");

}

}

}

Ссылка на комментарий
Поделиться на других сайтах

Хеш пароля консоли можно достать двумя способами:

1. с паяльником :), что похоже более реально в ближайшее время, чем второй способ. Необходимо найти хеш в кейваульте или конфиге или секдате... вообщем надо искать, как уже известно на 100%.

2. программно, сейчас этот способ прорабатываю, т.к. при нем не требуется разбирать консоль, доставать ключ процессора и т.д. Нашел как консоль регистрируется на серверах при первой регистрации в лайв и как ее заставить это сделать снова. Осталось разобраться как связаны 800 байт пакета с ID консоли, датой выпуска, что содержится в этих 800 байт и где в них хеш пароля консоли. Самое интересное, что изменение хоть 1-го байта в ID консоли и в 800 байт приводит к тому, что сервер игнорирует пакет и не отвечает на него, наверно контроллируюется целостность по CRC или хешу.

 

Есть несколько вариантов создания альтернативного сервера:

1. Написать его для не серверной платформы с открытым кодом.

2. Написать прокси, который будет на лету подправлять по-мелочи пакеты, чтобы консоль авторизировалась к обычному Windows Server с контроллером домена.

3. Доработать Kerberos линуксового сервера.

Изменено пользователем alxxbx
Ссылка на комментарий
Поделиться на других сайтах

alxxbx

думаю проще всего будет доработать Kerberos сервер линукса,так как наработки имеются,просто надо внести некоторые изменения

Ссылка на комментарий
Поделиться на других сайтах

alxxbx

Огромный респект за то что ты делаешь.

Напиши: чем на данном этапе тебе могут помочь простые смертные?

И кстати, мысль: зачем искать Хаб, когда можно воспользоваться двумя сетевухами в компе ;)

Ссылка на комментарий
Поделиться на других сайтах

Была бы кстати помощь программистов PowerPC+VMX128 - разобрать ПО формирующее пакеты Kerberos. :)

 

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

 

alxxbx

думаю проще всего будет доработать Kerberos сервер линукса,так как наработки имеются,просто надо внести некоторые изменения

 

много дорабатывать и не надо, добавить Pre-auth data - 131, 203, 204. 205, 206, 209, и единственное, что нужно - расшифровать эти данные, чтобы знать что дописывать :)

Ссылка на комментарий
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...