Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Alex Lexcuk

Оценить эту запись

Obfuscater AS3

Запись от Alex Lexcuk размещена 23.04.2013 в 00:07
Обновил(-а) Alex Lexcuk 11.09.2013 в 03:01

Снова просматривая питон сервер, мне захотелось сделать с ним что нибудь полезное. Поэтому я сделал полезную штуку - обфускатор as3 кода.
Идея проста надо в исходниках найти и заменить все import, package, private var, public var, private function, public function, public class, private class, public const, private const.
Упрощаем задачу - можно заменять слова, которые стоят за следующем словом после public и private.
Обфускатору нужна директория с исходником который нужно принять для работы и директория в которую он будет делать свою работу.
Для начала нужно сделать словарь замен. Словарь замен это файл со строками в каждой строке слово которое ищется во всех файлах исходника и слово на которое оно будет заменено. Это простой опенсорсный обфускатор и он заменит все слова к примеру geom во всех файлах, если в структуре ваших классов есть package geom, а так как адобовский package тоже содержит geom, то и оно заменится не абракадабру и исходник потом не соберётся, поэтому есть ещё один файл - это словарь отмена замен, но на самом деле он не отменяет замену, а приводит к кому что замена не делается. Этот словарь 'отмена замен' включает в себя все Адобовские слова, какие только я смог найти. Поскольку естественно он не полный, то почти при каждой обфускации нужно его дополнять, слова из 11 флеш плеера в него не входят, потому что еще не разу не обрабатывался исходник под stage3d 11 плеера.
При тестировании сначала всё глючило и не работает как надо, что привело к такому виду обфусцированного исходника пример:
Код AS3:
		private var Lexcuk_powered_v/*pageFlip*/:Lexcuk_powered_l/*PageFlip*/;
Так при сборке сразу видно, где ошибка и как её устранять в основном добавляя в словарь "отмен" слова которые заменять не нужно. Эти закомментированные реальные названия методов классов и свойств, мешались с многострочными комментариями, поэтому реальные комментарии удаляются из обфусцированного исходника, для этого используется подсветка синтаксиса http://www.riaspace.com/2010/09/as3t...ark-component/ потом впоследствии пришлось то-же проделать и со строками, но оказалось что строки всё-таки нужны и они сначала удаляются, а потом после обфускации опять ставятся на своё место.
Закомментированные реальные названия впоследствии стали опцией translateEasily и её можно убрать отредактировав конфигурационный файл config.xml
Код:
<data>
  <mySource>D:\FLEX\bit</mySource>
  <obfuscatorSource>D:\FLEX\bitOBf</obfuscatorSource>
  <myFirstWord>Lexcuk_powered_</myFirstWord>
  <translateEasily>true</translateEasily>
</data>
Названия замен обфускатор делает так
Код AS3:
repStr = myFirstWord + i.toString(36);
i - счетчик всех слов (слова отмен не считаются),
Слова с длиной меньше 4 автоматом не обрабатываются, я посчитал, что с такими названиями и так ничего не понятно в исходнике, но их можно включить дописав словарь замен, после его создания, потом надо его опять прочитать, для этого есть соответствующая кнопка.
http://swf-flash.blogspot.com/2013/0...on-script.html
Какие могут быть проблемы:
Сначала я обфусцировал pageFlip и он завёлся после обфускации с первого раза, потом я решил обфусцировать исходники самого обфускатора, он собрался, но выдавал ошибку, оказалось интерфейс, который был нарисован в Flash CS5 использовал те-же имена, что и private свойства некоторых классов исходника, что-бы исправить ситуацию, я включил эти имена в словарь отмен и всё собралось как надо.

Последняя версия
https://sites.google.com/site/murmad...17_05_2013.zip

youtube how to
http://youtu.be/ypicpTvMG94

