Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: ewokОтветов: 2

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

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

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

@interface MyClass : NSObject {
}

- (void)myMethod;

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

@interface aqwe : NSObject {
}

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

iosobjective-cobfuscation

Ответы

Ответ 1 · рейтинг 4 · mattjgalloway

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

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

Ответ 2 · oanoss

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы