Взлом через покрытие

Выбор инструментария


Анализом покрытия занимаются многие утилиты: как коммерческие, так и бесплатные. К явным фаворитам относятся Intel Coverage Tool, NuMega TrueCoverage и т.д. вплоть до MS profile.exe, из комплекта Visual Studio. Однако, все они ориентированы на работу с программами, имеющими исходные тексты, а "голый" двоичный файл обрабатывать не в состоянии. К счастью, их достаточно легко обмануть, сгенерировав всю необходимую информацию на основе дизассемблерного листинга, полученного с помощью IDA Pro.

Рисунок 1 Intel VTune Performance Analyzer – один из мощнейших коммерческих профилировщиков, работающий в паре с утилитой Intel Coverage Tool, определяющий покрытие

Фактически, профилировщику нужна всего лишь информация о номерах строк и именах функций. С исходным текстом он _не_ работает и для решения задачи нам достаточно добавить в ломаемый файл отладочную информацию, правда, для этого сначала придется разобраться с ее форматом. Некоторые профилировщики переваривают тривиальный map (который можно автоматически сгенерировать той же IDA Pro), но большинство работают со своими собственными форматами (как правило, недокументированными), завязанными на свои же собственные компиляторы (в случае Intel Coverage Tool это Intel Fortran Compiler или Intel C++ Compiler). К тому же Intel Coverage Tool требует обязательного наличия Intel VTune Performance Analyzer, который весит свыше 200 Мбайт и плохо работает под VMWare.

Рисунок 2 NuMega True Coverage – отличное средство для определения покрытие, но, увы, ориентированное сугубо на драйвера

NuMega, не имеющая собственных компиляторов, выглядит в этом плане более соблазнительной, однако, версия True Coverage, входящая в состав Driver Studio, поддерживает работу _только_ с драйверами, а прикладной версии в Сети найти не удалось (а ведь раньше, пока NuMega еще не продалась Compuware, она ведь была!).

Рисунок 3 MS Profile.exe – простейший профилировщик, умеющий в том числе определять и покрытие, но работающий только с перемещаемыми программами

MS Profiler.exe способен профилировать только перемещаемые программы, (т. е. такие, чья FIXUP TABLE не пуста), а большинство двоичных файлов неперемещаемы и хотя существует множество эвристических алгоритмов, восстанавливающих перемещаемые элементы (в частности, их можно встретить в дамперах), возможности MS Profile.exe не стоят того, чтобы с ним трахаться.



Содержание раздела