
Frida 17
Migrate and validate Frida JavaScript against Frida 17 APIs before hooking or shipping instrumentation scripts.
Overview
Frida-17 is an agent skill most often used in Build (also Ship) that detects Frida 17–incompatible JavaScript APIs and guides replacements for Module, Memory, and Process usage.
Install
npx skills add https://github.com/yfe404/frida-17-skill --skill frida-17What is this skill?
- Flags static Module APIs removed in Frida 17 (May 2025) and maps each to Process or instance-method replacements
- Covers Module, Memory, and Process breaking-change patterns from the Frida 17 scripting guide
- Documents find/get and enumerate patterns via Process.findModuleByName and Module instance methods
- Surfaces common naming conflicts when porting scripts from pre-17 Frida versions
- Use while writing, reviewing, or fixing scripts—not only after a runtime failure
- Targets Frida 17.0.0 released May 2025
- Documents breaking changes across Module, Memory, and Process API areas
- Maps removed static Module methods to Process and per-module instance calls
Adoption & trust: 893 installs on skills.sh; 5 GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
Your Frida scripts still use pre-17 static Module and Memory calls and break after upgrading to Frida 17 without a systematic migration map.
Who is it for?
Solo builders maintaining Frida hooks, mobile security scripts, or agent-assisted porting from older Frida releases.
Skip if: Teams with no Frida workflow, pure static analysis-only pipelines, or apps that never use dynamic instrumentation.
When should I use this skill?
Writing, reviewing, or fixing Frida scripts, especially when migrating from older Frida versions.
What do I get? / Deliverables
After the skill runs, scripts align with Frida 17 instance and Process APIs so hooks resolve modules and exports reliably during development and review.
- Frida 17–compatible script patterns and replacement snippets
- Review notes listing deprecated API usage and fixes
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Canonical shelf is Build because the skill is invoked while authoring or refactoring Frida scripts and hook integrations, which is core implementation work for mobile and native tooling. Integrations fits dynamic instrumentation that binds to modules, memory, and process APIs in target apps rather than generic app UI or backend CRUD alone.
Where it fits
Draft a new libc hook using Process.getModuleByName and instance export lookups instead of removed static Module helpers.
Review a teammate’s Frida script in CI before shipping an internal test build with instrumentation enabled.
Patch production-debug hooks that failed after the lab upgraded Frida to 17.0.0.
How it compares
Use as a Frida-version migration checklist instead of guessing API renames from scattered release notes in chat.
Common Questions / FAQ
Who is frida-17 for?
It is for developers and indie security researchers who write or review Frida JavaScript and need Frida 17–compatible Module, Memory, and Process patterns.
When should I use frida-17?
Use it in Build while writing new hooks, in Ship during script review before release, and in Operate when fixing broken instrumentation after upgrading Frida past May 2025.
Is frida-17 safe to install?
Treat it as procedural documentation for your agent; review the Security Audits panel on this Prism page and inspect the skill bundle before granting shell or device access.
SKILL.md
READMESKILL.md - Frida 17
# Frida 17 Scripting Guide This skill helps write and fix Frida scripts compatible with Frida 17.0.0 (released May 2025). ## Breaking Changes in Frida 17 ### 1. Static Module Methods - REMOVED ```javascript // OLD - No longer works in Frida 17 Module.findBaseAddress('libriver.so') Module.getBaseAddress('libriver.so') Module.findExportByName(null, 'open') Module.findExportByName('libc.so', 'open') Module.getExportByName(null, 'open') Module.ensureInitialized('libc.so') Module.enumerateExports('libc.so') Module.enumerateSymbols('libc.so') // NEW - Use Process and instance methods instead var lib = Process.findModuleByName('libriver.so'); // returns Module or null var lib = Process.getModuleByName('libriver.so'); // throws if not found lib.base // module base address lib.findExportByName('open') // returns address or null lib.getExportByName('open') // throws if not found lib.enumerateExports() // returns array lib.enumerateSymbols() // returns array ``` ### 2. Static Memory Methods - REMOVED ```javascript // OLD - No longer works Memory.readU32(ptr) Memory.writeU32(ptr, value) // NEW - Use NativePointer instance methods ptr.readU32() ptr.writeU32(value) ``` ### 3. Legacy Enumeration APIs - REMOVED ```javascript // OLD - Callback style removed Process.enumerateModules({ onMatch: fn, onComplete: fn }) Process.enumerateModulesSync() // NEW - Returns array directly Process.enumerateModules() ``` ### 4. Reserved Function Names - DO NOT OVERRIDE The following are built-in Frida functions. Defining custom functions with these names causes: `TypeError: cannot define variable 'hexdump'` **Reserved names:** - `hexdump` - Use `dumpHex` instead for custom hex dump functions - `ptr` - pointer constructor shorthand - `NULL` - null pointer constant ```javascript // BAD - conflicts with built-in function hexdump(ptr, len) { ... } // GOOD - use different name function dumpHex(ptr, len) { ... } ``` ## NativePointer Methods (Valid in Frida 17) **Conversion:** - `toInt32()` - cast to signed 32-bit integer - `toNumber()` - convert to JavaScript number - `toString([radix])` - convert to string **NOT available:** - `toUInt32()` - DOES NOT EXIST, use `toInt32()` for sizes < 2^31 **Memory reading:** - `readU8()`, `readS8()`, `readU16()`, `readS16()` - `readU32()`, `readS32()`, `readU64()`, `readS64()` - `readByteArray(length)` - returns ArrayBuffer - `readPointer()`, `readCString()`, `readUtf8String()` **Memory writing:** - `writeU8(value)`, `writeS8(value)`, etc. - `writeByteArray(bytes)` - bytes must be ArrayBuffer or JS array - `writePointer(ptr)`, `writeUtf8String(str)` **Pointer arithmetic:** - `add(rhs)`, `sub(rhs)`, `and(rhs)`, `or(rhs)`, `xor(rhs)` - `shr(n)`, `shl(n)`, `not()` - `isNull()`, `equals(rhs)`, `compare(rhs)` ## Java Bridge API (Unchanged in Frida 17) ```javascript Java.perform(function() { var MyClass = Java.use('com.example.MyClass'); // Hook with overload MyClass.myMethod.overload('int', 'java.lang.String').implementation = function(a, b) { console.log('Called with: ' + a + ', ' + b); // Call original return this.myMethod.overload('int', 'java.lang.String').call(this, a, b); }; // Hook all overloads MyClass.myMethod.overloads.forEach(function(overload) { overload.implementation = function() { return overload.apply(this, arguments); }; }); }); ``` **Java byte[] handling:** Java byte arrays cannot be passed directly to `Memory.al