yfe404/frida-17-skill
Overview
This skill checks and fixes Frida JavaScript scripts for compatibility with Frida 17. It detects removed static APIs, updated NativePointer methods, legacy enumeration patterns, and reserved name conflicts, then suggests or generates correct replacements. Use it to migrate scripts safely and avoid runtime TypeErrors and missing-function errors.
How this skill works
The skill scans script source for deprecated Frida APIs and common anti-patterns introduced by Frida 17 (May 2025). For each match it reports the exact location, explains why the old API breaks, and provides the correct replacement code using Process instance methods, NativePointer instance methods, and modern enumeration returns. It also flags reserved function names and Java byte[] handling issues and offers ready-to-use fixes.
When to use it
- Migrating existing Frida scripts to Frida 17
- Reviewing pull requests or code before running on Frida 17
- Writing new Frida scripts and wanting future-proof patterns
- Debugging TypeError or missing API failures after upgrading Frida
- Converting callback-style enumerations to array-return style
Best practices
- Replace static Module.* calls with Process.getModuleByName()/findModuleByName() and use the returned Module instance methods
- Use NativePointer instance methods (ptr.readU32(), ptr.writeU32()) instead of Memory.* static functions
- Prefer Process.enumerateModules() and other array-returning APIs over legacy callback-style enumerations
- Avoid defining functions named hexdump, ptr, or NULL; use distinct helpers like dumpHex
- When handling Java byte[] convert to a JS array or iterate to build hex strings instead of passing directly to writeByteArray
Example use cases
- Automatically convert Module.findBaseAddress('lib') to Process.getModuleByName('lib').base in a codebase
- Fix Memory.read/write usages to ptr.readU32()/ptr.writeU32() across multiple scripts
- Flag and rename user-defined hexdump functions to avoid built-in name conflicts
- Detect callback-style Process.enumerateModules({onMatch,onComplete}) and replace with Process.enumerateModules() usage
- Provide a snippet to convert Java byte[] into a JS-safe hex or ArrayBuffer for writeByteArray
FAQ
It can generate precise replacement snippets and patch suggestions; apply changes manually or use the provided patches depending on your workflow.
Does it change Java Bridge code or Java.perform patterns?
Java.perform usage remains unchanged; the skill only flags Java byte[] handling issues and suggests safe conversion patterns for writeByteArray.