关于 js 的自身加密混淆,还有这骚操作? - V2EX
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 2021-07-13 20:59:36 +08:00 4125 次点击
    这是一个创建于 1626 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我发现知乎看到了这个 https://www.zhihu.com/question/454938362

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

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

    如果对前端闭源感兴趣可以了解一下 WebAssembly 。
    ethusdt
        12
    ethusdt  
       2021-07-14 15:11:25 +08:00
    我见过这种的劫持代码:

    ```
    ['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
       2021-07-14 22:01:06 +08:00
    @muzuiget 受教了,谢谢讲解
    qinghuida1997
        14
    qinghuida1997  
    OP
       2021-07-14 22:02:07 +08:00
    @muzuiget 受教了,谢谢讲解
    @zhaiblog 断点 yyds
    qinghuida1997
        15
    qinghuida1997  
    OP
       2021-07-14 22:06:13 +08:00
    @wyx119911 提高门槛的操作...在下格局小了,惭愧惭愧
    qinghuida1997
        16
    qinghuida1997  
    OP
       2021-07-14 22:08:52 +08:00
    @x4storm 不错,开头 eval 就暴露了,一目了然过于简单(* ̄ 0  ̄)
    qinghuida1997
        17
    qinghuida1997  
    OP
       2021-07-14 22:09:53 +08:00
    @ysc3839 非常大佬的详细讲解
    qinghuida1997
        18
    qinghuida1997  
    OP
       2021-07-14 22:11:04 +08:00
    @stkstkss 不明所以...
    qinghuida1997
        19
    qinghuida1997  
    OP
       2021-07-15 12:19:59 +08:00
    @Dididadada 用过一次,不在乎性能其他的用这个加密还是可以的
    @lizhenda 这就是问题的关键了...
    @libook 听说过 WebAssembly,但没有深入研究了解
    @FaiChou 劫持加密?感谢提供详解...
    qinghuida1997
        20
    qinghuida1997  
    OP
       2021-07-15 12:22:33 +08:00
    @ysc3839 非常感谢大佬的详细讲解
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4421 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 04:02 PVG 12:02 LAX 20:02 JFK 23:02
    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