讲师中心 微信公众号
AI工具推荐 视频效率加速

Baoyu Electron Extract

Polar Sponsor
爱发电 赞助
.NET 9.0

从任意已安装的 Electron应用(`.asar` 包)中提取资源和 JavaScript,能够在有 `.js.map` 文件时恢复原始源码,或在无映射时恢复格式化代码。

Electron App 提取

功能概述

Electron App 提取是一项面向实际任务的技能,主要用于从一个安装的 Electron App 的 app. asar 提取资源和代码;当 .js.map 存在时, 从嵌入源 Content 恢复原始源文件。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

Electron 应用提取

从已安装的 Electron 应用的 app.asar 中提取资源与代码。若存在 .js.map 文件,则通过其中嵌入的 sourcesContent 还原原始源文件;否则使用 Prettier 格式化混淆后的代码。Source-map 中的路径优先相对于 .js.map 文件所在位置解析,因此类似 ../../src/main.ts 的打包路径将还原为可读路径(如 restored/src/main.ts),而非哈希占位符。始终跳过 node_modules。支持 macOS 和 Windows 平台。

用户输入工具

当本技能向用户发起提示时,请按以下工具选择规则执行(优先级由高到低):

  1. 优先使用运行时内置的用户输入工具 — 例如 AskUserQuestion、request_user_input、clarify、ask_user 或其等效实现。
  2. 降级方案:若无此类工具,则以编号纯文本形式输出问题,并请用户针对每个问题回复对应编号或答案。
  3. 批量处理:若该工具支持单次调用中提交多个问题,则应合并所有适用问题为一次调用;若仅支持单问题调用,则按优先级顺序逐个提问。

下方出现的具体 AskUserQuestion 引用仅为示例 — 在其他运行时中请替换为本地等效工具。

脚本目录

脚本位于 scripts/ 子目录下。{baseDir} 表示本 SKILL.md 文件所在目录路径。解析 ${BUN_X} 运行时:若系统已安装 bun → 使用 bun;若未安装但可用 npx → 使用 npx -y bun;否则建议用户安装 bun。请将 {baseDir} 和 ${BUN_X} 替换为实际值。

脚本 用途
scripts/main.ts 应用发现 + asar 提取 + source-map 还原 + Prettier 格式化

适用场景

当用户希望查看已安装 Electron 应用内部结构或检查其打包后的代码时,应使用本技能。触发语句包括:

  • “extract Electron app”、“decompile this Electron app”、“unpack app.asar”
  • “show me the source of ”、“look inside ”、“how is built”
  • “get the source code of Codex / Cursor / Discord / Slack / VS Code / Notion / Obsidian / ChatGPT desktop”
  • “提取 Electron 应用”、“看 的源码”、“反编译 Electron”、“解包 app.asar”、“还原 source map”

接受两种输入形式:应用名称(例如 Codex)或绝对路径(例如 /Applications/Codex.app、一个 .asar 文件,或 Windows 安装目录)。脚本在两个平台上均支持自动发现。

工作流程

1. 确定输入。 若用户未提供应用名称或路径,则需主动询问;若用户希望自定义输出目录,也应一并询问。

2. 执行脚本。

${BUN_X} {baseDir}/scripts/main.ts "" [--output ] [--asar ] [--force]

若不确定自动发现是否能准确定位目标 bundle,建议先使用 --dry-run 参数运行 —— 此时仅打印解析出的路径并退出,不修改任何文件系统内容。

3. 处理结果。

  • 成功 → 报告输出路径及各项计数(已提取 / 已还原 / 已格式化)。
  • 匹配多个应用 → 脚本将列出候选项目并以非零状态退出。请向用户展示候选列表,并通过 AskUserQuestion(或运行时等效工具)询问其选择;随后使用所选绝对路径重新运行。
  • 输出目录已存在且非空 → 脚本在未指定 --force 时将拒绝写入。请询问用户是否覆盖(启用 --force)或另选 --output 路径。
  • 平台不支持 / 未找到匹配项 → 若用户知晓 bundle 所在位置,建议其显式传入 --asar /full/path/to/app.asar。

4. 引导用户查看结果。 默认输出目录为 ~/Downloads/-electron-extract/。最值得关注的子目录取决于实际发现的内容:

  • 若存在 restored/ → 表明已基于 .js.map 文件重建原始源码树;这是首要查阅位置。
  • 仅存在 extracted/(无 source-map)→ extracted/ 中的 JS/CSS 已就地完成 Prettier 格式化;请从此处阅读。

Source-map 路径还原

