V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
qinghuida1997
V2EX  ›  JavaScript

关于 js 的自身加密混淆,还有这骚操作?

  •  1
     
  •   qinghuida1997 · 148 天前 · 2545 次点击
    这是一个创建于 148 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我发现知乎看到了这个 https://www.zhihu.com/question/454938362

    第一次见到这种所谓自身加密,看这加密疑似 base64,但不管是编码还是加密混淆,最终是下载到客户端打开的,所以这个加密方式是否能运行?望大佬们解惑
    20 条回复    2021-07-15 12:22:33 +08:00
    muzuiget
        1
    muzuiget  
       148 天前   ❤️ 1
    无非就是定义一个变量而已,后面的代码肯定拿来解析,你当它下载一个 zip 文件就是,里面可以是任何数据,图片、样式、脚本都可以。
    zhaiblog
        2
    zhaiblog  
       148 天前 via iPhone
    chromw 打个断点就知道了
    zhaiblog
        3
    zhaiblog  
       148 天前 via iPhone
    @zhaiblog chrome
    wyx119911
        4
    wyx119911  
       148 天前
    都是提高门槛的操作,可以把代码的抽象语法数进行变换加密
    x4storm
        5
    x4storm  
       148 天前
    像这种么 aem1k.com/world
    ysc3839
        6
    ysc3839  
       148 天前   ❤️ 2
    简单分析了一下,原数据不是 js 代码,是 JSON 数据。
    那个变量名第一个字符是随机的,第二个字符固定是 i,后面跟着的是域名倒序的 MD5 值,变量名这么处理猜测是为了反爬虫。
    后面的字符串中 '.' 会先被替换为 't',然后去掉开头 16 个字符,再用非标准的 Base64 解码。

    这就只是一个非常简单的编码,依靠算法保密来“保密”,大概只是为了防一些自动化的爬虫,人工分析一下全都出来了。
    stkstkss
        7
    stkstkss  
       148 天前
    B 站昨晚崩了 打脸吗
    Dididadada
        8
    Dididadada  
       147 天前
    https://www.obfuscator.io/
    是这个东西吧,之前用过一两次,能跑,但性能差很多
    cheng6563
        9
    cheng6563  
       147 天前   ❤️ 1
    这不就是加壳
    lizhenda
        10
    lizhenda  
       147 天前
    蛮有意思的,这个加密是为了加密啥,资源吗?看起来不像加密代码
    libook
        11
    libook  
       147 天前
    防机器人不防小人,对付机器人足够了。

    如果对前端闭源感兴趣可以了解一下 WebAssembly 。
    FaiChou
        12
    FaiChou  
       147 天前
    我见过这种的劫持代码:

    ```
    ['son']["\x66\x69\x6c\x74\x65\x72"]["\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72"](((['son']+[])["\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72"]['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65']['\x61\x70\x70\x6c\x79'](null,"xxxxxxxx...xxx"['\x73\x70\x6c\x69\x74'](/[a-zA-Z]{1,}/))))('son');
    ```

    16 进制转成 string 是以下代码, 依然非常模糊

    ```
    ['son']["filter"]["constructor"](((['son'] + [])["constructor"]['fromCharCode']['apply'](null, "xxxxxxxx...xxx"['split'](/[a-zA-Z]{1,}/))))('son');
    ```

    拆解下:

    ```
    (['son'] + [])["constructor"]
    ```

    上面👆这个其实是个构造器 `f String() {}`



    ```
    "xxxxxxxx...xxx"['split'](/[a-zA-Z]{1,}/)
    ```

    上面👆执行的是 str.split(/[a-zA-Z]{1,}/) 将 str 的字母部分拿掉, 剩下的用数组形式代表, 以字母切割的数组 `String.fromCharCode([88, 111, 222....])`


    最终翻译成就是普通的 js 代码了.
    qinghuida1997
        13
    qinghuida1997  
    OP
       147 天前
    @muzuiget 受教了,谢谢讲解
    qinghuida1997
        14
    qinghuida1997  
    OP
       147 天前
    @muzuiget 受教了,谢谢讲解
    @zhaiblog 断点 yyds
    qinghuida1997
        15
    qinghuida1997  
    OP
       147 天前
    @wyx119911 提高门槛的操作...在下格局小了,惭愧惭愧
    qinghuida1997
        16
    qinghuida1997  
    OP
       147 天前
    @x4storm 不错,开头 eval 就暴露了,一目了然过于简单(* ̄ 0  ̄)
    qinghuida1997
        17
    qinghuida1997  
    OP
       147 天前
    @ysc3839 非常大佬的详细讲解
    qinghuida1997
        18
    qinghuida1997  
    OP
       147 天前
    @stkstkss 不明所以...
    qinghuida1997
        19
    qinghuida1997  
    OP
       146 天前
    @Dididadada 用过一次,不在乎性能其他的用这个加密还是可以的
    @lizhenda 这就是问题的关键了...
    @libook 听说过 WebAssembly,但没有深入研究了解
    @FaiChou 劫持加密?感谢提供详解...
    qinghuida1997
        20
    qinghuida1997  
    OP
       146 天前
    @ysc3839 非常感谢大佬的详细讲解
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3654 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:34 · PVG 09:34 · LAX 17:34 · JFK 20:34
    ♥ Do have faith in what you're doing.