{"id":45820671,"url":"https://github.com/std-microblock/fripack","last_synced_at":"2026-02-26T20:06:05.162Z","repository":{"id":323490892,"uuid":"1093460134","full_name":"std-microblock/fripack","owner":"std-microblock","description":"Package your Frida script into an executable.","archived":false,"fork":false,"pushed_at":"2025-12-30T16:11:53.000Z","size":4715,"stargazers_count":182,"open_issues_count":0,"forks_count":41,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-01-03T10:49:53.160Z","etag":null,"topics":["bundle","frida","hook","javascript","reverse-engineering"],"latest_commit_sha":null,"homepage":"https://microblock.cc/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/std-microblock.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-10T12:02:31.000Z","updated_at":"2026-01-02T12:53:27.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/std-microblock/fripack","commit_stats":null,"previous_names":["std-microblock/fripack"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/std-microblock/fripack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/std-microblock%2Ffripack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/std-microblock%2Ffripack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/std-microblock%2Ffripack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/std-microblock%2Ffripack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/std-microblock","download_url":"https://codeload.github.com/std-microblock/fripack/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/std-microblock%2Ffripack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29870564,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T18:42:30.764Z","status":"ssl_error","status_checked_at":"2026-02-26T18:41:47.936Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bundle","frida","hook","javascript","reverse-engineering"],"created_at":"2026-02-26T20:06:04.585Z","updated_at":"2026-02-26T20:06:05.156Z","avatar_url":"https://github.com/std-microblock.png","language":"Rust","readme":"# Fripack  \n### Package your Frida script into an executable.\n\n[中文](./README_zh.md)\n\n\u003cimg width=\"400\" alt=\"image\" src=\"https://github.com/user-attachments/assets/5a00307c-fd30-4991-a82e-2b23f3d115b7\" /\u003e\n\nFrida is a powerful tool, but its size and the need for root access make it challenging to distribute scripts to end-users. This often limits Frida’s use in developing plugins for wider audiences.\n\nFripack solves this by packaging your Frida scripts into various executable formats—such as Xposed Modules, patched apks, shared objects for `LD_PRELOAD`, or injectable DLLs—enabling easy distribution and use of Frida-based plugins.\n\n### Binary Size Matters\n\nThe original Frida project comes with significant bulk. Fripack streamlines and compresses Frida, resulting in binary outputs under 10 MB on all platforms—except Linux.\n\n\u003cimg width=\"345\" height=\"168\" alt=\"image\" src=\"https://github.com/user-attachments/assets/bf6f1134-f9a0-4d31-b15a-e49ae5c545d8\" /\u003e\n\n### One-Click Build\n\nCross-platform Frida scripts often make it cumbersome to build deliverables for different targets—even with Frida Gadget. Fripack simplifies development by enabling one-command builds for multiple platforms at once.\n\n## Installation\n\nDownload the latest binary from the [releases page](https://github.com/std-microblock/fripack/releases/latest) and install it as needed.\n\nYou can also install it with cargo if you have rust installed on your computer:\n```bash\ncargo install --git https://github.com/std-microblock/fripack/\n```\n\n## Getting Started\n\n### Basic Configuration\n\nFripack uses a configuration file named `fripack.json`, which supports JSON5 syntax. Here’s a basic example:\n\n```json\n{\n    \"xposed\": {\n        \"type\": \"xposed\",\n        \"version\": \"1.0.0\",\n        \"fridaVersion\": \"17.5.1\",\n        \"entry\": \"main.js\",\n        \"platform\": \"android-arm64\",\n        \"xposed\": {\n            \"packageName\": \"com.example.myxposedmodule\",\n            \"name\": \"My Xposed Module\"\n        },\n        \"sign\": {\n            \"keystore\": \"./.android/debug.keystore\",\n            \"keystorePass\": \"android\",\n            \"keystoreAlias\": \"androiddebugkey\"\n        }\n    }\n}\n```\n\nEach key in the configuration represents a build target. You can build all targets with:\n\n```bash\nfripack build\n```\n\nOr build a specific target (e.g., `xposed`) with:\n\n```bash\nfripack build xposed\n```\n\nOr watch a specific target for changes with:\n\n```bash\nfripack watch xposed\n```\n\n---\n\n### Universal Configuration Options\n\nThe following options are available for all target types:\n\n- `xz` (default: `false`): Compress the script using LZMA.\n- `entry` (required): Entry point script to bundle.\n- `fridaVersion` (required): Frida version to use (must be 17.5.1 or newer).\n- `outputDir` (default: `./fripack`): Output directory for built artifacts.\n- `platform`: Target platform (e.g., `android-arm64`, `windows-x86_64`).\n  - Valid values: `android-arm32`, `android-arm64`, `android-x86`, `android-x64`, `windows-x64`, `linux-x64`\n- `version`: Version of your plugin.\n- `type`: Type of the target (defines the output format).\n- `inherit`: Key of another target to inherit configuration from.\n- `targetBaseName` (optional): Base name for output files (defaults to target key).\n- `beforeBuild` (optional): Command to execute before building the target.\n- `afterBuild` (optional): Command to execute after successfully building the target.\n- `watchPath` Additional directory to watch for file changes.\n- `pushPath` : Destination path on device for pushing JavaScript files when in `watch` mode. Default to `/data/local/tmp/fripack_dev.js`.\n\nExample using inheritance to avoid repetition:\n\n```json\n{\n    \"base\": {\n        \"version\": \"1.0.0\",\n        \"fridaVersion\": \"17.5.1\",\n        \"entry\": \"main.js\",\n        \"xz\": true,\n        \"outputDir\": \"./fripack\",\n        \"platform\": \"android-arm64\"\n    },\n    \"xposed\": {\n        \"inherit\": \"base\",\n        \"type\": \"xposed\",\n        \"xposed\": {\n            \"packageName\": \"com.example.myxposedmodule\",\n            \"name\": \"My Xposed Module\"\n        },\n        \"sign\": {\n            \"keystore\": \"./.android/debug.keystore\",\n            \"keystorePass\": \"android\",\n            \"keystoreAlias\": \"androiddebugkey\"\n        }\n    },\n    \"raw-so\": {\n        \"inherit\": \"base\",\n        \"type\": \"shared\"\n    }\n}\n```\n\nOnly targets with a `type` field will be built.\n\n---\n\n### Supported Target Types\n\n#### `xposed`\n\nBuilds your Frida script into an Xposed Module. Only supports `Android` platforms.\n\n**Requires:** [`apktool`](https://apktool.org/) installed on your system.\n\n**Additional options:**\n\n- `xposed` (required): Xposed configuration object.\n  - `packageName` (required): Package name for the Xposed module.\n  - `name` (required): Display name of the module.\n  - `icon` (optional): Path to the module icon (expects `ic_launcher.webp` and `ic_launcher_round.webp` in the same directory).\n  - `scope` (optional): Suggested target scope for the module.\n  - `description` (optional): Description of the module.\n- `sign` (optional): Signing configuration. If provided as an object, the APK will be signed.\n  - `keystore`: Path to the keystore.\n  - `keystorePass`: Keystore passphrase.\n  - `keystoreAlias`: Alias in the keystore.\n  - `keyPass` (optional): The password for the signer's private key.\n#### `shared`\n\nBuilds your Frida script into a shared library (`.so` / `.dll`) that can be loaded via various methods (e.g., `LD_PRELOAD`).\n\n#### `inject-apk`\n\nInjects your Frida script into an existing APK by modifying one of its native libraries. Only supports `Android` platforms.\n\n**Requires:** [`apktool`](https://apktool.org/) installed on your system.\n\nIt's also recommended to have [`zipalign`](https://developer.android.com/tools/zipalign) in your path.\n\n**Additional options:**\n\n- `injectApk` (required): Injection configuration object.\n  - `sourceApkPath` (optional): Path to the source APK file to inject into.\n  - `sourceApkPackageName` (optional): Package name of the APK to extract from a connected device.\n    - Either `sourceApkPath` or `sourceApkPackageName` must be provided.\n    - When using `sourceApkPackageName`, the APK will be extracted from the connected device and cached for future builds. This requires [`adb`](https://developer.android.com/studio/command-line/adb) to be installed on your system.\n  - `injectMode` (optional): Injection mode. Currently only supports `\"NativeAddNeeded\"`.\n  - `targetLib` (optional): Specific native library to target for injection (e.g., `\"libnative-lib.so\"`).\n    - If not specified, will search for libraries in this priority order:\n      1. `libCrashSight.so`, `libBugly.so`, `libmmkv.so` (whitelist)\n      2. The smallest `.so` file in the lib directory (with warning)\n- `sign` (optional): Signing configuration for the final APK (same format as Xposed).\n  - `keystore`: Path to the keystore.\n  - `keystorePass`: Keystore passphrase.\n  - `keystoreAlias`: Alias in the keystore.\n  - `keyPass` (optional): The password for the signer's private key.\n**Example configuration:**\n```json\n{\n    \"inject-apk\": {\n        \"type\": \"inject-apk\",\n        \"platform\": \"android-arm64\",\n        \"fridaVersion\": \"17.5.1\",\n        \"entry\": \"main.js\",\n        \"injectApk\": {\n            \"sourceApkPackageName\": \"com.example.app\",\n            \"injectMode\": \"NativeAddNeeded\",\n            \"targetLib\": \"libnative-lib.so\",\n        },\n        \"sign\": {\n            \"keystore\": \"./.android/debug.keystore\",\n            \"keystorePass\": \"android\",\n            \"keystoreAlias\": \"androiddebugkey\"\n        }\n    }\n}\n```\n\n#### `zygisk`\n\nBuilds your Frida script into a Zygisk module for Magisk. Only supports `Android` platforms.\n\n**Additional options:**\n\n- `zygisk` (required): Zygisk configuration object.\n  - `id` (required): Module ID\n  - `name` (required): Module display name\n  - `version` (optional): Module version (defaults to \"1.0\").\n  - `versionCode` (optional): Module version code (defaults to 1).\n  - `author` (optional): Module author (defaults to \"FriPack\").\n  - `description` (optional): Module description.\n  - `scope` (required): Target applications for injection, separated by semicolons.\n\n**Example configuration:**\n```json\n{\n    \"zygisk\": {\n        \"type\": \"zygisk\",\n        \"platform\": \"android-arm64\",\n        \"fridaVersion\": \"17.5.1\",\n        \"entry\": \"main.js\",\n        \"zygisk\": {\n            \"id\": \"com.example.myzygiskmodule\",\n            \"name\": \"My Zygisk Module\",\n            \"version\": \"1.0.0\",\n            \"versionCode\": 1,\n            \"author\": \"Your Name\",\n            \"description\": \"A Zygisk module that injects Frida scripts\",\n            \"scope\": \"com.example.app1;com.example.app2\"\n        }\n    }\n}\n```\n\n---\n\n### Developing Frida Script with Fripack\n\nFripack supports a watch mode for development that enables hot-reloading of JavaScript files without rebuilding the entire package.\n\n#### Usage\n\nStart watching a target:\n\n```bash\nfripack watch my-watch-target\n```\n\nThe watch process will:\n1. Build and install the target initially. Note that for targets with types other than `xposed`, you'll have to install the target manually.\n2. Monitor for file changes\n3. Automatically update when changes are detected\n4. Continue running until you press Ctrl+C\n\n**Note**: Watch mode requires `adb` to be installed and accessible in your PATH for pushing files and installing packages to Android devices.\n\n#### How does this work?\n\nUnder watch mode, the injected payload monitors a specified path and triggers a reload when the file changes. The path is set via `pushPath` and defaults to `/data/local/tmp/fripack_dev.js`. On the Android platform, fripack also watches the `entry` file and automatically pushes it to the `pushPath` location whenever it is modified. On other platforms, you can either set your own `pushPath` and manually copy the file upon changes, or continue your development workflow using `frida-server` directly.\n\n---\n\n## Notes\n### How to check the logs?\nOn Android, logs are output through the Android logging system with the tag `FriPackInject`. You can view them using adb:\n```bash\nadb logcat FriPackInject:D *:S\n```\n\nOn Windows, logs are written to both `stdout` and the Windows Debug Log. To view them, you can:\n- Attach a debugger to the target application\n- Use `AllocConsole` and `freopen` in your Frida script\n- Start the target application in console\n- Use [DebugView](https://learn.microsoft.com/en-us/sysinternals/downloads/debugview) to monitor the global system log\n\nOn other platforms, logs are directed to `stdout`.\n\n### ReferenceError: 'Java' is not defined\nStarting with Frida 17.0.0, bridges are no longer bundled with Frida’s GumJS runtime. This means that users now have to explicitly pull in the bridges they want to use.\n\nYou'll have to install the bridge and build your script through `frida-compile` before packaging. Check https://frida.re/docs/bridges/ for more details.\n\n## Credits\n\n- [Frida](https://github.com/frida/frida)\n- [Florida](https://github.com/Ylarod/Florida)\n- [xmake](https://xmake.io/)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstd-microblock%2Ffripack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstd-microblock%2Ffripack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstd-microblock%2Ffripack/lists"}