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)

相关推荐
深蓝海拓2 小时前
基于QtPy (PySide6) 的PLC-HMI工程项目(一)使用自定义socket协议的基本方法
python·plc
秃头狂魔2 小时前
【HOT100】DAY2
python·算法
程序员三藏2 小时前
接口自动化测试思路和实战:编写线性测试脚本实战
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
丁当粑粑2 小时前
Pydantic的主要用法
python
哈伦20192 小时前
第二章 Python语法基础
python·语法·anaconda3
Clavis2 小时前
我给 Mac 的 Photo Booth 写了自动化脚本。为什么隐私比你想的重要得多
人工智能·python
龙文浩_2 小时前
AI机器学习中NumPy随机种子的应用
人工智能·python·深度学习·神经网络·机器学习
apcipot_rain2 小时前
HTML知识概述
前端·javascript·html
大江东去浪淘尽千古风流人物2 小时前
【Basalt】 VIO(sqrt_keypoint_vio)主流程measure函数梳理
数据库·人工智能·python·机器学习·oracle