Запретить сброс заголовков через исполняемый файл в приложении 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;