Обфускаторы: от бесплатного до ?1500

Перед каждым разработчиком flash игр, который доводит до релиза более-менее крупный проект, может встать вопрос защиты своей игры, частью которой может быть обфускация AS3 кода и/или swf. Здесь результаты моего недавнего небольшого поиска по этому поводу. Что-то типа небольшой таблицы для сравнения актуальных на момент решений:

  • OBFU - 1500? — демо нет, лицензия получается на год по e-mail автору :)
  • Amayeta SWF Encrypt Pro — $145 — демо на 10 компиляций с watermark
  • SecureSWF — от 100$ до 400$ (Pro) — триал 30 дней, watermark, напоминание
  • Irrfuscator — от 80? до 150?  -- триал 7 дней, без watermark
  • SWF Protector — от 40$ до 60$ — ?
  • SOB — бесплатно, с открытым кодом -- из командной строки
Интересно, что самый дорогой — OBFU стоит ажно ?1500 и принадлежит авторству компании Motion Twin и конкретно Николя Канасье — создателю открытого и бесплатного haXe и нескольких других заметных open source проектов. ) А с другой стороны SOB — единственный из найденных мной юзабельный бесплатный и открытый обфускатор с бинарником тоже имеет отношение к haXe — его писал Kostas Michalopoulos — участник haxe-сообщества, изначально для обфускации swf собранных этим компилятором (в версии 0.1 была ошибка с обычными из AS3, сейчас поддерживаются и они. «Сейчас» это версия 0.2 ;) ).

Ну и ещё возможно кому-то будет интересно покопаться в открытом коде на уровне концепции или пары небольших скриптов. Вот пара ссылок на такого типа решения:
http://makc3d.wordpress.com/2010/02/09/open-source-swf-obfuscator
http://github.com/shapedbyregret/actionscript-3-obfuscator

Больше всего хороших отзывов встречается о SecureSWF, пара знакомых мне команд используется его Pro версию. Про Amayeta и SWF Protector встречались отрицательные отзывы в плане неустойчивости перед современными декомпиляторами. Irrfuscator впервые увидел и попробовал только сегодня и не смотрел пока результаты его работы декомпилятором. Интерфейс довольно удобен и прост и обфускация прошла без проблем.
Думаю, что здесь найдется немало людей с бОльшим опытом использования обфускаторов, так что комментарии are welcome ) Также интересен опыт других способов защиты кроме обфускации, типа использования embed, вложенных загрузчиков и т.д.
Про то, что абсолютной защиты быть не может, писать не обязательно, понимание этого есть. ;)

p.s. это немного дополненная версия статьи опубликованной также в моем блоге. кто знает, а вдруг полезные комментарии появятся и там.
  • +10

Комментарии (30)

0
Использую SecureSWF (Pro версию) в принципе доволен. Множество настроек позволяет полностью контроллировать процесс обфускации. При тех или иных настройках удавалось обфусцировать любую swf без возникновения дальнейших ошибок. Дополнительное сжатие порой дает хорошую экономию размера, а встроенный сайт-лок очень удобен в процессе дистрибуции.
0
У меня такой вопрос, может быть кому-то покажется очень глупым, но всёже — зачем защищать код? Тоесть, если игра крутая — то её так или иначе поломают, а если игра среднечёк — то она вообще никому не нужна впринципе. Ну в крайнем случае можно создать свой тип шифрования переменных — от которых зависит прохождение игры.
+5
Возможно ты не о том говоришь. Защититься от взлома таблиц рекордов, накручивания денег итд — это одна задача. Желательно ее хотя-бы в минимальном варианте делать, ибо от этого и ваши деньги зависят. Нормальная таблица рекордов при нормальной игре побуждает игроков играть еще и еще раз, соответственно растут просмотры рекламы. Соревновательный момент нельзя недооценивать. Если совсем не защититься — мгновенно в таблице все будет засрано невероятными очками, придется либо чистить либо забить.

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

