electron 加密打包的正确方法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
jetiny
V2EX    程序员

electron 加密打包的正确方法

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

    网上流传的 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     Solana     3204 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 11:34 PVG 19:34 LAX 03:34 JFK 06:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86