Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пункты меню



"Вся жизнь его в этот момент представилась ему веткой, дрожащей после взлета птицы, а эта птица была — возможность. Свободная воля."

Ф. Херберт. "Мессия Дюны".

Я уже предупреждал, что ВС имеет крайне скудный для профессионала интерфейс. Если вы хотите всерьез заняться изучением программ с помощью перехвата API-функций, то лучше все же не пожалеть времени и написать необходимый инструментарий самостоятельно. Однако большинство программи­стов слишком лениво или занято, и поэтому ВС стал стандартом "де-факто".

Кому-то такая критика может показаться несправедливой. Быть может, это слишком сурово по отношению к этой великолепной утилите? Кто знает... когда конкуренты спят и не предлагают ничего лучшего, то на безрыбье и рак рыба. Хотя есть еще и WinScope, написанный фирмой Periscope, но он почему-то не получил широкого распространения.

Меню "файл" типично для Windows-приложений. Пункты Open/Close/Save As комментариев не требуют. Заострим внимание только на одном моменте: "сохра­нить" подразумевает сохранить текущее состояние и перехваченные вызовы в файл. К сожалению, используется не текстовый, а внутренний формат ВС, а это означает, что написание собственного навигатора усложняется. Для этого потре­буется проделать кропотливую работу по изучению сложной, а местами и запутанной структуры файла.

С другой стороны, подобный анализ — очень хорошая практика, которая не раз и не два пригодится в дальнейшем, а также обеспечит хорошие навыки работы с IDA и Soft-Ice, да и просто поможет оценить общие концепции. Но я отклонился от темы.

"Print" и "Print PreView" позволят распечатать или хотя бы показать на экране протокол в более удобочитаемом виде. К сожалению, для его распечаты-вания потребуется тонны бумаги (соответственно, литры чернил в случае струй­ного принтера), что вряд ли оправдано. Особенно если вспомнить про сегодняш­ний кризис и стоимость расходных материалов... Непосредственная печать в файл невозможна, поскольку ВС представляет все данные в графическом, а не тексто­вом формате.

Меню "Edit" содержит традиционную команду "Find" (Ctrl-F). Вызов ее приводит к появлению стандартного диалога поиска, которое вроде бы не поддер­живает ни шаблонного, ни мультистрокового поиска. Однако при близком рас­смотрении справа от окна ввода обнаруживается маленькая прямоугольная кно­почка со стрелкой, обращенной вправо. Нажатие ее раскрывает подменю поиска, которое притягивает к себе с первого взгляда.

Error

Resource, memory or interface leak

API or OLE method call

API or OLE method return

Windows of Dialog Message

hook

Comment

Thread start of switch

Большая часть пунктов нас, конечно, интересовать не будет. Например, поиск утечки памяти (или ресурсов), столь полезный для разработчика в уже отлажен­ной программе, просто маловероятен и, кроме того, вряд ли каким-то образом связан с защитным механизмом.

Поиск вызовов API был бы полезен, если бы была хоть какая-то возможность указывать сложную маску. Фактически их так много, что следующий вызов нетрудно найти и ручным поиском. Более того, он скорее всего, окажется в пределах окна событий, так что не потребуется даже прокрутки последнего.

Фактически единственным используемым пунктом будет 'Windows of Dialog Message' — так как не всегда легко найти сообщения, относящиеся к окну (диалогу) среди множества малоинформативных вызовов функций API.

Поиск переключения контекста потока очень полезен при отладке многопо­точных приложений. Однако такие защиты пока не получили распространения. Впрочем, отдельные экземпляры существуют и устойчиво сопротивляются всяче-


ским попыткам их взломать. В этом случае ВС будет, вероятно, единственным средством, позволяющим быстро понять, что же все-таки происходит в отлажива­емом приложении.

Приятно, что ВС поддерживает поиск не только вперед, но и назад. Это весьма упрощает навигацию и значительно экономит драгоценное время разработчика.

Заметим, что окно поиска вынесено и в панель инструментов. Как и следует ожидать, оно поддерживает историю ввода; пара кнопок, расположенных рядом, задает направление поиска — вперед и назад. Но фильтр можно вызвать только через меню. Впрочем, редкое его использование не позволяет считать отсутствие его в панели инструментов поводом для критики или возмущения. Даже наобо­рот — панель меньше загромождается ненужными кнопками.