Какие от этого проблемы? Ломать очки и деньги таким образом не имеет смысла — их можно ломать просто прямо в памяти. А вот вырезать из твоей игры рекламу и засунуть свою, и распространять — запросто. Срезать сайтлок можно, и игра с эксклюзивным контентом для спонсора может появиться пересобранной без сайтлока.

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

И наконец — масса народу с радостью декомпилирую твою игру, поменяют ассеты, может даже не все — и запустят с рекламой. Причем, не один такой рипофф/клон а кучку. Им по-барабану даже что игра не хит. Они же почти не потратили ничего — им бы хоть немного там немного сям.

Даже если сделают клон визуально прилично переделанный — разве тебе небудет неприятно что кто-то воспользовался твоим кодом и движком бесплатно? Не помешает ли клон твоей второй версии? Если не будет неприятно — почему-бы тебе сразу не выложить сырцы всем в открытый доступ — пользуйтесь наздоровье? А ведь выпуск незашифрованной игры — это по сути и есть такой шаг.

Ну и наконец — если ты выложишь игру на ФГЛ с собственным сайтлоком, но не зашифрованную — есть шанс что ее свиснут влегкую. Я думаю ты не порадуешься когда игра преждевременно на порталах появится.

Таким образом идет борьба. Придумываются методы, которые усложняют декомпиляцию. Как минимум есть «обфускатор» — тулза тупо заменяет твои названия классов, переменных итд — на невменяемый набор символов. Даже если эту какашку декомпилировать — программисту будет сложно разобраться что и как в твоем коде происходит, для чего тот или иной класс.

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

Кроме того, защищающие программы умеют и оптимизировать код, дожимать его — делая меньше флешку.

Кроме того — могут делать за тебя сайтлоки, особо неприятным для взлома способом.

Итого — защитив хорошей программой, а я слышал не из одних рук что таковая сейчас практически одна — secureSWF — ты сильно усложнишь работу декомпиляторам, возможно заставив их бросить эту затею после дофигищща потраченного времени. Сбережешь себе деньги.
0
Спасибо за развёрнутый ответ. Нашёл несколько поводов занятся защитой.)
0
исчерпывающе, согласен и добавить то нечего, наоборот пару новых для себя поводов подумать увидел. спасибо!
а насчет защиты от читеров это да, отдельная тема, с обфускацией не особо связанная. было бы интересно и её обсудить как нибудь.
+2
Для борьбы с читерами можно, на пример хранить в памяти очки добавляя к ним рандомное число (не забывая потом вовремя отнять), или заменять цифры на буквы, к примеру:
1 — это a,h,t или b; 2 — q,p,o,g; 3 — l,s,d,x и т.д.
таким образом можно зашифровать число 322 — 64я способами (например sqp, s-3,q-2,p-2)

Алгоритм расшифровки: (для трехзначных чисел)

function decrypt (var num:string):int{
var ones = num.charAt(num.length-1)
var tens = num.charAt(num.length-2)
var thousands = num.charAt(num.length-3)
return (decryptOne(ones) + decryptOne(tens)*10 + decryptOne(thousands)*1000);
}

function decryptOne (var digit:string):int{
if (digit == a || h || t || b){
return (1);
} else if (digit == q || p || o || g){
return (2);
} else…
}

К примеру. :)
0
для шифровки переменных в памяти я например использую MochiDidgits. но лучше действительно обсуждать это отдельным постом.
0
Было бы интересно почитать
+3
Хотелось бы прояснить, что обфускаторы — это еще не вся защита. Поэтому обфускатор за 1500Эвро это очень странно. Я туда глянул — и точно, только обфускатор.

