Что такое трассировка системы на Андроид realme

Содержание

Оптимизация производительности Android: используйте TraceView, чтобы найти виновника Caton

  • предисловие
  • Что такое TraceView
  • Создать файл трассировки
  • Используйте код для генерации файлов трассировки
  • Используйте Android Studio для генерации файлов трассировки
  • Используйте DDMS для генерации файлов трассировки
  • Решение состоит в том, чтобы напрямую использовать TraceView в SDK

предисловие

Прочитайте статью сегодня«Оптимизация производительности Android (1) ускорение запуска 35%»Очень хорошо, если вам интересно, вы можете посмотреть.

Чтобы определить проблему трудоемкого запуска, автор использовал TraceView.

Я знал это раньше, но я не использовал этот инструмент. Сегодня я буду изучать его со всеми (ง • ̀_ • ́) ง.

Что такое TraceView

TraceView — это инструмент, встроенный в Android SDK, его можно загрузитьtrace Документы, отображаемые графическиВремя выполнения кода, номер и стек вызововДля облегчения нашего анализа.

Как ускорить телефон ? Отключи эти настройки смартфона и телефон перестанет тормозить

Файл трассировки является своего рода файлом информации журнала, который может быть сгенерирован кодом, Android Studio или DDMS.

Используя инструменты, предоставляемые Android SDK, можно сгенерировать множество файлов журналов, чтобы мы могли проанализировать текущую память приложения, макет и т. Д. Ниже приведены скриншоты нескольких файлов:

shixinzhang

Во многих случаях телефон зависает, потому что операция занимает слишком много времени. Слишком больно находить виновника в огромном коде. В это время должно быть отражено значение TraceView.

Создать файл трассировки

Существует три способа создания файлов трассировки:

  1. Используйте код
  2. Используйте Android Studio
  3. Используйте DDMS

1. Используйте код для генерации файлов трассировки

Код очень прост. Когда вы вызываете начальный код, система создает файл трассировки и генерирует данные трассировки. Когда вы вызываете код завершения, данные трассировки будут записаны в файл трассировки.

Затем с помощью команды adb экспортируйте файл трассировки на компьютер:

Преимущество использования кода для генерации трассировки состоит в том, что легко контролировать начало и конец трассировки. Недостатком является то, что шаги немного больше.

2. Используйте Android Studio для генерации файлов трассировки

Android Monitor, встроенный в Android Studio, может легко генерировать файлы трассировки на компьютер.

В столбце, контролируемом процессором, будет кнопка, похожая на тревогу, которая отображается серым цветом, когда приложение не запускается:

shixinzhang

После запуска приложения эта кнопка станет ярче, и нажмите, чтобы начать трассировку, что эквивалентно коду, вызывающему startMethodTracing:

Скрытая Настройка Которая УСКОРЯЕТ ЛЮБОЙ ТЕЛЕФОН В 2 РАЗА

shixinzhang

Нажмите кнопку еще раз, чтобы завершить трассировку, и файл трассировки будет создан.

График трассировки, автоматически загружаемый Android Studio после генерации трассировки, выглядит следующим образом:

shixinzhang

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

Вы можете переключать различные потоки в верхнем левом углу, что фактически является недостатком прямого использования Android Studio для просмотра файла трассировки:Время выполнения разных потоков нельзя сравнивать визуально.

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

shixinzhang

3. Используйте DDMS для генерации файлов трассировки

DDMS — это Dalvik Debug Monitor Server, который является средством отладки и мониторинга Android и предоставляет нам снимки экрана, просмотр журналов, уровни просмотра и использование памяти. Можно сказать, что он является предшественником Android Monitor, встроенного в Android Studio сегодня.

Дважды щелкните по Shift, чтобы вызвать глобальный поиск, для поиска «Android Device Monitor»:

shixinzhang

Или напрямую установите сочетание клавиш Android Device Monitor в настройках:

shixinzhang

