Сейчас на форуме: -Sanchez- (+7 невидимых) |
eXeL@B —› Основной форум —› как бы это пропатчить? (флэш) |
Посл.ответ | Сообщение |
|
Создано: 20 декабря 2015 11:41 · Личное сообщение · #1 Доброго времени суток! Ковыряю игрушку Используется свой плеер и дополнительные флэшевые "обёртки", причём всё это намертво интегрировано с самой игрой - разделить вряд ли получится. Реверснул алгоритм шифрования флэшки (чтобы можно было реплейсить флэшку в плеере), вытащил, разбираю активацию. Код кнопки активации выглядит так Code:
За запросы на активацию отвечают вызовы следующего вида: Code:
и Code:
Code:
Чтобы много не парить мозги, я пошёл в com.fizzy.net.remoting.FizzyServices и в функциях checkActivation и checkRefund вместо запросов вставил код this.dispatcher.dispatchEvent(new Event(Event.COMPLETE)); По идее, это должно вызвать обработчик с нужным кодом сообщения, и все будут счастливы. Но это почему-то не работает... При попытке активировать любым кодом игра просто висит с сообщением "MsgVerificationWait". Где я ошибся? исследуемый файл (сам по себе не запускается) |
|
Создано: 20 декабря 2015 16:33 · Поправил: 4kusNick · Личное сообщение · #2 Если оно в итоге через Flash Player проигрывается, я бы поставил \ подсунул отладочную версию и смотрел в логи трейсов - не падает ли оно где-то из-за патча. Затем я бы в методе checkActivationResult оставил бы код Code:
Чтобы выполнились все действия как при обычной активации. И в конце добавил бы log или trace чтобы удостовериться что код выполнился до конца без ошибок. Если они используют для проигрывания не Flash Player а что-то своё и там нет трейсов - то я бы посмотрел куда сбрасывает данные их log() и при необходимости включил бы его, если он отключен, чтобы можно было оставлять для себя логи. ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. | Сообщение посчитали полезным: -=AkaBOSS=- |
|
Создано: 21 декабря 2015 00:24 · Поправил: JohnyDoe · Личное сообщение · #3 Мне кажется не надо париться с активациями. Достаточно будет _activated проинициализировать и в соответствии с логикой потереть код, который отвечает за всяческие проверки. Там обфускации нет - все не так уж и сложно должно быть. Вариант от 4kusNick вполне годится, если не охота тереть лишний код. Можно еще весь этот код перенести прямо в метод activate и не запускать активацию вообще. |
|
Создано: 21 декабря 2015 01:32 · Личное сообщение · #4 Ну я понимаю, что проще поменять код везде где только можно, но хочется красивого и аккуратного решения. Основной вопрос был не сколько о том, как именно её взломать, а больше о том, почему я не наблюдаю ожидаемого эффекта. С этой ошибкой я уже разобрался - глупо, но я абсолютно не обратил внимание на проверку this.remoteService.result в обработчиках событий. Выяснить удалось только после того как функцию log перенаправил на wrapperLog - сброс лога в отдельный файл. Таким образом, финальный патч для com.fizzy.net.remoting.FizzyServices::checkActivation и checkRefund стал таким: Code:
В результате активация проходит, но в процессе до сих пор нарушается очередь событий. Судя по всему, обработчик Event.COMPLETE вызывается раньше, чем происходит возврат из вызова applicationData.activate (нет задержки интернет-соединения). Из-за этого, экран с сообщением об удачной регистрации оказывается перекрыт всё тем же окном "MsgVerificationWait". Плюнул и перенёс вызов, вешающий окно, на одну строчку выше Code:
Вроде бы всё получилось, тестирую... |
|
Создано: 21 декабря 2015 12:15 · Личное сообщение · #5 С логами всегда проще. Если не идет процесс, то надо искать как бы посмотреть лог. Окно "MsgVerificationWait" выводит в конце какой-то результат или просто закрывается? А то его можно было бы вообще не выводить. С другой стороны, будет не понятно произошло ли что-то вообще после нажатия на кнопку активации. |
|
Создано: 21 декабря 2015 13:25 · Личное сообщение · #6 JohnyDoe пишет: Окно "MsgVerificationWait" выводит в конце какой-то результат или просто закрывается нет, это просто информационное окно - типа, подождите. Но тут судя по всему просто баг, который никто не поймал - неправильный порядок выполнения, может нормально работать только за счёт задержки интернета. Добавил еще строки с серийником и номером активации в инициализацию ApplicationData - большше не нужно ничего вводить, игра изначально считает себя зарегистрированной. Кажется, всё... |
|
Создано: 21 декабря 2015 14:07 · Личное сообщение · #7 Возможно будет интересно. Самый простой путь из всех - взять флешку с сайта(та что демо), изменить basepath, положить файлы из инсталлятора рядом в директорию assets и поиграться с методом isDemo. В итоге получаем полную версию игры с возможностью запуска через стандартный flash player. Теперь можно считать, что вопрос рассмотрен всесторонне | Сообщение посчитали полезным: -=AkaBOSS=- |
|
Создано: 21 декабря 2015 14:59 · Поправил: -=AkaBOSS=- · Личное сообщение · #8 С эксмортисом вопрос можно считать решённым.. Полную флэш версию возможно рассмотрю чуть позднее, пока и так работает) Возился недавно еще с одной игрой - Цель исследования - сделать полную оффлайновую версию. Игра в процессе выполнения подгружает семь музыкальных треков и одно изображение - я пытаюсь их вшить внутрь, чтобы ничего лишнего не болталось. C изображением проще всего - подключил как ByteArray, а в конструкторе game.levels.GlitchmapBackground вместо loadImage Code:
сразу указал bytesSource Code:
Вопрос первый - это будет работать, если GlitchmapBackground_ImgGradientGreen объявлен как ByteArrayAsset? далее - музыка.. С ней всё посложнее. Треки грузятся в Code:
Правильно ли я понимаю, это означает, что в playMusic первым параметром можно передать SoundAsset as Sound и это будет работать? |
|
Создано: 21 декабря 2015 16:49 · Поправил: JohnyDoe · Личное сообщение · #9 |
|
Создано: 21 декабря 2015 17:28 · Поправил: -=AkaBOSS=- · Личное сообщение · #10 Переделал функцию loadMusic - теперь в качестве первого аргумента она принимает Class, и передаёт его первым же аргументом в playMusic. Ну и соответствующим образом изменил вызовы - вместо строк с названиями передаются классы SoundAsset. Всё отлично, но поначалу не играло из-за выключенного звука в опциях. JohnyDoe пишет: GlitchmapBackground_ImgGradientGreen это какой-то класс? ну я посмотрел как в других местах сделано, пошаманил с rabcdasmом и получилось такое: Code:
Плюс внёс соответствующие изменения в SymbolClass и ExportAssets, и добавил нужное изображение как binaryData. создаю объект так: Code:
в момент использования (после 6го уровня) отладочный плеер выдаёт ошибку: ReferenceError: Error #1069: Property ::glitchmap not found on game.levels.GlitchmapBackground and there is no default value. at game.levels::GlitchmapBackground() Последний глюк оказался вызван тем, что rabcdasm не очень хорошо понимает неймспейсы, скопированные из ffdec. Вместо строчки getproperty QName(PrivateNamespace(null,"30"),"glitchmap") вставил getproperty QName(PrivateNamespace(null, "game.levels:GlitchmapBackground/instance"), "glitchmap") теперь всё работает) если кому-то интересно глянуть на результат - |
eXeL@B —› Основной форум —› как бы это пропатчить? (флэш) |
Эта тема закрыта. Ответы больше не принимаются. |