
Fermion, an electron wrapper for Frida & Monaco.
Fermion은 frida-node와 monaco-editor를 래핑하는 electron 애플리케이션입니다. 단일 UI를 통해 Frida 스크립트를 프로토타이핑하고, 테스트하고, 다듬을 수 있는 완전한 통합 환경을 제공합니다. Monaco가 통합됨에 따라 Visual Studio Code에서 기대할 수 있는 모든 기능(린팅, IntelliSense, 키 바인딩 등)을 사용할 수 있습니다. 또한 Fermion은 Frida API에 대한 TypeScript 언어 정의를 포함하므로 Frida 스크립트를 쉽게 작성할 수 있습니다.
이름에 담긴 의미: 페르미온(Fermion)은 전자와 같은 기본 입자일 수도 있고, 양성자와 같은 복합 입자일 수도 있습니다. 페르미온에는 모든 쿼크와 렙톤은 물론, 이들로 구성된 홀수 개의 복합 입자(모든 중입자와 많은 원자 및 원자핵)가 포함됩니다.
저장소를 다운로드하고 터미널에서 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
x64 Windows 및 Linux용 최신 사전 빌드 Fermion은 releases에서 받을 수 있습니다.
Fermion에 문제가 무엇이고 어떻게 해결할 수 있는지 알려주는 메시지가 표시됩니다. 하지만 일반적으로 Fermion 또는 Frida Server를 root로 실행하거나, 다음 명령 sudo sysctl kernel.yama.ptrace_scope=0을 실행하면 됩니다.Q: 새 버전의 Frida/Electron에 맞춰 Fermion을 직접 빌드하고 싶습니다. 현재 어떤 prebuild가 존재하는지 어떻게 알 수 있나요?
ELECTRON_TARGETS_DEFAULT와 ELECTRON_TARGETS_FREEBSD에서 기본 빌드 버전을 각각 확인할 수 있습니다.Q: Monaco 편집기에서 사용되는 타입 정의를 검토/변경/업데이트하고 싶습니다. 어떻게 할 수 있나요?
node_modules/@types/frida-gum/index.d.ts에서 찾을 수 있습니다.Q: 왜 trace가 안정적이지 않은 거야 (╯°□°)╯︵ ┻━┻
hot pointer를 트레이싱하거나 트레이스가 수천 개의 노드로 구성된 그래프를 생성하는 경우 데이터를 수신하는 동안 trace window가 지연될 가능성이 높습니다. 또한 다른 종류의 트레이싱과 마찬가지로 프로세스 불안정/충돌/멈춤을 유발할 수 있습니다.아래에서 Fermion이 작동하는 예를 볼 수 있습니다. 이 경우 kernel32!ReadFile을 계측(instrumenting)하고 있습니다.

Fermion은 자동 완성, 린팅 및 Frida API 심볼 지원을 제공합니다.

Fermion은 device 컨텍스트 메뉴를 사용하여 Frida 서버에 연결하고 원격 애플리케이션을 디버깅할 수 있습니다. USB 디버깅이나 genymotion 같은 에뮬레이터를 통해 모바일 애플리케이션에 attach하는 경우와 같은 많은 상황에서 Fermion은 사용 가능한 서버를 자동으로 감지합니다. 또한 IP와 Port 조합을 사용하여 원격 서버를 지정하는 것도 가능합니다.

Fermion은 스레드 CALL 트레이싱을 기본적으로 지원합니다.

이 기능은 예상한 것과 정확히 다르게 동작할 수 있습니다. pointer 또는 module/Symbol 조합을 정의하면 트레이서가 해당 위치에 attach하고, thread가 그 위치에서 실행될 때마다 해당 스레드가 반환될 때까지 수행하는 모든 CALL 명령을 추적하기 시작합니다. 즉, 실행할 때마다 다른 그래프가 생성될 수 있으며, 함수가 수행하는 모든 작업을 볼 수 없을 수도 있습니다(예: 함수 내부에서 다른 스레드가 생성되는 경우).

Fermion은 이러한 트레이스를 dot을 사용하여 Graphviz SVG 형식으로 변환하며, 이를 탐색할 수 있습니다. 이 기능은 탐색적 작업(함수가 무엇을 하는가? 해당 실행의 복잡도는 얼마나 되는가?)을 수행할 때 유용하게 사용하는 기능입니다. 다만, 이것은 Fermion 위에 구축한 프로토타입 기능으로, 프로덕션에 가깝게 만들려면 더 많은 개선이 필요할 것입니다.
Fermion에는 Frida의 JavaScript API에 대한 내장 문서도 포함되어 있습니다. 다른 모든 사람들과 마찬가지로 제가 모든 것이 어떻게 작동하는지 항상 기억하지 못하기 때문에, 앱에 문서가 포함되어 있으면 브라우저 창을 열어둘 필요가 없습니다.

버전별 변경 사항에 대한 자세한 내용은 changelog를 참조하세요.
Fermion을 작업 흐름에 통합하고 유용하게 사용하신다면, 애플리케이션 개선을 위해 풀 리퀘스트를 보내고 버그 리포트를 제출하며 기능을 요청해 주시기 바랍니다. 저는 Node 개발자가 아니기 때문에 누군가가 일부 컴포넌트를 최적화하고 재구성할 방법을 찾을 것이라고 확신합니다.
Frida v15.0+에 통합된 새로운 기능을 활용하도록 디바이스 관리자 확장.몇 분께 특별히 감사의 말씀을 전하고 싶습니다!