# Frida Workbench for VSCode [**Repository**](https://github.com/chichou/vscode-frida) | [**Issues**](https://github.com/ChiChou/vscode-frida/issues) | [**Install**](https://marketplace.visualstudio.com/items?itemName=CodeColorist.vscode-frida) This is a community contributed project, not affiliated with the official Frida team. It is developed and maintained by [@CodeColorist](https://infosec.exchange/@codecolorist) as an open-source extension for Visual Studio Code to enhance the Frida scripting experience. [中文说明](README.cn.md) ## Prerequisites * Python >= 3.7 * [frida-tools](https://pypi.org/project/frida-tools/) python package ### Optional dependencies * [libimobiledevice](https://github.com/libimobiledevice/libimobiledevice) (for `inetcat` command to start a SSH shell) * iTunes on Windows (for iOS USB connection) If you are on Windows, you need to keep iTunes open in order to interact with iOS devices via USB. ### Install frida-tools Because of [PEP0668](https://peps.python.org/pep-0668/), you might encounter an error when running `pip3 install frida-tools` globally. The recommended way is to open a folder (workspace) in VSCode, then create and activate a virtual environment using the Python extension. In this case, the extension will use your current active Python venv to load frida commands. Alternatively, you can use a package manager like [pipx](https://github.com/pypa/pipx) or [UV](https://docs.astral.sh/uv/guides/tools/) to install it to $PATH, while keeping it isolated. ## Features ![demo](resources/doc/demo.gif) ### Apps and Processes List List apps and processes on connected devices in a sidebar panel. Right-click to attach, attach with elevated privileges for local targets, spawn, spawn in suspended mode, kill processes, or copy device/process info to clipboard. Supports local, USB, and remote devices. Local process entries include best-effort metadata such as executable path, owner, parent PID, and arguments when available. ### Interactive Runtime Panels #### Modules & Exports Browser Browse loaded native modules and their exported functions for any attached process. Filter modules by name, inspect base address, size, and path, then select exports for hook generation. #### Classes & Methods Browser Explore runtime classes and methods for both Java and Objective-C. Filter classes, toggle between own and inherited methods, and batch-select methods for hook generation. Also includes **Objective-C protocol inspection** to browse and analyze protocols. #### Generate Header Dump class headers for reverse engineering: * **Objective-C** — generate header files from runtime class metadata * **Java** — generate decompiled class stubs with package and import statements ### Hook Generation Generate Frida hook code from the Modules and Classes panels: * **Native hooks** — `Interceptor.attach()` with `onEnter` / `onLeave` callbacks for exported functions * **Objective-C hooks** — class and selector based hooks with proper ObjC bridge usage * **Java hooks** — `Java.perform()` / `Java.use()` hooks with method overload support * **AI-powered hooks** — use GitHub Copilot to infer native function signatures (parameter types, return types) and generate type-aware argument logging ### Smart Autocomplete (LSP) Context-aware completions for Frida scripts in JavaScript / TypeScript: * `ObjC.classes.` — completes Objective-C class names * `ObjC.classes.Foo['']` — completes method selectors * `ObjC.classes.Foo.method` — completes class method selectors * `Java.use('')` — completes Java class names * `Process.getModuleByName('')` — completes loaded module names The language server depends on a target process context. You need to create a configuration file `.vscode/frida.json` in your workspace. The easiest way is to right-click a process or app in the sidebar and select **Set LSP Target**, which generates the file automatically. #### `.vscode/frida.json` Configuration The file specifies which device and target the LSP should attach to. It requires a `device` field and exactly one of `app`, `pid`, or `process`. **Attach by app identifier** (recommended — spawns or attaches to the app): ```json { "device": "local", "app": "com.example.myapp" } ``` **Attach by process name:** ```json { "device": "local", "process": "myprocess" } ``` **Attach by PID** (useful when multiple processes share the same name): ```json { "device": "local", "pid": 1234 } ``` The `device` value corresponds to the Frida device ID — `local` for the host machine, `usb` for a USB-connected device, or a `host:port` string for remote devices. The LSP watches this file for changes. Editing or recreating it automatically restarts the language server with the new target. ### Syslog Stream real-time application logs from attached processes. ### Project Scaffolding * **New Agent** — create a new Frida Agent project with TypeScript support * **New C Module** — create a new Frida C Module project * **Download Typings** — download Frida TypeScript type definitions for autocomplete ### Debug Configuration Generate VSCode `launch.json` and `tasks.json` for debugging Frida scripts with breakpoints. ### Android Tools * **Download and start frida-server** on Android device (automatic architecture detection) * **Pull APK** from device (right-click on Android app to pull) ### External Tools Integration * [Objection](https://github.com/sensepost/objection) — Runtime Mobile Exploration ### Shell For Android devices, **Open Shell** is a wrapper for `adb shell`. For iOS it gives an SSH shell on jailbroken devices. May need to configure credentials. ### Remote Device Support Connect to remote Frida devices via `host:port` directly from the sidebar. ## [CHANGELOG](CHANGELOG.md) ## Contributors ![](https://contrib.rocks/image?repo=chichou/vscode-frida)