话题逆向工具 › asar

逆向工具:asar

asarElectron 框架中广泛使用的归档工具,专门用于将应用程序的源代码和资源文件打包成单个 .asar 归档文件。这种格式在 Electron 应用分发中非常常见,因为它能保持文件结构完整,同时提升加载效率和安全性(避免直接暴露源代码)。


核心功能

  1. 打包文件为 .asar
    将多个文件和目录合并为单个 .asar 文件,保持原始目录结构。
  2. 解包 .asar 文件
    提取归档内容到本地目录,便于调试或修改。
  3. 列出归档内容
    查看 .asar 文件内的文件列表,无需解包。
  4. 与 Electron 深度集成
    Electron 运行时可直接读取 .asar 文件,如同访问普通目录。

安装方法

通过 npm 全局安装:

npm install -g asar

基础用法

1. 打包文件/目录为 .asar

asar pack <输入目录> <输出文件.asar>

示例:将 app 目录打包为 app.asar

asar pack ./app ./app.asar

2. 解包 .asar 文件

asar extract <输入文件.asar> <输出目录>

示例:解压 app.asarapp_unpacked 目录

asar extract app.asar ./app_unpacked

3. 列出 .asar 文件内容

asar list <输入文件.asar>

示例:查看 app.asar 内的文件列表

asar list app.asar

高级选项

选项 说明
--exclude 排除指定文件/目录(支持通配符)
--unpack-dir 指定某些目录不打包进 .asar(直接保留为外部文件)
--ordering 指定文件顺序的配置文件(优化加载顺序)

示例:打包时排除 node_modulestests 目录

asar pack app app.asar --exclude "{node_modules,tests}/**"

适用场景

  • Electron 应用分发:默认打包方式,减少文件数量并隐藏源码。
  • 部分更新:结合 --unpack-dir 将频繁变动的文件(如图片)保留在外部。
  • 调试应用:解包官方应用的 .asar 文件进行逆向分析(需注意法律风险)。

注意事项

  1. 路径敏感
    打包时需确保相对路径正确,避免运行时文件引用错误。
  2. 并非加密
    .asar 仅是归档文件,内容可被解包,敏感数据需额外加密。
  3. 性能优化
    大文件或深层目录可能影响打包速度,建议拆分或使用 --unpack-dir

与其他工具对比

工具 特点 适用场景
asar 保持目录结构,Electron 原生支持 Electron 应用
zip/tar 通用压缩,无结构优化 普通文件归档
appimage 直接生成可执行文件 Linux 应用分发

常见问题

Q1: 如何查看 .asar 文件内容是否完整?

asar list app.asar | less

Q2: 打包后 Electron 应用无法启动?
检查是否排除了关键文件(如 package.json),或路径引用错误。

Q3: 能否编辑 .asar 文件内容?
需解包 → 修改 → 重新打包,无法直接编辑。

向Typora学习electron安全攻防

目前来说,官方的版本并没有提供保护源码的方法。在github开源的找到个大神提供的解决方案(https://github.com/toyobayashi/electron-asar-encrypt-demo) ,该方案可以把启动文件编译为node二进制文件,作为启动入口,来保护薄弱的js代码。在项目启动时,将加密后的代码进行解密,交回electron流程进行执行,从而避免上述步骤直接解包拿到源代码的可能。

经过分析对比,typora用的恰好是这个demo提供的思路。

实现 Electron 热更新的思路和方法

Electron 是一个时下非常流行的、融合了 Node 与 V8 引擎、允许开发者使用前端技术进行跨平台客户端开发的框架,有很多成熟的产品都在使用这样一个框架,比如射手影音、迅雷等。

开源社区为这个框架提供了一套配套的通用打包、自动更新方案,这一套方案也被相当多的项目采用,我个人的项目也在使用这一套通用的方案管理打包和自动更新。但是在项目上线后,这一套通用方案的不灵活也随之暴露了出来 —— 在打包分发后,开发者将失去对已打包资源的掌控,没有办法基于远程进行修改,导致项目出现了一些紧急故障的时候,开发者只能再次打包项目的所有资源给用户推送一个全量更新,这对用户来说是一个非常不好的体验。

相较而言,在移动客户端上被广泛运用的热更新方案是一个非常好的解决办法,但是在 Electron 这一套框架下,让人很意外的是,虽然这个框架本身热度非常高,但是开源社区内并没有非常完善的、实现热更新的方法 / 框架 / 依赖可用。

开源社区提供了一些方案,但是这些方案在实现上并不是很理想,出于这样的原因,我自发地探索、研究,根据我现有项目的特点实现了一个热更新方案。

在后文我会详细介绍这一套方案,给“Electron 下如何实现热更新”这个问题提供一个思路。

Electron asar 格式详解

asar —— 官方并没有明确给出简称的来源,笔者个人认为是 A Simple Archive,实际上,文档中也着重表达了这个格式只是属于简单的文件归档,因此笔者认为这个称呼也是挺合理的。:) Electron 中提供了这个格式,在构建应用时将执行资源打包到一个 .asar 文件中,应用启动执行时直接访问 .asar 文件内部资源获取执行代码。在使用 Electron Packager 或者 Electron Builder 等构建工具时,都会默认开启 .asar 归档模式。

  • «
  • 1
  • »

首页 - Wiki
Copyright © 2011-2025 iteam. Current version is 2.140.1. UTC+08:00, 2025-02-06 02:09
浙ICP备14020137号-1 $访客地图$