当前位置: 首页 > article >正文

美团商家端 字符验证码 分析

声明:
本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
有相关问题请第一时间头像私信联系我删除博客!

逆向分析

补环境代理

function get_enviroment(proxy_array) {
    for (var i = 0; i < proxy_array.length; i++) {
        handler = '{\n' +
            '    get: function(target, property, receiver) {\n' +
            '        console.log("方法:", "get  ", "对象:", ' +
            '"' + proxy_array[i] + '" ,' +
            '"  属性:", property, ' +
            '"  属性类型:", ' + 'typeof property, ' +
            // '"  属性值:", ' + 'target[property], ' +
            '"  属性值类型:", typeof target[property]);\n' +
            '        return target[property];\n' +
            '    },\n' +
            '    set: function(target, property, value, receiver) {\n' +
            '        console.log("方法:", "set  ", "对象:", ' +
            '"' + proxy_array[i] + '" ,' +
            '"  属性:", property, ' +
            '"  属性类型:", ' + 'typeof property, ' +
            // '"  属性值:", ' + 'target[property], ' +
            '"  属性值类型:", typeof target[property]);\n' +
            '        return Reflect.set(...arguments);\n' +
            '    }\n' +
            '}'
        eval('try{\n' + proxy_array[i] + ';\n'
            + proxy_array[i] + '=new Proxy(' + proxy_array[i] + ', ' + handler + ')}catch (e) {\n' + proxy_array[i] + '={};\n'
            + proxy_array[i] + '=new Proxy(' + proxy_array[i] + ', ' + handler + ')}')
    }
}
// get_enviroment(proxy_array)

部分补环境代码

History = function () {
}
Object.defineProperties(History.prototype, {
    [Symbol.toStringTag]: {
        value: "History",
        writable: true,
        enumerable: false,
        configurable: true
    }
})
history = {
    length: 4,
    scrollRestoration: "auto",
    state: null,
}
Object.defineProperty(window, 'queueMicrotask', {
    configurable: true,
enumerable: true,
value: function queueMicrotask(){},
writable: true
})
Object.defineProperty(window, 'structuredClone', {
    configurable: true,
enumerable: true,
value: function structuredClone(){},
writable: true
})
Object.defineProperty(window, 'crypto', {
    configurable: true,
enumerable: true,
  get:function crypto() {
        return {subtle:{}}
   },
    set:undefined
})

window.matchMedia = function (val) {
    console.log('window.matchMedia', arguments)
    if (val == '(min-width: 1535px)') {
        return {
            matches: false,
            media: val,
            onchange: null,
        }
    }
    debugger;
}
this.func_set_natvie(window.matchMedia)
Object.defineProperty(window,'DOMParser', {
    configurable: true,
    enumerable: false,
    value: function DOMParser() {
    },
    writable: false
})
Object.defineProperty(window,'fetch', {
    configurable: true,
    enumerable: false,
    value: function fetch() {
    },
    writable: true
})
扣代码调用加密
_token = decodeURIComponent(atob(env))
_token = window.q3(_token,request_code,false)

结果

总结

 1.出于安全考虑,本章未提供完整流程,调试环节省略较多,只提供大致思路,具体细节要你自己还原,相信你也能调试出来。


http://www.kler.cn/a/465691.html

相关文章:

  • LangChain 介绍
  • 从0到机器视觉工程师(二):封装调用静态库和动态库
  • python.exe无法找到程序入口 无法定位程序输入点(Anaconda Prompt报错)
  • [Qt] 输入控件 | Line | Text | Combo | Spin | Date | Dial | Slider
  • spring mvc源码学习笔记之五
  • 计算机网络复习(大题)
  • 使用npm 插件[mmdc]将.mmd时序图转换为图片
  • VuePress2配置unocss的闭坑指南
  • 适配器模式(类适配器,对象适配器)
  • 高频java面试题
  • 用语言模型 GLM-Zero-Preview 来驱动战场推演
  • 数据挖掘——支持向量机分类器
  • Centos源码安装MariaDB 基于GTID主从部署(一遍过)
  • Redis面试相关
  • vue2框架配置路由设计打印单
  • 【Axios使用手册】如何使用axios向后端发送请求并进行数据交互
  • 利用PHP爬虫获取1688按关键字搜索商品:技术解析与实践指南
  • 【C语言程序设计——循环程序设计】枚举法换硬币(头歌实践教学平台习题)【合集】
  • 【HTTP和gRPC的区别】协议类型/传输效率/性能/语义/跨语言支持/安全性/使用场景/易用性对比
  • Kafka详解 ③ | Kafka集群操作与API操作
  • 常用的聚合函数
  • TCPDump参数详解及示例
  • 组合模式——C++实现
  • UniApp | 从入门到精通:开启全平台开发的大门
  • SpringSpringBoot常用注解总结
  • oceanbase集群访问异常问题处理