Меню VIEW начинается с пункта 'Event Summary'. Это своего рода и "легенда" всех условных обозначений, но в то же время — статистика вызовов функций API, оконных сообщений и всего остального в виде сводной таблицы. Эта бесполезная (но очень любопытная) информация не несет в себе ничего, что можно было бы использовать для анализа программы. Ну какой прок знать, что приложение вызвало 2562 функций API и приняло/передало 115 сообщений?

Следующие три пункта:

Show Error and leak only (показывать только ошибки и утечки)

Show All Events (показывать все события)

Show Error and Specific event (показывать ошибки и выбранные события) Specific event

нам уже должны быть хорошо знакомы по "быстрому старту". Обычно используется "Show All Events" или "Show Error and Specific event". При этом можно выбрать произвольный набор отображаемых событий. К несчастью для хакера, крайне грубый и непрактичный.

Все, что можно сделать, — это разделить вызовы OLE и API. Последнее, конечно, полезно, но все же жалко, что нельзя разделить сами вызовы API по каким-либо группам или хотя бы замаскировать некоторые из них. Как уже было отмечено, протокол будет в основном забит вызовами API, крутящимися в цикле выборки сообщений, и нет никакой возможности "отфильтровать" эти функции от других.

Установка флажка "Arguments" приводит к тому, что в круглых скобках будут указываться аргументы каждой из отображаемых функций. Это в самом деле очень удобно. При этом ВС распознает строки и представляет их в символьном виде. Поэтому мы имеем все шансы встретить введенный пароль и найти функции, манипулирующие им. То же верно и по отношению к другим типам переменных. Если при этом последняя представляет собой какую-то сложную структуру, то она будет отображена в развернутом виде в окне стека, расположенном справа.

По умолчанию этот флаг опущен. Настоятельно рекомендуется его взвести и больше никогда не опускать. То же самое можно сказать и о 'Sequence number'— последовательном номере функции, отображаемом слева. Это повышает эстети­ческое восприятие текста, а также дает понять, в каком месте протокола вы в данный момент находитесь (и помогает собрать рассыпавшиеся листы распечатки, если вы все же решитесь его распечатать).


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

Следующие несколько пунктов меню управления позволяют свернуть или развернуть все отображаемые ветви. Учитывая, что с последним неплохо справ­ляется и мышь, трудно понять, чем вызвано дублирование их в меню, причем без ассоциации с "горячими клавишами". Местами интерфейс ВС и вправду плохо продуман.

Меню "run" содержит только один интересный пункт "Setting", который и будет подробно рассмотрен ниже. Если кликнуть по нему мышкой, то появится окно с несколькими закладками.

Первая из них относится непосредственно к выбору уровня строгости контро­ля ошибок (в том числе и ручной его настройке), но к анализу заведомо устойчиво работающих программ никакого отношения не имеет, а поэтому рассматриваться в данном описании не будет.

Гораздо более интересна следующая закладка — 'Events reporting', уже рассмотренная выше. Думается, что уже нечего добавить, разве лишь напомнить еще раз о необходимости взвести нужные флажки: в противном случае просто ничего не будет работать.

"Program Info" позволяет задавать командную строку приложения (что уже давно не актуально для Windows-приложений, но, может быть, когда-нибудь и пригодится) и рабочую директорию (по умолчанию выбирается текущая); а также указать путь к исходным текстам, которых скорее всего просто в нашем распоря­жении не окажется (а потому никакого пути и указывать не придется).

А вот 'Error Supressions'— очень полезная и актуальная функция. Помните, я говорил, что нет никакой возможности задать фильтр для произвольных и мешающих функций? Так вот: я вас обманул. Эта возможность есть, правда, в очень грубом варианте ее реализации. Можно вообще отключить перехват не интересующих нас в данный момент функций. Но это не самый лучший выход. Если в процессе изучения рапорта потребуется информация о "заблокированных" функциях, она уже никак не может быть получена, разве что полным ре-анализом, что удовольствия не приносит.

Но, к сожалению, выбирать не приходится. Обычно мы вынуждены действо­вать по следующему алгоритму. Первым делом вносятся в "черный список" все функции, работающие с выборкой сообщений из цикла. Запускаем приложение и смотрим в протокол. Если последний по-прежнему забит ненужными и малоин­формативными функциями, то добавляем их к "черному списку" и повторяем анализ вновь. И так до тех пор, пока рапорт не окажется хотя бы минимально читабельным.

Описанный способ иногда приводит к тупику: когда на первый взгляд беспо­лезная (а в действительности ключевая) функция заносится в "черный список" и выпадает из нашего поля зрения. Но ничего лучшего я предложить не могу.





Дата публикования: 2014-12-08; Прочитано: 242 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...