Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как предотвратить переопределение класса? (http://www.flasher.ru/forum/showthread.php?t=149591)

artfabrique 28.01.2011 10:40

Как предотвратить переопределение класса?
 
Столкнулся с проблемой:
Есть 2 SWF, одна загружается в другую с LoaderContext текущего апп. домена.
В загружаемой SWF есть класс, например, Box.
Как сделать так чтобы нельзя было его переопределить в загрузчике?
То есть, если злоумышленник создаст экземпляр класса с таким же названием в загрузчике, то далее будет использован именно он, а не тот который был загружен позднее.

cleptoman 28.01.2011 11:18

сохраняйте домен загружаемой флэшки

dimarik 28.01.2011 11:18

Никак. Сделайте так, чтобы невозможно было загрузить Ваше приложение загрузчиком.

Добавлено через 1 минуту
Цитата:

Сообщение от cleptoman (Сообщение 968476)
сохраняйте домен загружаемой флэшки

Загрузчик будет загружать в текущий ApplicationDomain. При конфликте пространств имен и названия класса загруженный класс будет игнорироваться.

mikhailk 28.01.2011 11:38

У меня был проект - контейнер (конструктор открыток), в который грузилось несколько флешек, причем заранее не было известно, что это за флешки. Соответственно, периодически происходили конфликты с именами классов. Задача была решена загрузкой каждой флешки в свой домен.

dimarik 28.01.2011 11:46

Задача злоумышленника - подменить класс.

artfabrique 28.01.2011 11:47

Ну у меня ситуация немного другая. Загрузчик мой тоже. А загружается секьюрити модуль с контрольными суммами итд. Как и откуда загружается - не скажу - сикрет фирмы ) Соответственно злоумышленник может манипулировать с загрузчиком и создать клоны классов секьюрити модуля (если конечно он каким то образом сможет узнать их имена). Можно же кстати делать рандомное имя класса на лету и регистрировать его? ну и свое имя он будет раскрывать уже после своей инициализации соответственно дергая некий метод загрузчика?

mikhailk 28.01.2011 12:05

Цитата:

Задача злоумышленника - подменить класс.
это я понял
моя реплика была вот по поводу этого:

Цитата:

Загрузчик будет загружать в текущий ApplicationDomain.
Загрузчик будет загружать в тот домен, который ему будет указан в контексте загрузки.
Правда, я не уверен, что это поможет автору.


Автор, а зачем эти пляски с бубнами?
Онлайн-казино пишете?

artfabrique 28.01.2011 12:30

нет. хочу сделать некий ноухау метод для приложений с соревновательной механикой в соц сетях, которая в разы усложнит изменение кода после декомпиляции. Как доделаю до конца — выложу.

†‡Paladin‡† 28.01.2011 12:56

Собрать класс в рантайме и обращаться к нему через интерфейс (depency injection как оно есть). Без разрешений allowDomain внешняя флешка не сможет ничего сделать.

artfabrique 28.01.2011 13:01

Цитата:

Сообщение от †‡Paladin‡† (Сообщение 968503)
Собрать класс в рантайме и обращаться к нему через интерфейс (depency injection как оно есть). Без разрешений allowDomain внешняя флешка не сможет ничего сделать.

С этого момента по-подробнее пожалуйста )

†‡Paladin‡† 28.01.2011 13:17

Цитата:

Сообщение от artfabrique (Сообщение 968504)
С этого момента по-подробнее пожалуйста )

Вам в каком месте по подробней?

Вам нужно получить экземпляр класса Box.
Согласно принципам di вы не вызываете new Box(), а используете статический класс Factory с методом getBox(), который возвращает вам объект реализующий интерфейс IBox. Внутри Factory может быть все что угодно. Например класс Box будет представлять из себя строку, которая загружается как байтмассив, как вариант там могут быть пачки функций, которые навешиваются на динамический класс. Для дополнительной защиты можно снимать хэши и проверять их (сделать отдельно класс с таблицами соответствия). В итоге через Factory мы будем получать только правильные подписанные классы. При этом можно проверять подпись как у вновь создаваемого класса, так и у вызывающего. Получится очень милая атмосфера паранои и недоверия в приложении.

artfabrique 28.01.2011 13:28

а что, если злоумышленник переопределит этот Фэктори класс и метод getBox? То есть, если подставной класс Фэктори будет зарегистрирован раньше инициализации секьюр модуля

Добавлено через 1 минуту
Я так понимаю отловить имена классов не так сложно в дампе памяти?

andrew911 28.01.2011 13:49

http://jpauclair.net/2010/09/30/prot...nst-preloadsw/

†‡Paladin‡† 28.01.2011 14:13

Цитата:

Сообщение от artfabrique (Сообщение 968514)
а что, если злоумышленник переопределит этот Фэктори класс и метод getBox? То есть, если подставной класс Фэктори будет зарегистрирован раньше инициализации секьюр модуля

О это будет мазохизм.

artfabrique 28.01.2011 15:46

Ну это понятно. Вопрос в том как это предотвратить.

†‡Paladin‡† 28.01.2011 17:00

Необходимость замены _всех_ классов в подгруженном приложении считается решением задачи?

inozemcev 28.01.2011 17:43

Я вообще ничего не понял. Может быть пространства имен могут помочь ?!

Добавлено через 2 минуты
Вообще забейте на злоумышленников, абсолютно все можно разобрать, попилить, переписать ... просто времени займет чуть больше, после ваших потуг.

mikhailk 28.01.2011 18:50

я подозреваю, тут чисто академический интерес?

artfabrique 28.01.2011 22:49

нет это не академический интерес, а вполне практический для текущего проекта. Не думаю что просто будет распознать подгрузку секьюр модуля этим методом, только если просмотреть дамп оперативки. Ну точнее распознать можно но фактически подменить крайне проблематично. Так что нужно просто придумать и сделать защиту от подмены классов загруженного секур ядра. Тоесть загрузчик и ядро моего "производства". Пока я услышал но еще не попробовал идею с продгрузкой ядра не в текущий домен и использования интерфейса как защиты от просмотра кода при дебаге. Вопрос в том теперь можно ли из подгруженной СВФ в другой апп.домен тягать методы загрузчика?

Добавлено через 20 часов 28 минут
мда жаль. вроде никак.


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

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