JS逆向 - Akamai阿迪达斯(三次) 补环境、纯算

文章目录

概要

提示:仅供学习,不得用做商业交易,如有侵权请及时联系

逆向:JS逆向 - Akamai阿迪达斯(三次) 补环境、纯算
URL:aHR0cHM6Ly93d3cuYWRpZGFzLmNvbS5jbi8=

整体架构流程

提示:分析整体流程

1、访问首页

  1. 会发三次包:第二次发包是事件触发,不用管,第三次是轨迹达到21次触发:POST =》sensor_data
  2. 我们可以XHR断点,然后往回跟栈
  3. js混淆还原(墨竹大佬的还原脚本)


2、din对象的键值的顺序 是每次都变的,ajr的值算法 也是会变的,dvc的值是vmp的 算法固定(b+j+g+i+e+h+c+k+l+d+f+动态的),mev的值则是轨迹计算得到的
3、扣算法(第三次接口返回的cookie里面:0)

技术名词解释

提示:补环境

  1. 描述符检测:
javascript 复制代码
Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor() {
    if (arguments[1] === 'contentWindow') {
        contentWindow_getter = function contentWindow() { }
        contentWindow_getter.toString = function toString() {
            return "function get contentWindow() { [native code] }"
        }
        return {
            get:contentWindow_getter
        }
    }
    if (arguments[1] === 'loading') {
        loading_getter = function loading() { }
        loading_getter.toString = function toString() {
            return "function get loading() { [native code] }"
        }
        return {
            get:loading_getter
        }
    }
    if (arguments[0] === navigator.__proto__ && arguments[1] === 'plugins') {
        plugins_getter = function plugins() { }
        plugins_getter.toString = function toString() {
            return "function get plugins() { [native code] }"
        }
        return {
            get:plugins_getter
        }
    }
    if (arguments[0] === navigator.__proto__ && arguments[1] === 'mimeTypes') {
        mimeTypes_getter = function mimeTypes() { }
        mimeTypes_getter.toString = function toString() {
            return "function get mimeTypes() { [native code] }"
        }
        return {
            get:mimeTypes_getter
        }
    }
    if (arguments[1] === 'path') {
        return undefined
    }
    if (arguments[1] === 'createElement') {
        return undefined
    }
    return Object.getOwnPropertyDescriptor_.apply(this,arguments);
}
  1. SharedWorker检测:onmessage的回调
javascript 复制代码
Object.defineProperty(wroker_port, 'onmessage', {
        set: function (value) {
            debugger
            value({
                data:{
                    "ts": (new Date(window.bmak.startTs+1000)).toString(),
                    "oscpu": null,
                    "tz": "Asia/Shanghai",
                    "la": navigator.language,
                    "las": navigator.languages,
                    "dm": navigator.deviceMemory,
                    "hc": navigator.hardwareConcurrency,
                    "net": [
                        navigator.connection.effectiveType,
                        -1,
                        "null"
                    ],
                    "ua": navigator.userAgent,
                    "av": navigator.appVersion,
                    "pl": "xxx",
                    "uad": {
                        "architecture": "xxx",
                        "bitness": "xxx",
                        "brands": xxx,
                        "fullVersionList": xxx,
                        "mobile": false,
                        "model": "",
                        "platform": "xxx",
                        "platformVersion": "10.0.0",
                        "uaFullVersion": "xxx",
                        "wow64": false
                    },
                    "gpu": {
                        "gpuVendor": "xxx",
                        "gpuRenderer": "xxx",
                        "gpu2Vendor": "xxx",
                        "gpu2Renderer": "xxx"
                    }
                }
            })
        }
    })
  1. speechSynthesis.getVoices检测:第一次返回的是空,第二、三次返回的有值voiceURI、lang
  2. 各种原型链检测、toString检测、navigator的属性回调检测、plugins的原型+item、refresh
  3. document.cookie里面必须带有首页返回的bm_sz、document.currentScript必须是第一次返回的js的url、等等

小结

提示:学习交流主页,星球持续更新中:(+星球主页+v)

相关推荐
Goodbye12 小时前
从 Token 到 Embedding:LLM 核心基础深度解析
javascript·人工智能
用户9385156350712 小时前
工具调用背后:LLM 如何突破“缸中大脑”,操控真实世界?
javascript·人工智能
Goodbye12 小时前
从函数到智能:LLM Tool Use 深度解析
javascript·人工智能
半个落月12 小时前
大模型到底是怎么“调用工具”的?从一个 Node.js Demo 看懂 Tool Use
javascript·人工智能
烬羽12 小时前
中英文 token 数量差一倍?两段 JS 代码搞懂 LLM 底层是怎么"读"文字的
javascript·程序员·架构
山河木马12 小时前
矩阵专题1-怎么创建模型矩阵(uModelMatrix)
javascript·webgl·计算机图形学
用户83562907805112 小时前
Python 操作 PDF 附件:添加、查看与管理指南
后端·python
前端开发爱好者17 小时前
支持 110 种文件预览!兼容 Vue、React、Svelte!
前端·javascript·vue.js
大家的林语冰18 小时前
👍 尤大重学 Webpack,Vite 8.1 再进化,打包模式复活!
前端·javascript·vite
张元清18 小时前
React useIsomorphicLayoutEffect:修掉 SSR 下的 useLayoutEffect 警告(2026)
前端·javascript·面试