Код:
Упс, забыл добавить, что анализируются все опкоды, которые работают со строками:
Хм... Ваш обфускатор вычислит, что поля "field1", "field2", ... "field10" нигде менять нельзя? Это при том, что ни строки "field2"-"field10", ни даже числа 2-10 в операциях не участвуют? Мне действительно интересно, как вы вычисляете множество допустимых строк. Вас же не только "входные" аргументы опкодов интересуют, но и результат выполнения опкодов. Ну и
Код AS3:
trace(myMessages[loader.data])
никто не отменял.
Собственно, вопрос не в том, что обфускатор не будет работать (а всегда можно придумать ситуацию, когда он не будет работать), а какие именно ограничения он накладывает на код. Плюс я интересуюсь анализом программ (в более общем смысле), так что вдруг здесь будут какие-то интересные идеи :)
Цитата:
Обфускатор уже тестировался на 2 зарелизиных игрушках,
|
В это охотно верю. Вполне возможно, что на вашем коде (даже большом) обфускатор работает, так как мои примеры сильно специфические.
wvxvw
Цитата:
То, что обращаются именно к экземпляру нужного класса всегда можно понять в самом месте вызова, так что даже далеко ходить не нужно.
|
Нет, нельзя.
Код AS3:
public class Test {
public var someValue : int = 15;
}
public static function cheat(arg : Object) {
arg['someValue'] = 10;
}
Вопрос: к экземпляру какого класса идет обращение? Можно ли переименовать someValue?
Все зависит от вызывающего кода. Если в cheat может попасть Test, значит, у него someValue переименовывать нельзя. Если не может - значит, переименовывать можно. Если запрещать у класса и наследников, то это будет почти эквивалентно тому, что у ТС (любой динамический доступ к строкам), любой честный map (который через object реализуется) будет автоматически портить вообще все классы (так как они являются его наследниками). Если делать точно, то нужно делать глобальный анализ (хотя в большинстве мест анализ каждого аргумента будет затрагивать небольшое количество методов/классов). Фактически, это будет другая типизация программы (более точная, чем в AS-коде).
|