
Fermion — электронная обёртка для Frida и Monaco.
Fermion — это приложение на Electron, которое оборачивает frida-node и monaco-editor. Оно предоставляет полностью интегрированную среду для прототипирования, тестирования и оттачивания Frida-скриптов через единый интерфейс. С интеграцией Monaco приходят все функции, которые вы ожидаете от Visual Studio Code: линтинг, IntelliSense, горячие клавиши и т.д. Кроме того, Fermion включает определение языка TypeScript для Frida API, поэтому писать Frida-скрипты легко.
Что в имени: Фермион может быть элементарной частицей, такой как электрон, или составной частицей, такой как протон. Фермионы включают все кварки и лептоны, а также все составные частицы, состоящие из нечётного числа этих частиц, например все барионы и многие атомы и ядра.
Скачайте репозиторий и перейдите в папку Fermion в терминале. Затем задайте следующие переменные окружения.
# Windows
set npm_config_runtime=electron
set npm_config_target=21.0.0
# Linux / OSX
export npm_config_runtime=electron
export npm_config_target=21.0.0
После этого установите пакеты, необходимые для запуска Fermion:
npm install
Когда установка завершится, вы можете запустить Fermion, выполнив:
npm start
Выполните описанные выше действия, а затем выполните в терминале следующую команду:
# Windows
electron-packager . --icon .\src\images\fermion-ico.ico
# Linux
electron-packager . --icon ./src/images/fermion-ico.png
# OSX
electron-packager . --icon ./src/images/fermion-ico.icns
Вы можете получить последнюю готовую сборку Fermion для x64 Windows и Linux в релизах.
Fermion появляется сообщение, объясняющее, в чём проблема и как её решить. Однако в общем случае вы можете запустить Fermion или Frida Server от имени root либо выполнить следующую команду: sudo sysctl kernel.yama.ptrace_scope=0.В: Я хочу собрать собственную версию Fermion на основе новой версии Frida/Electron. Как узнать, какие prebuild’s существуют на данный момент?
ELECTRON_TARGETS_DEFAULT и ELECTRON_TARGETS_FREEBSD соответственно.В: Я хочу просмотреть/изменить/обновить определения типов, используемые в редакторе Monaco. Как это сделать?
node_modules/@types/frida-gum/index.d.ts.В: Почему у тебя нет стабильного trace, чувак (╯°□°)╯︵ ┻━┻
hot pointer и/или трассировка создаёт графы с тысячами узлов, то, скорее всего, trace window будет подтормаживать при получении данных. Кроме того, как и любой вид трассировки, это может вызывать нестабильность процесса, сбои или зависания.Пример работы Fermion вы можете увидеть ниже; в данном случае он инструментирует kernel32!ReadFile.

Fermion поддерживает автодополнение, линтинг и символы Frida API.

Fermion может подключаться к серверу Frida для отладки удалённых приложений с помощью контекстного меню device. Во многих случаях, например при отладке через USB или при подключении к мобильным приложениям через эмуляторы вроде genymotion, Fermion автоматически обнаружит доступный сервер. Однако также можно указать удалённый сервер, используя комбинацию IP и Port.

Fermion имеет встроенную поддержку трассировки потоков CALL tracing.

Это может работать не совсем так, как вы ожидаете. Когда вы задаёте pointer или комбинацию module/Symbol, трассировщик выполняет attach к этому месту, и каждый раз, когда thread выполняет код в этом месте, он начинает трассировать все инструкции CALL, которые поток выполняет, пока не вернётся обратно. Это означает, что разные выполнения могут генерировать разные графы; это также означает, что вы можете не увидеть всё, что делает функция (например, если внутри функции порождается другой поток).

Fermion преобразует эти трассировки в формат Graphviz SVG с помощью dot, который вы затем можете исследовать. Это функция, которая иногда оказывается полезной при исследовательской работе (Что делает функция? Насколько сложно её выполнение?). Тем не менее, это prototype-функция, которую я построил поверх Fermion, и ей, вероятно, нужно ещё немного доработки, чтобы стать более готовой к продакшену.
Fermion также имеет встроенную документацию по JavaScript API Frida. Как и все остальные, я не всегда помню, как всё работает, а наличие документации в приложении избавляет от необходимости держать открытым окно браузера.

Более подробную информацию об изменениях в конкретных версиях вы найдёте в журнале изменений.
Если вы интегрировали Fermion в свой рабочий процесс и находите его полезным, я призываю вас создавать pull requests, отправлять отчёты об ошибках и запрашивать новые функции для улучшения приложения. Я не совсем Node-разработчик, поэтому уверен, что люди найдут способы оптимизировать и переработать некоторые компоненты.
Frida v15.0+.Я просто хочу выразить особую благодарность!