Откройте Android Device Monitor, откройте файл трассировки в DDMS, DDMS запустит TraceView для загрузки файла трассировки:

shixinzhang

Рисунок выше представляет схему TraceView:

  • Верхняя часть показываетВремя выполнения разных потоков
  • Разные цвета указывают на разные методы
  • Чем дольше тот же цвет, тем дольше время выполнения, как показано в главном потоке
  • Пробел указывает на то, что в этот период нет содержимого выполнения
  • Cpu Time / Call: этот метод усредняет процессорное время
  • Real Time / Call: среднее время выполнения, включая время переключения и блокировки,> = время процессора
  • Звонки + повторные звонки / итого: звонки, время рекурсии

Нажмите любой из методов ниже, чтобы увидеть подробную информацию:

  • Родители: где вызвать выбранный метод
  • Дети: метод, вызываемый выбранным методом

shixinzhang

Найдите проблемы на основе отображаемого содержимого TraceView

Как использовать TraceView при поиске проблем:

  • Посмотрите из верхней части, какие потоки выполняются долго? Когда начнется казнь? Чередовать время с основным потоком?
  • Какие методы требуют много времени для выполнения
  • Нажмите на процессор / время вызова в TraceView и сортируйте время процессора от высокого до низкого
  • Нажмите на Calls + Recur Calls / Total в TraceView, отсортированные по количеству звонков сверху вниз

После сортировки затем проверьте, есть ли код проекта или код зависимой библиотеки один за другим. Если это так, нажмите, чтобы просмотреть подробные сведения, чтобы выяснить, является ли этот метод или вспомогательный метод вызова, проблемой, и дополнительно найти проблему.

Решите проблему, что TraceView в DDMS не может быть найден и не может быть найден

В Traceview слишком много информации, и вы можете воспользоваться поиском внизу, чтобы найти:

shixinzhang

Тем не менее, TraceView в DDMS содержит ошибки, а поиск недоступен. Многие люди подали проблему в Google в течение 5 лет, и она не была решена. ╮ (╯_╰) ╭:

shixinzhang