Дело в том, что все обфускаторы не только переименовывают названия классов, переменных, лейблов итд, но и переименовывают в спецсимволы, на которые компилятор будет ругаться. Избавиться от этого легко, в джаве, например декомпиляторы в этом случае просто переименовывают переменные и классы в произвольные имена типа cla1, cla2, a1, a2, a4. Это конечно не добавляет читаемости коду, но и не мучает компилятор.

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

Поэтому, рассматривать надо только тулзы, которые в дополнение к обфускации еще и работают с байткодом. secureSWF, например так корежит байткод, что иногда может и поломать игру :) Хорошо что у них предусмотрен гибкий и многогранный способ быстро находить проблемы и их решать. Зато — известные на данный момент декомпиляторы просто валятся с ошибками в винду, пытаясь декомпилировать эту срань :)

Ну и дополнительные фичи — тоже хороши — доп. оптимизация байткода, дополнительное ужимание флешки итд.
0
ага, поэтому и написал в начале статьи «вопрос защиты своей игры, частью которой может быть обфускация».
и да, OBFU и его цену тоже привел здесь как некий курьёз, ну или как загадочное явление, суть которого мне пока не понятна. )

то что лидирует сейчас secureSWF, уже довольно очевидно, жаль только что их ценообразование версий построено так, что никакие другие версии кроме Pro покупать не true не интересно, т.к. оптимизация кода, шифрование строковых литералов, зашифрованный сайтлок и создание шифрованного загрузчика — уж слишком вкусные фичи, чтобы от них отказываться. а это 400$ — не такая уж и малая сумма для еще не раскрутившегося indi особенно.

а вообще интересно, использует ли кто-нибудь другие способы защиты, кроме тех, что предоставляют те или иные тулзы, ну и стандартных сайтлоков конечно. понятно что в случае того же secureSWF многие возможные способы уже покрыты, но все же.
0
Свои способы отличаются обычно тем, что если ты их попалишь — они уже не будут эффективны :) То-есть стоит публично их засветить и их через некоторое время увидит кому это надо. Кроме того количество использующих тоже станет больше одного. Общеизвестные тулзы как раз страдают тем, что декомпиляторы новых версий могут стараться подстроиться, серьезные ломатели изучают известные тулзы.

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

Но на самом деле, это все не нужно — главная задача усложнить максимально задачу хакеру минимальными усилиями. Чтобы было тупо нудно возиться. Ддя этого думаю secureSWF пока хватит.