脚本应在 source-map 允许范围内尽可能保留原始源文件名与目录结构:

  • 若 sourceRoot 存在,则先以其为基础解析 sources[] 中每一项,再相对于 .js.map 文件在 extracted/ 内的实际路径进行补全。
  • 将常规打包器生成的相对路径折叠至还原后的项目树中。例如:.vite/main/index.js.map + ../../src/main.ts → restored/src/main.ts。
  • 若源路径向上越出 extracted/ 目录层级,则保留其可读的剩余路径部分,并置于 restored/ 下,而非哈希化。例如:.vite/main/index.js.map + ../../../shared/src/lib/foo.ts → restored/shared/src/lib/foo.ts。
  • 剥离源文件名中的 URL/查询参数修饰符,包括常见的 webpack://、file:// 及 ?loader 后缀。
  • 仅当源文件名为空或无法规约为安全文件路径时,才使用 restored/__unknown/.。
  • 继续跳过 node_modules 和 webpack/runtime/* 条目;这些属于打包器/运行时噪声,而非应用源码。

使用示例

# 按应用名称提取(默认输出至 ~/Downloads/Codex-electron-extract/)
${BUN_X} {baseDir}/scripts/main.ts Codex

# 按绝对路径提取(适用于 .app 包、安装目录或 .asar 文件)
${BUN_X} {baseDir}/scripts/main.ts "/Applications/Visual Studio Code.app"
${BUN_X} {baseDir}/scripts/main.ts "C:\\Users\\you\\AppData\\Local\\Programs\\codex"
${BUN_X} {baseDir}/scripts/main.ts --asar /Applications/Codex.app/Contents/Resources/app.asar Codex

# 自定义输出目录
${BUN_X} {baseDir}/scripts/main.ts Codex --output ~/work/codex-source

# 预览自动发现结果(不执行任何写入操作)
${BUN_X} {baseDir}/scripts/main.ts Codex --dry-run

# 覆盖已存在的输出目录
${BUN_X} {baseDir}/scripts/main.ts Codex --force

# 输出机器可读结果(标准输出为单行 JSON)
${BUN_X} {baseDir}/scripts/main.ts Codex --json

选项说明

选项 简写 说明 默认值
应用名称或绝对路径。除非指定了 --asar,否则此项为必填。 —
--output -o 输出目录 ~/Downloads/-electron-extract
--asar 覆盖自动解析出的 .asar 路径 自动发现
--force -f 允许向已存在且非空的输出目录写入 false
--skip-format 跳过 Prettier 格式化 false
--skip-restore 跳过 source-map 还原 false
--no-unpacked 不复制 app.asar.unpacked/ 目录 false
--dry-run 打印解析出的路径后退出,不执行任何写入操作 false
--json 在标准输出中输出一行 JSON 摘要(禁用常规输出) false

输出目录结构

~/Downloads/-electron-extract/
├── extract-report.json          # JSON 摘要:统计数量、警告信息、已解析路径
├── extracted/                   # asar 原始内容(无 source-map 时对 JS/CSS 就地执行 Prettier 格式化)
│   └── ...                      # node_modules 保持原样(格式化阶段跳过)
├── extracted.unpacked/          # 若存在则从 .unpacked/ 复制而来
│   └── ...                      # 原生模块(.node)、大型资源文件
└── restored/                    # 仅当至少有一个可用的 .js.map 时才存在
    └──    # 依据各 .js.map 中的 sourcesContent 重建

注意事项

  • node_modules 始终被跳过 —— 无论是 source-map 还原还是 Prettier 格式化 —— 因为第三方依赖对于应用代码审查而言属于干扰信息。
  • Source-map 还原 仅在 .js.map 中嵌入了 sourcesContent 时生效。现代打包器(如 webpack、esbuild、Vite、rollup)通常默认启用此功能。若 source-map 仅引用外部 .ts/.js 文件而未嵌入其内容,则该 map 将被跳过,对应 .js 文件将转为 Prettier 格式化。被跳过的 maps 将记录于 extract-report.json 的 warnings 字段中。
  • 优先使用可读路径而非哈希 —— 不应将 source-map 路径中的 ../ 段视为天然不安全。应首先从 map 文件位置解析完整路径,再对最终输出路径做清理,确保其仍处于 restored/ 下层。哈希回退机制仅用于无法解析为合法文件路径的源名称。
  • 应用自动发现:macOS 上搜索 /Applications 和 ~/Applications;Windows 上搜索 %LOCALAPPDATA%\\Programs、%PROGRAMFILES%、%PROGRAMFILES(X86)%、%APPDATA%。若发现多个匹配项,脚本将退出并列出全部候选 —— 用户需重新运行并指定绝对路径。Linux 或其他平台不支持自动发现,须显式传入 --asar /path/to/app.asar。
  • 安全性 —— 脚本禁止向根目录 /、用户主目录(直接)或当前工作目录写入;亦禁止向已存在且非空的输出目录写入,除非启用 --force。
  • 无需全局安装 —— @electron/asar 和 prettier 通过 npx -y 动态解析。首次运行因需缓存依赖而较慢。
目录

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

相关专题

更多
Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

0

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

0

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

0

2026.10.22

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

0

2026.10.22

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

0

2026.10.22

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

0

2026.10.22

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

0

2026.10.22

剧云人物设定与关系管理教程
剧云人物设定与关系管理教程

本专题介绍剧云人物设定与关系管理,讲解角色小传、性格职业、人物目标、背景资料和关系网络的创建及维护方法。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn