Запретить сброс заголовков через исполняемый файл в приложении Cocoa OSX

Я проводил эксперименты с моим приложением macacoa и обнаружил, что могу сбросить все заголовочные файлы (.h файлы) исполняемого файла моего приложения, используя другой исполняемый файл класса-дампа, доступный на Github.

Я хочу знать, как я могу запретить моему приложению создавать дамп заголовочных файлов с помощью любого стороннего исполняемого файла, такого как class-dump.

Команда для сброса:

./class-dump -H /Users/abc/Documents/app -o ./Headerfiles

Какие-либо предложения

Заранее спасибо

1 ответ

Я сомневаюсь, что есть способ предотвратить это.

Информация о классе, методе, свойстве, протоколе и категории Objective-C все динамически регистрируется во время выполнения. Следовательно, ваш исполняемый файл __DATA раздел должен содержать всю эту информацию. Инструменты как class-dump просто перепроектируйте эти таблицы, чтобы создать эквивалентный интерфейс (.h) файл.

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

Уродливое, половинное решение - полное потенциальных проблем - было бы попробовать некоторую форму обфускации кода:

#define MyClass m0
#define doSomething m1
#define userClickedButton m2
#define hitCount m3

@interface MyClass
- (void)doSomething;
- (IBAction)userClickedButton:(id)sender;
@property NSUInteger hitCount;

появится в скомпилированном приложении как

@interface m0
- (void)m1;
- (void)m2:(id)o;
- (unsigned long)m3;
- (void)setM3:(unsigned long)n;
Другие вопросы по тегам