А у меня да, есть двойная подляна жуткая, но я вот ее не встраиваю, ибо уже это мне самому гемор — надо обфускировать, потом тулзами разбирать, менять ручками, собирать обратно.
0
Зимой на FGL была акция от Kindisoft, можно было заполучить бесплатно (за ссылку в кредитах) secureSWF (про версию), что многие из наших и сделали.
Отличная защита, но иногда как говорил scmorr ломает игру особенно при максимальных настройках, приходится каждый раз хорошенько тестировать.
0
мда, надо было зимой чаще заглядывать на FGL )
надо завести привычку постить сюда новости о всяких таких акциях, а то иногда уйдешь с головой в проект (мы например зимой писали/релизили социалку и на FGL, я тогда даже и не был ни разу по моему) и пропустишь всё.
0
А я люблю декомпилить флешки!)
без злового умысла, просто мне интересно, как программируют другие!
И из нескольких игр, который я декомпилил, ни одной не встречал, где эти методы используют.
может мне так везло)
0
Тут решаеться таже задача что и для обычных игр: отсрочить выход пиратской версии.
Если игра хитовая — она успевает собирает собрать максимум бабла и аудитории, которая будет советовать друзьям (поиграть на таком-то портале, купить).
Если защита держится дольше недели, то и вирусная версия (если таковая выпускается) разойдется по порталам тоже не ломанная.
0
Amayeta SWF Encrypt — как насчёт этой?
0
На последнем флешгамме был мощный доклад про защиту флешек. Там было сказано что выбор пока один — secureSWF.
0
Да все используют либо свою защиту, либо secureSWF. Но только pro версию, т.к. там больше всего фишек.
Остальные обычно левые поделки, чаще всего от одних и тех же авторов.
Они мало того что защиты реальной не дают, так еще и чаще всего авторы на соседнем домене тут же продают «декриптор».
Где то читал в блогах, что человек специально делал «контрольную» закупку. Юр. лицо (LLC или PLC) в счетах фигурировало одно и тоже.
Это из той же оперы что и «антивирусы» за 20 баксов, которые вообще ничего не делают, только анимацию «лечения» показывают.
Просто менее агрессивные и даже что-то делающие :)
+2
Хороший обзор.
В принципе, если бы я защищал свою игру, я бы сделал следующим образом:
1. Зашить урлок в «глубину сибирских руд». В какой нибудь обработчик партиклов или в несколько. Как только понимаем, что версия ворованная — начинаем «портить» битмапы, переменные, выбрасывать сообщения и т.д.
2. Обфусцировать код. Кстати, задача сводится к парсингу исходников, что вполне можно сделать самому.
3. Сделать несколько уровней вложенности. Прелоадер загружает массив байтов, расшифровывает, превращает в «мувиклип», который загружает массив байтов и т.д.
Вот это я даже примерно не знаю, как реализовать. Именно превращение массива байтов в «мувиклип», но наверняка это возможно.
Также, чтобы не облегчать задачу взломщику, можно каждый уровень/экран сделать отдельным «мувиклипом», который расшифровывается при показе и содержит собственную проверку на урлок.
Вообще, можно наворотить страшную штуку :)
+2
:) да, в сторону третьего пункта также мысли были, но тоже пока ничего завершенного в этом плане на реализовал.
есть ещё мысли как-нибудь использовать возможности и особенности уже упомянутого выше haXe, как компилятора так и его специфических API, но это тоже пока больше теория, которая требует доп. времени на проверку.

Ну а на практике, судя и по комментариям здесь (спасиб всем, кстати) для серьезных проектов нужно брать SecureSWF и не париться.
… а для быстрого и дешевого осложнения понимания мелких проектов и каких-нибудь альфа-версий школотой наверное можно взять и бесплатный SOB и дополнить его парой мелких гадостей от себя.
оного, кстати, тоже по быстрому попробовал на паре swf. для одного подошла такая вот команда:
sob -I ignore.txt --show-renames ИГРА.swf > renames.txt
это по умолчанию — включены все флаги, так что он карежит все имена, что может и даже размер файла несколько уменьшает вследствии. в ignore.txt перечисляются исключения, в renames.txt он пишет все что поменял.
второй проект (посложнее) с ней запускаться не стал и выискивать все траблы в renames.txt мне было уже лень и так что пришлось включить только три из четырех флагов с помощью --obfuscate-mask:
sob --obfuscate-mask rRn -I ignore.txt --show-renames ИГРА.swf > renames.txt
0
хороший обзор. плюсанул. сам пользуюсь SecureSWF, которым вполне доволен.
0
сам пользуюсь secureSWF про…

но даже максимальная защита ломается. Вот такой он флешь… Обнаружил на одном из порталов хакнутую версию своей игры ,(
0
а что сломали?
0
к счастью только накрутили счетчик патронов и разлочили все виды орудий…
это блин сложно сделать и с исходным кодом под рукой ,))) фиг знает как они разобрались…
0
Я думаю не перекомпиливали. Для такого можно сначала в памяти найти, потом байткод позырить и поменять руками.
0
а как тогда вставили в главную менюху надпись «cracked by»?
0
Это текст существующего текстфилда или новый текстфилд?
На каких настройках ты секуресвфом проходил игру? На агрессивных?
0
У Kindisoft на secureSWF сейчас скидка 25% (хотя может и давно, увидел, просто, только сегодня) по промокоду FGL25

Save 25% With Promotion Code: FGL25
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.