JS 混淆后的代码扒到本地无法运行 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
luboyan
V2EX    问与答

JS 混淆后的代码扒到本地无法运行

  •  
  •   luboyan 2022-07-17 09:31:35 +08:00 3028 次点击
    这是一个创建于 1233 天前的主题,其中的信息可能已经有所发展或是发生改变。

    JS 混淆后的代码扒到本地无法运行

    背景表述:工作需要在一个网站上填报数据,数据已经本地 excel 收集好,但是填报只能单项填写,故想用 python 编写小脚本程序批量提交。因工作原因无法放出网址。

    网站分析

    1 、每次提交数据前,需要点开一个填表框架,会加载 2 个 JS 代码 NwVqIEYG3ebdApP.js ; crypto-js.min.js

    2 、每次提交数据会产生一个值

    seKey:e85cacbf856bec1835290aa45b56a8e20fe231a6b056b89df30b858ca83225d4774aa8a4ac069bb7dc003c561f069662

    该值由上述两个 js 代码生成,但是 NwVqIEYG3ebdApP.js 是被混淆的无法正常读取,seKey 数据加密方式为 AES ,将代码扒下来后因为混淆无法在本地正常运行,求大佬支招。 

    但是在部分在线 JS 网站上是可以正常运行

    https://www.dute.org/js-run

    https://jsrun.net/new?mode=black

    代码放在这里 https://txtpad.cn/0716demo

    本地环境问题

    1.本地使用 pycharm 专业版,已经安装 nodejs 插件,配置好环境变量,运行别的不加密的 JS 代码可以正常使用。

    2.本地运行出现的问题如下

    const _0x3d940d = CryptoJS[_0xfdc6('\x30\x78\x65', '\x7a\x65\x6a\x4d')][_0xfdc6('\x30\x78\x31\x35', '\x38\x4e\x6a\x5 d')]'\x70\x61\x72\x73\x65'; TypeError: Cannot read properties of undefined (reading 'Utf8')

    一些疑惑

    本地使用 nodeJS 无法运行上述 js 代码,但是在线的部分网站可以运行,在线 JS 运行时要是标注解释器时 nodeJS 的也无法使用,是不是解释器和该代码冲突,如果是应该换用什么解释器,同时可以用 pycharm 编写后续 post 发包表单数据构造。

    1.这种就可以正常运行出结果 link

    2.这种是 nodeJS 的就不能 link

    需求

    1 、求助大佬帮忙解答下,小白摸石头过河找不到方向,本地是否应该换另外一种 JS 编译器,是的话应该是什么; 2 、或者其他的解决办法,能在每次提交数据表单时获取到这个 seKey 值,seKey 是实时改变的,应该和时间戳有很大关系,但是源代码混淆了无法阅读。

    第 1 条附言    2022-07-17 10:28:12 +08:00
    已经找到解决办法,谢谢大佬们的帮助,在此再一次感谢不知名的大佬的答案。

    该问题出现的核心是
    浏览器环境和 node 环境全局变量赋值方式有差别
    需要建运行的函数全局化。
    # 附上大佬答案

    查找 t.CryptoJS = r() 在这之后添加这些代码,就能在 node 环境运行了:
    ; // 分号结束
    globalThis.CryptoJS = r() // 将 CryptoJS 暴露给 node 的 globalThis ,保证之后的 CryptoJS ,其实就是 globalThis.CryptoJS 能正常调用。
    本地就可以直接 node xxx.js 直接获得 getSkey 的结果了。
    10 条回复    2022-07-17 22:32:43 +08:00
    shakaraka
        1
    shakaraka  
    PRO
       2022-07-17 09:43:35 +08:00
    他不是提示找不到 CryptoJS 了吗,引入一个不就好了
    eote
        2
    eote  
       2022-07-17 09:45:50 +08:00
    感觉跟 node 没关系,可能漏了一些文件。不想死磕的话可以找个 PhantomJS 类似的包模拟浏览器点击 ( https://github.com/detro/ghostdriver
    luboyan
        3
    luboyan  
    OP
       2022-07-17 09:48:39 +08:00
    @wunonglin 引入了原代码调用的就是 crypto-js.min.js 这个,现在的问题是我把他们拼接在一起,通过在线的 JS 运行 https://www.dute.org/js-run
    https://jsrun.net/new?mode=black ;是可以运行得到结果的(不知道这两个运行是用什么解释器),
    但是要是在线运行的 js 显示解释器是 nodejs 的就运行出错,弄到本地运行也是一样的出错(本地也是 nodejs )
    luboyan
        4
    luboyan  
    OP
       2022-07-17 09:54:24 +08:00
    @eote 模拟点击感觉会很慢数据太多了,谢谢大佬
    404neko
        5
    404neko  
       2022-07-17 10:07:46 +08:00
    Node 里少了很多东西
    比如 document
    luboyan
        6
    luboyan  
    OP
       2022-07-17 10:16:15 +08:00
    @404neko 谢谢大佬我就猜是解释器的问题
    iqoo
        7
    iqoo  
       2022-07-17 10:47:18 +08:00
    居然敢把网页里的 js 放 node 里跑。换成某些风控脚本直接给你种个马。
    luboyan
        8
    luboyan  
    OP
       2022-07-17 11:21:50 +08:00
    @iqoo 自己工作上的这倒是不用担心,谢谢答主提醒
    mxT52CRuqR6o5
        9
    mxT52CRuqR6o5  
       2022-07-17 11:52:49 +08:00 via Android
    直接 headless browser ,不是省心的多
    ysc3839
        10
    ysc3839  
       2022-07-17 22:32:43 +08:00 via Android
    环境不一样,JS 语言本身是个沙盒语言,没有什么功能的,浏览器里的 window, document 都是额外扩展的,Node.js 也是额外扩展了。某个脚本依赖浏览器的扩展,你放到没有这个扩展的环境中(比如 Node.js)当然会出问题。另外 Node.js 加的扩展包含许多高权限的操作,可以干很多坏事,并不像浏览器那样是个安全受限的环境,不可信的代码绝对不能在 Node.js 中运行。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     969 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 22:38 PVG 06:38 LAX 14:38 JFK 17:38
    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