Разработчики проекта Frida (http://www.frida.re/), в рамках которого развивается платформа для динамической трассировки и анализа приложений, представили (http://www.frida.re/news/2014/08/25/frida-1-6-3-released/) релиз 1.6.3 и новый графический отладчик CryptoShark (https://github.com/frida/cryptoshark), основанный на технологиях Frida. По решаемым задачам Frida напоминает DTrace в пространстве пользователя, но для написания скриптов для трассировки и обработки статистики выполнения приложения применяется язык JavaScript. По сути Frida является аналогом Greasemonkey для нативных программ, позволяя контролировать работу программы во время её выполнения также, как Greasemonkey даёт возможность контролировать обработку web-контента.
Трассировка программ поддерживается на платформах Linux, Windows, OS X и iOS. Простейшие сценарии трассировки могут выполняться (http://www.frida.re/docs/quickstart/) при помощи утилиты frida-trace (например, "frida-trace -i 'recv*' -i 'read*' Skype"), для более сложных сценариев предлагается подключать обработчики на языке JavaScript. Подобные обработчики имеют полный доступ к памяти процесса, могут перехватывать обращение к функциям и вызывать реализованные в приложении функции из JavaScript-кода. Таким образом в обработчиках может быть организовано двунаправленное взаимодействие с процессом.Доступность Python-биндинга (https://github.com/frida/frida-python) позволяет использовать язык Python для создания утилит и надстроек над Frida API (скрипты, контролирующие выполнение программы создаются только на JavaScript). Одним из перспективных направлений использования Frida является создание средств для анализа и разбора проприетарных криптографических протоколов и API.
CryptoShark является кроссплатформенной графической надстройкой над Frida, предоставляющей удобный интерфейс для отладки произвольных процессов с использованием техники динамической рекомпиляции. Работа осуществляется на уровне машинного кода, без необходимости наличия отладочной информации или исходных текстов. Поддерживается установка тегов на вызовы API, отображение данных о вызываемых функциях в режиме реального времени, подстановка вызовов для детального журналирования действий.<center><iframe width="640" height="360" src="//www.youtube.com/embed/hzDsxtcRavY?rel=0" frameborder="0" allowfullscreen></iframe></center>
Базовые компоненты Frida написаны с использованием языков Си и Vala. Для обработки JavaScript применяется движок V8. Отладчик CryptoShark написан на языке C++ и использует для построения интерфейса библиотеку Qt5, а для дизассемблирования - фреймворк Сapstone (https://github.com/aquynh/capstone). Исходные тексты всех компонентов проекта распространяются (https://github.com/frida/) под свободной лицензией wxWindows Library Licence (http://en.wikipedia.org/wiki/WxWindows_Library_Licence#License) (вариант LGPL, не накладывающий ограничений на условия распространения бинарных сборок производных работ).
URL: http://www.frida.re/news/2014/08/25/frida-1-6-3-released/
Новость: http://www.opennet.me/opennews/art.shtml?num=40455
Так и не понял зачем это нужно
я так понял что это для живого перехвата и модификации функций
Ну это понятно, юзкейс то какой
Продвинутое изучение активности в системе с трассировкой/профилировкой?
Для реверс-инжиниринга.
чтобы отлаживать native я должен знать етот ваш жабаскрипт??
> чтобы отлаживать native я должен знать етот ваш жабаскрипт??не должен. Вот лично прям ты можешь отлаживать прямо в hex
> не должен. Вот лично прям ты можешь отлаживать прямо в hexНу вообще-то большинство системного софта на си и было бы очень кстати если бы и остальное делалось на нем же или чем-то похожем. Разучивать 2 сильно разных ЯП - таки криво.
Никто не заставляет тебя юзать этот отладчик для отладки натива.Мне тоже решение показалось странным, но, очевидно, разработчики решили не придумывать свой собственный NIH-скриптовый язык, чтобы его можно было использовать в дебаггере, а решили взять уже распространённый скриптовый язык (а это чаще всего либо Lua, либо JS, т.к. для них библиотеки-интерпретаторы есть).
> а решили взять уже распространённый скриптовый язык (а это чаще всего
> либо Lua, либо JS, т.к. для них библиотеки-интерпретаторы есть).Лучше бы Python взяли.
>> а решили взять уже распространённый скриптовый язык (а это чаще всего
>> либо Lua, либо JS, т.к. для них библиотеки-интерпретаторы есть).
> Лучше бы Python взяли.Python тоже есть, вот пример из официальной документации:
"import frida
p = frida.attach("cat")
print([x.name for x in p.enumerate_modules()])"