Сборка IOS содержит символы, видимые в IDA

Мы используем C ++ в проекте IOS и компилятор Apple llvm 3 для архитектуры ARM. Я заметил, что IDA может открыть exe-файл ARM, и на вкладке экспорт я нашел конструкторы виртуальных таблиц для большого количества кода на c ++ (что-то вроде `construction vtable for’BaseClass-in-OtherClass 00AB6AC5 ‘, где BaseClass и OtherClass являются фактическими классами c ++) и оттуда вы можете найти адреса для других подпрограмм.

Я не знаком с IDA, но я думаю, что оттуда вы можете найти чувствительные подпрограммы и изменить их для других целей. Я хотел бы знать, как все имена символов попали в сборку релиза (нам не хватает переключателя компилятора?) И действительно ли этот материал можно использовать для простого отслеживания подпрограмм, которые работают с конфиденциальной информацией.

Есть ли способ удалить все имена из сборки?

Спасибо,
Raxvan.

2

Решение

strip -x Myapp.app/Contents/MacOS/Myapp должен удалить все символы, не требующиеся для запуска программы. (Возможно, для этого тоже есть некоторые настройки XCode.) Возможно, вам придется поиграть с параметры видимости чтобы убедиться, что все частные символы помечены правильно.

Обратите внимание, что вы не сможете удалить имена Objective C (классы, поля и методы), так как они закодированы в структурах метаданных Objective C в сегменте данных программы и требуются Objective C во время выполнения.

Другим источником символической информации является C ++ RTTI (информация о типе времени выполнения). IDA в настоящее время не использует его, но возможно восстановить имена классов с помощью некоторых дополнительных сценариев. Вы можете отключить генерацию RTTI с -fno-rtti но это сломает ваш код, если вы используете dynamic_cast<> или же typeid операторы.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]