逆向工具:asar
asar
是 Electron 框架中广泛使用的归档工具,专门用于将应用程序的源代码和资源文件打包成单个 .asar
归档文件。这种格式在 Electron 应用分发中非常常见,因为它能保持文件结构完整,同时提升加载效率和安全性(避免直接暴露源代码)。
核心功能
-
打包文件为
.asar
将多个文件和目录合并为单个.asar
文件,保持原始目录结构。 -
解包
.asar
文件
提取归档内容到本地目录,便于调试或修改。 -
列出归档内容
查看.asar
文件内的文件列表,无需解包。 -
与 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.asar
到 app_unpacked
目录
asar extract app.asar ./app_unpacked
3. 列出 .asar
文件内容
asar list <输入文件.asar>
示例:查看 app.asar
内的文件列表
asar list app.asar
高级选项
选项 | 说明 |
---|---|
--exclude |
排除指定文件/目录(支持通配符) |
--unpack-dir |
指定某些目录不打包进 .asar (直接保留为外部文件) |
--ordering |
指定文件顺序的配置文件(优化加载顺序) |
示例:打包时排除 node_modules
和 tests
目录
asar pack app app.asar --exclude "{node_modules,tests}/**"
适用场景
- Electron 应用分发:默认打包方式,减少文件数量并隐藏源码。
-
部分更新:结合
--unpack-dir
将频繁变动的文件(如图片)保留在外部。 -
调试应用:解包官方应用的
.asar
文件进行逆向分析(需注意法律风险)。
注意事项
-
路径敏感
打包时需确保相对路径正确,避免运行时文件引用错误。 -
并非加密
.asar
仅是归档文件,内容可被解包,敏感数据需额外加密。 -
性能优化
大文件或深层目录可能影响打包速度,建议拆分或使用--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
- »