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)

相关推荐
qq_334563554 小时前
golang如何实现SSTable持久化_golang SSTable持久化实现要点
jvm·数据库·python
2301_777599374 小时前
Redis怎样应对大规模集群的重启风暴_分批次重启节点并等待集群状态恢复绿灯后再继续操作
jvm·数据库·python
qq_452396234 小时前
【工程实战】第十篇:性能监控集成 —— 自动化脚本的“副产品”:不仅仅是功能测试
python·功能测试·自动化
来自远方的老作者4 小时前
第10章 面向对象-10.4 继承
开发语言·python·继承·单继承·多继承·super函数
解救女汉子4 小时前
MySQL并发写入如何避免锁竞争_使用队列缓冲与批量插入优化
jvm·数据库·python
qq_342295824 小时前
HTML函数开发需要SSD吗_SSD对HTML函数开发效率影响【详解】
jvm·数据库·python
qq_432703664 小时前
Golang怎么用embed嵌入SQL文件_Golang如何将SQL迁移文件嵌入Go程序统一管理【技巧】
jvm·数据库·python
m0_640309305 小时前
如何将 sticky 元素精确定位到父容器的右上角
jvm·数据库·python
带娃的IT创业者5 小时前
深度解析 Claude Design:如何利用 Anthropic 最新设计范式构建 AI 原生应用
人工智能·python·llm·claude·应用开发·anthropic·ai原生应用
是梦终空5 小时前
计算机毕业设计271—基于python+深度学习+YOLOV7的车牌识别系统(源代码+数据库+3万字论文)
python·深度学习·opencv·yolo·毕业设计·pyqt5·车牌识别系统