V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
luboyan
V2EX  ›  问与答

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

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

    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
    wunonglin
        1
    wunonglin  
       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   ·   实用小工具   ·   2708 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:19 · PVG 20:19 · LAX 04:19 · JFK 07:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.