Инструкция.
Создаете две папки с одинаковыми копиями проекта.
Запускаете питон сервер. TCPServer_obf_python_2_7_16_05_2013.py или TCPServer_obf_python_3_3_16_05_2013.py (зависит от того какую версию питона вы установили)
Запускаете обфускатор LexcukActionScriptObfuscator.swf (но надо добавить его в настройки доверенной папки или пересобрать обфускатор во флеш девелоп)
Прописываете my source (это путь к папке с исходниками)
Прописываете obfuscator out source (это путь к папке с обфусцированными исходниками)
Нажимаете на кнопку-линку make find and replace text. Прожка прочитает все файлы с расширением as достанет от туда все названия классов, паблик методов и свойств и создаст файл findAndReplace.txt. Советую перед этим удалить все файлы из исходника которые не требуют обфускации, это может быть к примеру папка с box2D, она ведь опенсорсная, зачем ее обфусцировать. Теперь открываем файл findAndReplace.txt (если есть необходимость) в флеш девелоп и дописываем его или удаляем из него ненужное. В обфускаторе после этого надо прочитать заново файл findAndReplace.txt для этого есть кнопка read find and replace text.
После того как файл findAndReplace.txt готов нажимаем на кнопку obfuscate. Прожка опять прочитает все файлы из исходника переименует их в соответствии с findAndReplace.txt удалит из них комментарии, переименует все классы, паблик методы и свойства (помоему и приват тоже), однако если имена встречаются в файле cancelFindAndReplace.txt то переименования не будет (вставит новые комментарии если в файле настроек в пункте easy translate стоит true c реальными именами классов) и сохранит файлы в папку с обфусцированым исходником.
Теперь надо собрать флешку из обфусцированных файлов. Посыпятся много ошибок, которые исправляются вручную, потому что многие слова не поддаются обфускации (типа Math или Stage) их надо прописывать в файл cancelFindAndReplace.txt, что-бы при следующей обфускации они не повторялись.
После того как обфусцированная флешка готова и работает можно прописываем путь к ней в поле obfuscation swf file. И нажимаем на кнопку String SWF Obfuscation так во все обфусцированные имена рандомно вставляются недопустимые символы типа ^ % @ ; если попытаться декомпилировать эту флешку то декомпилятор не сможет сохранить файлы с такими именами.
Однако если у вас есть сайтлок то строку этого сайтлока надо всё-же как-то закодировать к примеру сделать из нее int массив с кодами букв. Так можно избежать редактирования флешки в простом текстовом редакторе.
Всего комментариев 5

Комментарии

Старый 24.04.2013 22:24 MikroAcse вне форума
MikroAcse
 
Аватар для MikroAcse
Хмм, а зачем это нужно? Практический смысл?
Это не поможет никак, только усложнит все.
Старый 25.04.2013 09:52 КорДум вне форума
КорДум
 
Аватар для КорДум
Обфускация нужна для того, чтобы отбить желание курить исходник у большей массы декомпильщиков.
Старый 25.04.2013 17:44 MikroAcse вне форума
MikroAcse
 
Аватар для MikroAcse
Цитата:
Обфускация нужна для того, чтобы отбить желание курить исходник у большей массы декомпильщиков.
Да я знаю для чего это нужно. Но, кому надо, тот разберется даже в самом непонятном коде.
Старый 25.04.2013 18:48 Hauts вне форума
Hauts
 
Аватар для Hauts
Тот, кто разберется в таком коде, думаю, сможет повторить проект и без декомпиляции, вот в чем дело.

А тот, кто не сможет повторить — ничего толком и не получит, декомпилировав.
Старый 01.05.2013 15:29 Alex Lexcuk вне форума
Alex Lexcuk
Получил отзыв, что после декомпиляции такой исходник можно снова собрать, несмотря на обфускацию. Сделал дополнение, теперь после декомпиляции его собрать невозможно, потому что в названиях классов используются недопустимые символы. Знания подчерпнул здесь http://active.tutsplus.com/tutorials...ng-encryption/ реализовал Step 12: String Obfuscation.
Подробности http://swf-flash.blogspot.com/2013/0...-01052013.html
 

 


Часовой пояс GMT +4, время: 16:52.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.