2013-09-10 2 views
2

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

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

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

Thanks, Raxvan.

ответ

2

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

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

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

+0

Thiank, у нас мало объективного кода c, основная проблема - C++, а strip не удаляет их, также мы удалили все параметры компилятора, которые, как мы думаем, могли бы генерировать символы и до сих пор не повезло. RTTI выключен. – Raxvan

+0

Попробуйте '-fvisibility = hidden -fvisibility-inlines-hidden'. –