Показать сообщение отдельно
Старый 16.01.2009, 13:57   #10
Рыцарь
 
Аватар для dmitry501
 
Регистрация: 01.10.2007
Сообщений: 293
Сказал Спасибо: 42
Имеет 50 спасибок в 37 сообщенях
dmitry501 пока неопределено
По умолчанию

Цитата:
Сообщение от Rifleman Посмотреть сообщение
Стал анализировать пакеты. Вычислил, что ключ меняется именно при заходе на аккаунт. При смене перса с этого же акка пакеты не изменились. Далее, стал смотреть, какой тип пакета не меняется при перезаходах. Обратил внимание на пакетик "Tип: 0x00 (KeyInit: )" и стал играться с ним. Обнаружил связь этого пакета с пакетом для отправки сообщения в пати чат. Я отправлял слово Hello. Изначально, пакет должен выглядеть так:
Код:
38 48 00 65 00 6C 00 6C 00 6F 00 00 00 03 00 00 00
А при пакете с "ключом"
Код:
00 58 8B 99 7B 7C B3 F8 7F 80 8A 26 B5 64 79 03 6D 3A 69 8A 8B 8C 6D 8E 8F 90
он выглядит следующим образом:
Код:
23 AA 7B 19 08 C0 7F EC 00 6F 00 00 00 03 00 00 1B
Обратил внимание, что часть пакета дополнительной шифрации не подверглась, а часть изменилась, а именно, первые 8 байт. Далее 8 байт - без шифрации, а вот следующая восьмерка (Выяснил более длинным сообщением) - снова шифруется, причем, похоже, таким же методом.
Теперь я сопоставил 8 байт из пакета KeyInit, которые заботливо были выделены в программке и зашифрованные 8 байт в пакете с сообщением. Составил такую табличку:
Исходник___38 48 00 65 _ 00 6C 00 6C
Ключ_______8B 99 7B 7C _ B3 F8 7F 80
Результат___23 AA 7B 19 _ 08 C0 7F EC
Методом академика Тыка получил, что если применять операцию XOr к последним 2м байтам в каждой такой четвёрке (Выделено жирным), то как раз и получим тот пакет, что и отсылается клиентом: (например) h6C XOr h80 = hEC.
Но вот сопоставить оставшиеся 2 байта никак не могу. Причем, что интересно, я выловил 5 (на большее пока терпения не хватило) разных ключиков и соответственно 5 разных пакетов на отправку одного и того же сообщения. Из варирования сообщением и последующим сопоставлением пакетов, составил табличку "умножения" для одного ключа. Т.е. зная ключ, я мог бы зашифровать любой пакет. Эта неизвестная операция(обозначу её *, не путать с умножением) производится к соответствующим 4 битам в байте: 38*1B = 5D, 35*1B = 50...казалось, уже можно было бы написать шифрующую функцию.... НО! Результат действия ключа на зашифрованный пакет меняется от ключа к ключу. Для одного ключа результат действия 38*8B = 23, а при другом ключе 38*EB = 58. Вот тут я и застрял. Где-то есть ещё один параметр, влияющий на результат, и я его не могу найти.
Может быть, написал немного коряво, просто задачка так глубоко засела в голову, что пишу это уже в 3 часа ночи .
оО тебя название пакета KeyInit ничего не напоминает? И вообще ты теорию щифрации ГС читал? Ты для чего велосипед изобретаешь?
dmitry501 вне форума   Ответить с цитированием