декомпиляция операторов препроцессора Objective-C

Пожалуйста, простите меня, если это очевидный вопрос или если есть какие-либо ошибки. Я очень новичок в Objective-C и как бы застрял в глубоком конце.

Я изучаю обфускацию Objective-C. По простому методу, который я нашел здесь заключается в том, чтобы препроцессор изменил имена методов на тарабарщину. Мой вопрос заключается в том, может ли декомпилятор распознавать операторы препроцессора, чтобы он мог декомпилировать исходный код обратно к исходным именам методов. Пример из упомянутого выше вопроса приведен ниже:

#ifndef DEBUG
#define MyClass aqwe
#define myMethod oikl
#endif

@interface MyClass : NSObject {
}

- (void)myMethod;

Возможно ли, чтобы этот код, не скомпилированный для отладки, мог быть декомпилирован обратно во что-либо, кроме

@interface aqwe : NSObject {
}

- (void)oikl;

person ewok    schedule 22.02.2012    source источник
comment
Да, вы можете просто запустить исходный файл через препроцессор C, чтобы получить вывод (после того, как вы удалили включаемые файлы).   -  person trojanfoe    schedule 22.02.2012
comment
@trojanfoe, так что я понимаю, если скомпилированный код был развернут без включения исходного кода (только скомпилированные двоичные файлы, если они не скомпилированы для отладки), все еще возможно получить из него исходный исходный код?   -  person ewok    schedule 22.02.2012
comment
Я думаю, что неправильно понял ваш вопрос - я предположил, что вы хотели передать исходный файл кому-то, но это не так.   -  person trojanfoe    schedule 22.02.2012
comment
На самом деле обфускация чаще всего используется при распространении исходного кода. Если вы хотите защитить свой двоичный файл, не можете ли вы просто strip символы?   -  person trojanfoe    schedule 22.02.2012


Ответы (2)


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

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

person mattjgalloway    schedule 22.02.2012

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

Загляните в эту тему, вы найдете много полезной информации для начинающих:

https://stackoverflow.com/questions/337134/what-is-the-best-net-obfuscator-on-the-market

person oanoss    schedule 22.02.2012