V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jetiny
V2EX  ›  程序员

electron 加密打包的正确方法

  •  
  •   jetiny · 2018-09-27 22:42:02 +08:00 · 15527 次点击
    这是一个创建于 2247 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网上流传的 Electron 加密打包文件 或 electron 源码加密 都是指的 asar pack 并非真正的加密

    如何在 asar 的基础上实现加密呢?

    先来看看 asar 文件的结构

    • 文件大小标记 04 00 00 00 64 10 00 00 60 10 00 00 5B 10 00 00

    • 文件头部 json {"files":...}

    • 文件内容区 由一个个文件拼接而成

    加密最简单的方式就是在 asar 打包的基础上对需要的文件进行加密

    asar 文件是怎么被识别调用的呢, 首先是 C++部分

    asar::Archive 压缩包功能类
    
    asar::URLRequestAsarJob 压缩包注册为资源, 供 Browser 模块识别
    
    Archive V8 绑定到 node, 供 Node 模块识别
    

    其次是 js 部分

    asar.js 导出 wrapFsWithAsar 方法, 把 V8 绑定的 Archive 能力提供给 fs
    asar_init.js 用来覆盖 fs 的读取操作, 这样 fs 就可以识别 asar 压缩包内的资源了
    

    根据以上分析, 加密解密思路就有了

    加密方法

    在 asar 打包时写入文件之前, 通过加密算法把写入的文件进行加密

    解密方法

    • 修改 asar::Archive 类增加 C++解密方式, 供 Browser 和 atom 加载 asar 资源

    • 修改 asar.js 增加 js 解密方式, 供 nodejs 加载 asar 资源

    同时也可以做文件头部 json 的加密,官方的 asar 就没法解包了

    通过这种方式, 个人在稳定版本 electron-2.0.8 和最新版本 electron-3.0.0 都做了成功的尝试

    再也不用担心核心业务代码泄露了

    想尝试下的可以联系我 Q 1584625095

    第 1 条附言  ·  2020-05-21 17:40:51 +08:00

    有需要的吗,最近撸了个官网,需要的请联系哦,electron.ink

    第 2 条附言  ·  2021-07-08 11:21:54 +08:00

    应客户要求,已经在最新 electron 13 版本上已实现 加密功能,需要的联系哦, electron 13 http://electron.ink/

    13 条回复    2022-09-12 20:56:00 +08:00
    XiaoJSoft
        1
    XiaoJSoft  
       2018-09-28 00:02:38 +08:00   ❤️ 1
    只要你的产品要在别人的计算机上跑...就能够被破解...而且通常很简单...
    除非...你把核心代码拿个密钥加密...每次启动都得输入那个密钥才能解密启动...
    XiaoJSoft
        2
    XiaoJSoft  
       2018-09-28 00:03:23 +08:00
    @XiaoJSoft
    当然这样也没什么太大用,我完全可以跟你买一个密钥,然后就又可以拿到你的代码了...
    jetiny
        3
    jetiny  
    OP
       2018-09-28 00:34:15 +08:00
    是这个道理, 所以头部也是被加密的,程序可以解密头部,从头部拿到你的密钥再解密后面的文件,目前是这样实现的,没有 C++的代码,要破解也要花一番功夫的不是?
    seeker
        4
    seeker  
       2018-09-28 02:04:43 +08:00
    没有办法绝对防止代码泄露,只能增加门槛。楼主可以打包一个实例应用给咱看看效果。
    XiaoJSoft
        5
    XiaoJSoft  
       2018-09-28 02:55:11 +08:00
    @jetiny
    讲真...曾经的我也这么想过...
    ...直到被一堆 Hacker 搞的体无完肤... -_-!!
    janxin
        6
    janxin  
       2018-09-28 07:34:40 +08:00 via iPad
    你这个破解也很简单啊…
    iBaoger
        7
    iBaoger  
       2018-09-28 08:00:35 +08:00 via Android
    核心功能封装 node 模块,用 c++实现
    liang2u
        8
    liang2u  
       2018-09-28 08:08:18 +08:00 via Android
    asar 只认定制加密版本 electron,且关闭控制台才有意义,否则最终用户能通过控制台看代码啊。
    Chenamy2017
        9
    Chenamy2017  
       2018-09-28 09:17:18 +08:00
    我马上也会遇到这个问题,感谢分享。
    12101111
        10
    12101111  
       2018-09-28 10:47:32 +08:00 via Android
    加密文件没有用,这些文件总是要在内存中解密的,应该对内存区域进行加密,这时候就适合 VMprotect+native 程序,否则还是老老实实做服务器验证吧,毕竟无数游戏都能被破解,唯一不能破解的就是强制联网验证
    Chenamy2017
        11
    Chenamy2017  
       2018-11-20 14:08:18 +08:00
    请问,程序在调用用 asar 归档的文件时,应该用的标准的解压算法,如何让它在执行时调用解密算法?
    caoqiang250
        12
    caoqiang250  
       2019-07-03 16:52:25 +08:00
    编程猫硬件助手好像使用了相关技术,使用官方的 asar 无法解包
    xspeed
        13
    xspeed  
       2022-09-12 20:56:00 +08:00
    已搞定!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5219 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:12 · PVG 17:12 · LAX 01:12 · JFK 04:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.