Сейчас на форуме: tyns777, zombi-vadim, zds (+5 невидимых) |
eXeL@B —› Программирование —› Можно ли вообще что-то сделать в данном случае |
Посл.ответ | Сообщение |
|
Создано: 21 мая 2013 17:47 · Личное сообщение · #1 Приветствую! Опять, после долгих раздумий, я решил спросить... Я уже несколько месяцев назад спрашивал, помогли... Но сейчас ситуация изменилась... Попробую описать все по порядку. Имеется онлайн игра Написана она на AS3 с применением обфускатора. Протокол дважды зашифрован: пакет = salsa20(arc4(data, key), key, iv). Нужно внедриться в траффик (изменять)! На уровне salsa20 проблем нет, там подгружается часть swf кода, объединяется с заголовком и подписью и внедряется как swf объект, несущий функции шифрования. key и iv передаются там-же, по ходу дела генерятся рандомно на лету или из набора нагенеренных заранее. Тут проблем нет. С горем пополам, имея Delphi\C#\AS3 исходники - переписал на Delphi. Вот с arc4 проблема. Точнее с key. Как все происходило ранее: Предварительно имелось две BigInteger константы - Base и Prime. Далее, схематично... 1) Генерировался публичный ключ одной стороны (клиента) а) приватный_ключ_клиента = случайные 256 hex символов (128 байт) б) публичный_ключ_клиента = Base.modPow(приватный_ключ_клиента, Prime) 2) Этот публичный ключ отправлялся на другую сторону (сервер) 3) На сервере происходило нечто опишу ниже 4) С другой стороны приходил публичный ключ а) пусть это будет "публичный_ключ_сервера" б) рабочий_ключ = публичный_ключ_сервера.modPow(приватный_ключ_клиента, Prime) в) key = 16 байт от (рабочий_ключ) 5) Этот самый key и являлся ключем шифрования ARC4. Дальше все уже просто и понятно. В тот момент (это примерно февраль 2013), была проблема внедриться в траффик. Ведь приватный_ключ_клиента я получить не мог, а соответственно и сгенерировать ключ шифрования ARC4. Как оказалось далее, можно! И просто! Всего то нужно было сгенерировать публичный ключ ровно так-же как это делает клиент, передать ему, а с данными, полученными от клиента поступить точно так-же как клиент поступает с публичным ключем сервера. Я реализовал так называемый EncryptionFacade, который создавался в двух экземплярах. Для сервера (работал с клиентом игры) и для клиента (работал с сервером игры). И было всего навсего две функции procedure TEncryptionFacade.SetPublicKeyHex(Key: AnsiString); function TEncryptionFacade.GetPublicKeyHex: AnsiString; Работало так: 1) От клиента приходил пакет с его публичным ключиком. Я его сохранял в переменную, а сам от клиентского фасада получал его публичный ключик и отправлял на сервер. 2) От сервера приходил его публичный ключ. Я генерировал с серверного фасада публичный ключик и отправлял на клиент. Одновременно применял соответствующие публичные ключи у клиентского и серверного фасада. Все работало как часы, месяц я примерно потратил на всю эту свистопляску с шифрованием. Сперва использовал swf код рипнутый из клиента, функции шифрования, по средствам ActiveX. Потом все переписал на Delphi. И в один прекрасный момент, появилось вот что: ActionScript3 Code:
Возможно-ли сейчас что-то сделать? |
|
Создано: 21 мая 2013 18:07 · Личное сообщение · #2 |
|
Создано: 21 мая 2013 20:06 · Личное сообщение · #3 |
|
Создано: 21 мая 2013 20:30 · Поправил: DimitarSerg · Личное сообщение · #4 |
|
Создано: 21 мая 2013 20:47 · Личное сообщение · #5 |
|
Создано: 21 мая 2013 20:56 · Поправил: VodoleY · Личное сообщение · #6 virus_forever первая сомнительная дыры это экспонента. изза малого количества бит. но ее нагибать тоже проблема. и помойму слабы модулус если я не ошибаюсь на глазок.. не за компом. сори З.Ы. пива вчера было все таки много... зато ее патчить класно 1 бит ) ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 22 мая 2013 09:31 · Поправил: SaNX · Личное сообщение · #7 VodoleY мочишь. 0х10001 - слабая экспонента. бггг я тут недавно писал: https://ssl.exelab.ru/f/action=vthread&forum=2&topic=21734&page=1#6 там экспонента 17, дык и то Archer сказал хуй чо выйдет ----- SaNX | Сообщение посчитали полезным: DimitarSerg, Abraham |
|
Создано: 23 мая 2013 20:00 · Поправил: virus_forever · Личное сообщение · #8 |
|
Создано: 24 мая 2013 08:40 · Личное сообщение · #9 |
|
Создано: 25 мая 2013 10:57 · Личное сообщение · #10 |
eXeL@B —› Программирование —› Можно ли вообще что-то сделать в данном случае |