(Фото взято с:https://code.google.com/p/android/issues/detail?id=38825)

Решение состоит в том, чтобы использовать TraceView в SDK напрямую:

Откройте TraceView в SDK напрямую:

这里写图片描述

Затем откройте файл трассировки, сгенерированный ранее:

shixinzhang

Если вам не удается открыть трассировку напрямую, вы можете открыть ее через командную строку traceview:

shixinzhang

Хотя подсказка устарела, поиск по крайней мере легче, чем Android Device Monitor.

Сценарии использования TraceView

Когда страница или операция застряли, вы можете использовать TraceView, чтобы найти код проблемы.

Например, запуск, загрузка списка картинок и т. Д.

подводить итоги

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

Еще один момент, не оптимизировать преждевременно!

Связанное Чтение

Добро пожаловать на сканирование и следите за моей публичной учетной записью WeChatAndroid Evolution, Станьте лучшим программистом (ง • ̀_ • ́) ง вместе!

Xiaomi mi 11 lite 5g ne Алиэкспресс

这里写图片描述

Thanks

(function() < function setArticleH(btnReadmore,posi)< var winH = $(window).height(); var articleBox = $(«div.article_content»); var artH = articleBox.height(); if(artH >winH*posi)< articleBox.css(< ‘height’:winH*posi+’px’, ‘overflow’:’hidden’ >) btnReadmore.click(function()< articleBox.removeAttr(«style»); $(this).parent().remove(); >) >else < btnReadmore.parent().remove(); >> var btnReadmore = $(«#btn-readmore»); if(btnReadmore.length>0)< if(currentUserName)< setArticleH(btnReadmore,3); >else < setArticleH(btnReadmore,1.2); >> >)()

Источник: russianblogs.com

что такое трассировка на телефоне

Настройки, которые используются для отладки и для разработки приложений, спрятаны в вашем телефоне – спрятаны в прямом смысле слова. Многие из нас идут в соответствующий раздел меню, чтобы запустить отладку USB или переключиться к рабочему модулю ART, но кроме этого, здесь имеется целый список настроек. Большая часть никогда вам не понадобится, но разве не интересно узнать, что скрывается в недрах вашего устройства?

«Разблокируем» функции разработчика в телефоне

Как говорилось выше, эти функции изначально скрыты. Это имеет смысл, поскольку найти их просто, а большинству людей они попросту не нужны. Для того, чтобы добраться до них, идем в раздел «Об устройстве» и ищем там пункт «Номер сборки». После пяти быстрых тапов появляется диалоговое окно – теперь устройство считает вас разработчиком. Только попробуйте ничего не испортить, ладно?

Ну, или делайте что хотите – тоже вариант. Так или иначе, возможность заставить ваш телефон перестать работать всегда имеется.

А теперь посмотрим на предложенные функции повнимательнее.

Настройки

Понятно, что большинству пользователей все эти настройки ни на что не сдались. Кроме того, лезть туда и нажимать на пункты меню ради самого процесса — не лучшая идея. Но всегда стоит знать, что вообще можно сделать, хотя бы и просто для того, чтобы не делать этого никогда.

Надеемся, что наш рассказ просветил вас немного по вопросу этих настроек и опций, записанных непонятными словами. Кстати, в зависимости от выбранного языка системы, производителя и версии ОС Android, набор пунктов может несколько отличаться разделами и их названиями.

Трассировка системы Android — что это и зачем нужно?

Кто и как пользуется функцией трассировки системы Android?

Трассировка системы Android на смартфоне — инструмент, позволяющий пошагово рассмотреть все процессы, которые запущены на устройстве. Эта возможность доступна в разделе для разработчиков. О том, что конкретно представляет из себя трассировка и зачем она нужна, расскажем далее.

Что такое трассировка системы Android?

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

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

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

Более подробный обзор полезных функций режима разработчика на смартфоне читайте здесь.

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

У тебя повысится производительность

У меня нет трассировки системы,почему?

Через Activity открывается.

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

Это не приложение, а часть системы Android. Удалить это нельзя технически, да и памяти это вам не прибавит)

Как разогнать Android-смартфон через меню разработчиков

Медлительность Android по сравнению с iOS всегда была мифом, в который почему-то верили миллионы человек. Просто дизайнеры Apple скрыли задержку от запуска приложения до его фактического открытия анимацией, а в Google до этого не додумались. Таким же мифом является склонность Android к засорению и замедлению через какое-то время после начала использования.

Дескать, системные кластеры забиваются и уже не могут обеспечивать былой уровень быстродействия. Вот только никто не говорит, что обычно «замедляются» именно старые устройства и только в сравнении с новыми. Но это не значит, что разогнать Android нельзя совсем. Можно.

Разогнать Android можно. Для этого в настройках ОС есть специальные параметры

В Android есть так называемое меню разработчиков. Несмотря на то что оно действительно предназначается для создателей программного обеспечения, рядовые пользователи очень любят включать его, а потом что-то там настраивать и менять, якобы улучшая работу своего устройства. Зачастую это, само собой, совершенно не так. Однако есть несколько надстроек, которые могут позволить хоть немного, но ускорить Android, сделав его чуть отзывчивее, быстрее и податливее. Главное – не переборщить.

Настройки разработчика Android

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

Елочные игрушки Алиэкспресс отзывы

Все необходимые параметры скрыты в меню разработчиков

Активируйте три этих параметра и отключите анимацию

Как ускорить Android

Разогнать Android можно и в играх, и при работе с интерфейсом

Эти три параметра действительно способны разогнать интерфейс вашего смартфона. Вот как это происходит:

Ускорение работы GPU активирует графический ускоритель при отрисовке двумерных элементов. Казалось бы, зачем вообще это нужно? А, между тем, весь интерфейс вашего смартфона и большинство сайтов целиком состоят из 2D-элементов. Активировав ускорение, вы заставите смартфон задействовать графический сопроцессор при обработке всех этих компонентов, а поскольку их в повседневной жизни встречается довольно много, то и прирост быстродействия будет заметен в большинстве задач.

Включение параметра 4x MSAA способно напрямую повлиять на ваше восприятие игр. Независимо от того, двумерная или трёхмерная игра запущена на вашем устройстве, этот пункт повышает контурную детализацию, минимизируя рябь и подёргивания на краях рисованных объектов. В результате создаётся ощущение более плавной обработки видимых графических компонентов. Если хотите, это совсем дешёвый аналог режима 120 Гц, повышающего частоту обновления и делающего картинку более плавной.

Повысить быстродействие смартфона

Ускорить даже интерфейс Android — это уже большое дело

Отключение аппаратного наложения позволяет задействовать графический сопроцессор при отрисовке компонентов экрана, за счёт чего высвобождается ресурс центрального процессора, и он больше не нагружается в базовых задачах. Может показаться, что этот параметр полностью противоречит первому, но это не совсем так. Вернее, совсем не так. Просто они отвечают за разные процессы.

Смените раскрытые пароли. Что это значит и как реагировать

Изменение скорости анимации – это чисто визуальный, или, если хотите, косметический показатель. В действительности он не повышает скорость запуска приложений, просто он удаляет анимацию, которая по умолчанию заполняет «пустоту» от момента запуска приложения до момента его активации. Но если раньше такая пустота действительно была, и её требовалось чем-то заполнять, то современные смартфоны её практически не допускают. В результате кажется, что приложения из-за анимации запускаются чуть дольше.

Что нового в системной трассировке Android Studio

Aug 16, 2020 · 5 min read

В Android Studio 4.0 мы пересмотрели UI профайлера (Profiler), чтобы обеспечить интуитивно понятный рабочий процесс записи работы центрального процессора. Мы продолжали вносить улучшения, основываясь на ваших отзывах, и добавили больше функций в версию 4.1.

Альтернативные методы трассировки приложений

Трассировка используется во многих видах ПО: в эмуляторах, динамических распаковщиках, фаззерах. Традиционные трейсеры работают по одному из четырех принципов: эмуляция набора инструкций (Bochs), бинарная трансляция (QEMU), патчинг бинарных файлы для изменения потока управления (Pin), либо работа через отладчик (PaiMei, основанный на IDA). Но сейчас речь пойдет о более интересных подходах.

WARNING

Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

Зачем отслеживать?

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

Поток управления

Отслеживание потока управления помогает понять, что делает бинарник во время исполнения. Это хороший способ работы с обфусцированным кодом. Также, если ты работаешь с фаззером, это поможет с анализом покрытия кода. Или возьмем, например, антивирусное ПО, где трассировщик проследит за исполнением бинарного файла, сформулирует некий паттерн его поведения, а также поможет с динамической распаковки исполняемого файла.

Трассировка может происходить на разных уровнях: отслеживание каждой инструкции, базовых блоков либо только определенных функций. Как правило, она осуществляется путем пред/постинструментации, то есть патчинга потока управления в наиболее «интересных» местах. Другой метод состоит в том, чтобы просто приаттачить отладчик к исследуемой программе и обрабатывать ловушки и точки останова. Однако есть еще один не очень распространенный способ — задействовать функции центрального процессора. Одна из интересных возможностей процессоров Intel — флаг MSR-BTF, который позволяет отслеживать выполнение программы на уровне базовых блоков — на ветвлениях (бранчах). Вот что говорится по поводу данного флага в документации:

«Когда ПО устанавливает флаг BTF в MSR-регистре MSR_DEBUGCTLA и устанавливает флаг TF в регистре EFLAGS, процессор будет генерировать отладочное прерывание только после встречи с ветвлением или исключением.»

Поток данных

В этом сценарии трассировка применяется для распаковки кода, а также для наблюдения за обработкой ценной информации — во время его можно обнаружить неправильное использование объектов, переполнения и прочие ошибки. Кроме того, оно также может использоваться для сохранения и восстановления контекста в процессе трассировки. Обычно это делается так: исследуемая библиотека полностью дизассемблируется, после этого в ней локализуются все инструкции чтения/записи, а затем в процессе выполнения кода происходит их парсинг и определяется адрес назначения. Есть и другой вариант — с помощью соответствующей API-функции устанавливается защита виртуальной памяти, после чего отслеживаются все нарушения доступа к ней. Реже используется метод, когда в памяти изменяется таблица страниц.

Рис. 1. Трансляция виртуальных адресов в физические

Другие статьи в выпуске:

Хакер #181. Вся власть роботам!

  • Содержание выпуска
  • Подписка на «Хакер» -60%

Взаимодействие с ОС

Мониторинг взаимодействия с ОС позволяет отфильтровывать попытки доступа к реестру, контролировать изменения файлов, отслеживать взаимодействие процесса с различными системными ресурсами, а также вызовы определенных API-функций. Как правило, это реализуется через перехват API-функций, путем вставки «трамплинов», inline-хуков, модификацию таблицы импорта, установку брейкпоинтов. Другой вариант — задействовать системный вызов SYSCALL. Ведь если вспомнить, то каждая API-функция, которая вносит какие-то изменения в ОС, на самом деле представляет собой не что иное, как простую обертку для определенного системного вызова.

Рис. 2. Нумерация идентификаторов (ID) SYSCALL в Windows 8

Механизм SYSCALL представляет собой быстрый способ переключить CPL (Current Privilege Level) из режима пользователя в режим супервайзера, таким образом, приложение режима пользователя может вносить изменения в ОС (рис. 4).

Рис. 4. Обработка операций SYSCALL (по учебнику Intel)

Погружаемся в ядро

Для выполнения упомянутых функций необходимо опуститься на уровень ядра (ring 0). Однако в режиме супервайзера уже появляется доступ к некоторым функциям, предоставляемым самой операционной системой: LoadNotify , ThreadNotify , ProcessNotify . Их использование помогает собрать информацию по загрузке и выгрузке для целевого процесса, такую как: список модулей, диапазоны адресов стека какого-либо потока, список дочерних процессов и прочее.

Вторая группа функций включает в себя дампер памяти, использующий MDL (memory descriptor list — список дескрипторов памяти), монитор памяти процессов, основанный на VAD (Virtual Address Descriptor), монитор взаимодействия с системой, который задействует nt!KiSystemCall64 , перехват доступа к памяти и ловушкам через IDT (Interrupt Descriptor Table).

Монитор памяти использует для своей работы VAD-дерево, которое представляет собой AVL-дерево, используемое для хранения информации об адресном пространстве процесса. Оно же используется, когда необходимо инициализировать PTE (Page Table Entry) для конкретной страницы памяти.

Рис. 3. Пример VAD-дерева

Как я предложил выше, отслеживание доступа к памяти может осуществляться через механизм защиты памяти (такая вот тавтология), но его реализация в режиме пользователя с помощью API-функций может слишком сильно отразиться на производительности. Однако если принять во внимание, что защита памяти основана на механизме MMU — пейджинге, то есть более простой способ: изменять таблицу страниц в режиме ядра, после чего нарушение режима доступа к памяти будет обрабатываться через генерацию процессором исключения PageFault, а управление будет передаваться на обработчик IDT[PageFault]. Установка перехватчика на обработчик PageFault позволит быстро получить сигнал о запросе на доступ к выбранным страницам.

Лучшие пиджаки на Алиэкспресс

INFO

Дереву VAD посвящена очень интересная статья Брендана Долан-Гэвитта «The VAD tree: A process-eye view of physical memory5».

Все потому, что процесс может использовать только страницы памяти, помеченные как Valid (то есть выгруженные в память), в противном же случае будет возникать исключение PageFault, которое и будет перехватываться. Это означает, что если мы намеренно поставили Valid-флаг выбранной страницы памяти в значение invalid(0), то каждая попытка доступа к этой странице будет вызывать обработчик PageFault, что позволяет легко отфильтровать и обработать соответствующий запрос (вызывая callback к трейсеру и выставляя Valid-флаг для конкретного PTE).

Рис. 5. Флаги PTE

Копаем глубже — идем в VMM!

В предыдущем разделе я предложил некоторые «грязные» методы для режима ядра. Вообще, установка хуков — это неправильный способ, и мне он не нравится, точно так же, как не нравится он и ребятам из Microsoft. Для борьбы с такими методами мелкомягкие и разработали PatchGuard. К счастью, есть и другой способ для отлова PageFaults, ловушек или SYSCALL’ов — это гипервизор. Правда, данный вариант имеет как свои плюсы, так и свои минусы.

Минусы:

  • Виртуализировано не отдельное приложение, а вся система — на уровне ядра ЦП.
  • Оператор switch( VMMExit ) отбирает немного производительности, равно как и код гипервизора, выполняющийся для каждого из вариантов switch’а.

Плюсы:

  • Более высокий уровень прав, чем уровень супервайзера, а также целый набор callback’ов, предоставляемый технологией виртуализации.

При этом сам VMM (Virtual Machine Monitor) может быть минималистичным (микроVMM) и реализовывать только необходимую обработку, занимая при этом минимальный объем кода (пример).

Рис. 6. Некоторые callback’и, предоставляемые Intel VTx

Помимо всего, в данном случае вместо того, чтобы ставить хуки на IDT, можно все обрабатывать напрямую с помощью дебаг-исключения в VMM. То же самое относится и к перехвату ошибок страниц с помощью исключения PageFault в VMM или через реализацию EPT (Extended Page Table).

Рис. 7. Включаем вывод VMX для ловушек и сбоев

Подводные камни VMM

Можно отметить некоторые основные особенности описанного подхода:

  • целевой файл остается практически неизмененным:
  • для отслеживания (как пошагового, так и на уровне ветвлений) внедряется флаг TRAP;
  • адресные брейкпоинты через 0xCC или использование DRx;
  • мониторинг памяти путем изменения таблицы страниц процесса;
  • не нужно патчить бинарный файл;

Выделение трейсера из пространства целевого процесса в другой процесс дает несколько преимуществ: можно использовать его как отдельный модуль, можно сделать биндинги для Python, Ruby и других языков. Однако у этого решения есть и недостаток — очень большой удар по производительности (взаимодействие между процессами: чтение из памяти другого процесса, событийный механизм ожидания). Для ускорения трассировки необходимо перенести логику в адресное пространство целевого процесса, чтобы можно было быстро получать доступ к его ресурсам (памяти, стеку, содержимому регистров), а также опционально отказаться от VMM из-за негативного влияния обработки VMMExit на производительность и вернуться обратно к установке хуков для ловушек и обработчиков PageFault. Но с другой стороны, в будущих процессорах технологии виртуализации, наверное, станут более эффективными и не будут оказывать настолько большого влияния на производительность. К тому же возможности виртуализации для трассировки можно использовать гораздо шире, чем мы рассматриваем в рамках статьи, поэтому плюсы могут компенсировать снижение производительности.

Трейсер для ядра

Что касается трассировщика для ядра, то здесь действуют все те же принципы:

  • отслеживание через ловушки (TRAP);
  • мониторинг памяти через изменение таблицы страниц;
  • callback’и трейсера передаются в приложения уровня пользователя;
  • не нужно патчить бинарные файлы целевого приложения.

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

С другой стороны, за все эти возможности тоже приходится расплачиваться:

  • адресное пространство драйвера принадлежит не ему;
  • фаззинг в памяти — не такое уж простое дело;
  • неверное значение RIP, регистров, памяти. манипулирование ими может очень плохо закончиться;
  • необходимо четко представлять себе, что именно ты отслеживаешь или проверяешь;
  • необходимо в течение всего процесса трассировки помнить о многочисленных IRQL;
  • обработка исключений.

Отделение от целевого процесса, а также инкапсуляция в модуль дают нам высокую масштабируемость и возможность совместной работы с другими модулями для создания более сложного инструмента. Таким образом, в случае реализации трейсера, например, на Python, можно будет использовать IDA Python, привязки LLVM, Dbghelp для отладочных символов, дизассемблеры (движки capstone и bea) и многое другое. Чтобы показать, насколько легко и быстро можно реализовать трассировщик на Python, приведу пример, в котором контролируется более трех вариантов доступа (RWE) в заданную область памяти:

target = tracer.GetModule(«codecoverme») dis = CDisasm(tracer) for i in range(0, 3): print(«next access») tracer.SetMemoryBreakpoint(0x2340000, 0x400) tracer.Go(tracer.GetIp()) inst = dis.Disasm(tracer.GetIp()) print(hex(inst.VirtualAddr), » : «, inst.CompleteInstr) tracer.SingleStep(tracer.GetIp())

Как видишь, код очень лаконичен и понятен.

DbiFuzz-фреймворк

Все рассмотренные выше подходы к трассировке я воплотил в DbiFuzz-фреймворке, который демонстрирует, как можно отслеживать работу исполняемого файла альтернативными методами. Как мы уже отмечали, некоторые из известных методов используют инструментацию, которая дает быстрое решение, но при этом предполагает серьезное вмешательство в целевой процесс и не сохраняет целостности бинарного файла. В отличие от них, DbiFuzz оставляет бинарный файл практически нетронутым, изменяя только PTE, BTF и вставляя флаг TRAP. Другая сторона этого подхода состоит в том, что при интересующем событии включается прерывание: переход ring 3 —ring 0 — ring 3. Так как DbiFuzz подразумевает прямолинейное вмешательство в контекст и поток управления целевого процессора, то его можно использовать для написания собственных инструментов (даже на Python) для доступа к целевому бинарному файлу и его ресурсам.

INFO

Более подробно узнать про DbiFuzz-фреймворк ты можешь на моем сайте, на SlideShare и на портале ZeroNights

Show time

Для многих задач, решаемых с помощью трассировки, может оказаться полезной динамическая бинарная инструментация. Что касается DbiFuzz-фреймворка, то его можно использовать в следующих случаях:

  • когда необходимо отслеживать код на лету;
  • при распаковке бинарного файла, трассировке упаковщика вредоносной программы;
  • для мониторинга обработки конфиденциальных данных;
  • для фаззинга в памяти (легко отслеживать и изменять поток);
  • при использовании в разных инструментах, не обязательно написанных на С.

Нет никаких проблем в запуске DbiFuzz на лету, просто установи ловушку или INT3-перехватчик. Поскольку мы не трогаем бинарный код целевого файла, то не будет никаких проблем с проверкой целостности, а флаг TRAP может быть заменен на MTF. Отслеживание ценных данных тоже не представляет никаких проблем, нужно просто установить соответствующий PTE — и твой монитор готов! Инструменты Python/Ruby/…? Просто создай нужные привязки (bindings) — и вперед!

Конечно, у этого фреймворка тоже есть свои недостатки, но в целом он обладает многими полезными возможностями. И ты всегда можешь поиграть с DbiFuzz, использовать входящие в него инструменты для своих нужд и отслеживать все, что пожелаешь.

Полезные ссылки

Блоги:

  • Трассировка ветвлений при помощи MSR-регистров
  • ExcpHook Monitor

Intel:

  • Расширения для виртуальных машин
  • Мануал для разработчиков ПО

Относительно VAD:

  • Кратко про дескрипторы виртуальных адресов
  • ReactOS

Источник: xakep.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
Китай Покупай