web美团外卖mtgsig

声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

分析图

启动流程在这里,发起xml进去加密地方。根据true/false生成在url后面还是请求头里面。

加密文件

 大部分关键代码

!(() => {
    "use strict";
    const $toString = Function.toString;
    const myFunction_toString_symbol = Symbol('('.concat('', ')_', (Math.random() + '').toString(36)));
    const myToString = function () {
        return typeof this == 'function' && this[myFunction_toString_symbol] || $toString.call(this);
    };

    function set_native(func, key, value) {
        Object.defineProperty(func, key, {
            "enumerable": false,
            "configurable": true,
            "writable": true,
            "value": value
        })
    };
    delete Function.prototype['toString']; //删除原型链上的toString
    set_native(Function.prototype, "toString", myToString); //自己定义个getter方法
    set_native(Function.prototype.toString, myFunction_toString_symbol, "function toString() { [native code] }"); //套个娃 保护一下我们定义的toString 否则就暴露了
    this.func_set_natvie = (func) => {
        set_native(func, myFunction_toString_symbol, `function ${myFunction_toString_symbol, func.name || ''}() { [native code] }`);
    }; //导出函数到globalThis
}).call(this);
const XMLHttpRequest = require('xhr2');
Window = function Window() {
    throw new TypeError('Illegal constructor')
};
this.func_set_natvie(Window);
Window.prototype.PERSISTENT = 1
Window.prototype.TEMPORARY = 0
Navigator = function Navigator() {
    throw new TypeError('Illegal constructor')
};
this.func_set_natvie(Navigator);
window = global
Object.defineProperties(Window.prototype, {
    [Symbol.toStringTag]: {
        value: 'Window',
        configurable: true
    }
})
Object.defineProperties(Navigator.prototype, {
    [Symbol.toStringTag]: {
        value: 'Navigator',
        configurable: true
    }
})
window.__proto__ = Window.prototype
window.DataView = function DataView() {
    console.log('window.DataView', arguments)
};
this.func_set_natvie(DataView);
window.Notification = function Notification() {
    console.log('window.Notification', arguments)
};
this.func_set_natvie(Notification);
location ={
  
}
screen = {}
screen.width = 0
screen.height = 0
screen.availHeight = 0
screen.availWidth = 0
screen.orientation = {
 
}
screen.pixelDepth = 24
screen.colorDepth = 24
window.XMLHttpRequest = function XMLHttpRequest() {
    console.log('window.XMLHttpRequest'.arguments)
    return {
        open: function open() {
        },
        send: function send() {
        }
    }
}
window.MouseEvent = function MouseEvent() {
    console.log('window.MouseEvent'.arguments)
}
window.scroll = function scroll() {
    console.log('window.scroll'.arguments)
}
window.scrollBy = function scrollBy() {
    console.log('window.scrollBy'.arguments)
}
window.scrollBy = function scrollBy() {
    console.log('window.scrollBy'.arguments)
}
window.WebGLRenderingContext = function WebGLRenderingContext() {
    console.log('window.WebGLRenderingContext'.arguments)
}
window.H5guardCount = 1
window.wPaths = []
window.xhrHook = true
window.fetchHook = true
window.xhrHooked = true
window.xhrHook = true
window.xhrHooked = true
window.onbeforeinstallprompt = null
window.onhashchange = null
window.ondevicemotion = null
window.ondeviceorientation = null
window.ondeviceorientationabsolute = null
setInterval = function () {
}
setTimeout = function () {
}
Navigator.toString = function toString() {
    return 'function Navigator() { [native code] }'
};
this.func_set_natvie(Navigator.toString);
navigator = {}
navigator.__proto__ = Navigator.prototype
window.self = window
window.top = window
window.localStorage ={}
window.document = {}
document.createEvent = function createEvent(type) {
    console.log('document.createEvent', arguments)
}
document.cookie = {}
document.documentElement = {
    appendChild: function appendChild() {
        console.log('appendChild')
    },
    removeChild: function removeChild() {
        console.log('removeChild')
    },
    clientHeight: 760,
    clientWidth: 150,
    scrollTop: function scrollTop() {
    }

}
window.sessionStorage = {}
window.localStorage.clear = function clear() {
    var temp = Object.keys(this)
    for (var i = 0; i < temp.length; i++) {
        delete this[temp[i]];
    }
};
window.sessionStorage.clear = function clear() {
    var temp = Object.keys(this)
    for (var i = 0; i < temp.length; i++) {
        delete this[temp[i]];
    }
};
window.localStorage.getItem = function getItem(key) {
    return this[key]
};
window.sessionStorage.getItem = function getItem(key) {
    return this[key]
};
window.localStorage.key = function key(index) {
    return Object.keys(this)[index]
};
window.sessionStorage.key = function key(index) {
    return Object.keys(this)[index]
};
window.localStorage.removeItem = function removeItem(key) {
    delete this[key]
};
window.sessionStorage.removeItem = function removeItem(key) {
    delete this[key]
};
window.localStorage.setItem = function setItem(key, value) {
    this[key] = value
};
window.sessionStorage.setItem = function setItem(key, value) {
    this[key] = value
};
window.fetchHooked = true
window.wDomains =[
]
window.name = ''
window.indexedDB = {}
window._phantom = undefined
window.phantom = undefined
window.callPhantom = undefined

navigator.plugins = [{name: "PDF Viewer"}, {name: "Chrome PDF Viewer"}, {name: "Chromium PDF Viewer"},
    {name: "Microsoft Edge PDF Viewer"}, {name: "WebKit built-in PDF"}]
oph = Object.prototype.hasOwnProperty
Object.prototype.hasOwnProperty = function hasOwnProperty(val) {
    if (val === 'webdriver') {
        return false
    }
    return oph.apply(this, arguments)

document.body = {
    appendChild: function appendChild() {
    },
    removeChild: function removeChild() {
    },
    scrollTop: 0
}
window.AudioContext = function AudioContext() {
    console.log('window.AudioContext', arguments)
}
window.status = ''
window.frameElement = null
window.onsearch = null
window.external = {}
window.styleMedia = {type: "screen"}
window.isSecureContext = true
window.getSelection = function getSelection() {
    return {
        anchorOffset: 0,
        baseOffset: 0,
        extentOffset: 0,
        focusOffset: 0,
        isCollapsed: true,
        rangeCount: 0,
        type: "None",
    }
}
window.find = function find() {
    console.log("window.find", arguments)
}

window.dispatchEvent = function dispatchEvent() {
    console.log("window.dispatchEvent ", arguments)
}
window.postMessage = function postMessage() {
    console.log("window.postMessage", arguments)
}
window.removeEventListener = function removeEventListener() {
    console.log("window.removeEventListener", arguments)
}
document.removeEventListener = function removeEventListener(val1, val2) {
    console.log("document.removeEventListener", arguments)
}
window.addEventListener = function addEventListener(val1, val2, val3) {
    console.log("window.addEventListener", arguments)
    // val2()
}
window.PointerEvent = function PointerEvent() {
    console.log('windo.wPointerEvent', arguments)
}
document.addEventListener = function addEventListener(val1, val2, val3) {
 
}
window.createImageBitmap = function createImageBitmap() {
    console.log("window.createImageBitmap", arguments)
}
navigator.sendBeacon = function sendBeacon() {
    console.log('navigator.sendBeacon', arguments)
}
navigator.javaEnabled = function javaEnabled() {
    console.log('navigator.javaEnabled', arguments)
}
navigator.vibrate = function vibrate() {
    console.log('navigator.vibrate', arguments)
}
navigator.userActivation = {
    hasBeenActive: true,
    isActive: false
}
navigator.mediaSession = {
    playbackState: "none"
}
navigator.clipboard = {}
navigator.credentials = {}
navigator.keyboard = {}
navigator.locks = {}
navigator.mediaCapabilities = {}
navigator.onLine = true
navigator.serviceWorker = {}
navigator.storage = {}
navigator.presentation = {}
navigator.bluetooth = {}
navigator.usb = {}


结果

总结

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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在互联网时代,外卖点餐已经成为了不可或缺的生活方式。而如今,web美团外卖类似应用的开发已经成为了一种趋势,更是各大互联网公司的重点开发项目之一。 针对web美团外卖类似应用的源码,我们可以考虑使用一些特定的技术: 1.后端技术方面: 可以使用高效的PHP、JavaPython等语言;使用Laravel、Spring、Django等框架,方便快速开发服务器;以及使用MySQL、MongoDB等数据库。 2.前端技术方面: 可以使用HTML、CSS、JavaScript等语言,使用Vue、React、Angular等框架构建用户界面;使用jQuery、Bootstrap等库以及Ajax技术实现页面交互和动态数据加载。 建立一个成功的web美团外卖类似应用,需要遵循以下步骤: 第一步: 需要有一个完善的需求文档和UI设计稿,这可以帮助我们更好地了解功能、界面和流程。 第二步: 开发后端服务,主要包括支付系统,用户注册,订单管理等模块。 第三步: 利用前端技术开发用户界面和交互功能,使得用户得到良好的体验。 第四步: 进行整体测试、修复BUG,保证程序的稳定性和安全性。 总之,实现一个web美团外卖类似应用需要一个充分了解市场的团队,有稳定的后台架构和优秀的用户体验的同时,也要具备可靠的客户服务和推广手段,以便提高用户体验和应用的粘性。 ### 回答2: 网上有很多类似于美团外卖的应用源码,这些源码大多数使用了流行的技术框架和语言,如React、Vue、Angular,Node.js等。这些框架和语言的特点是高效、稳定而且易于维护。 这些应用的设计方案比较成熟,可以提供用户下单、商家处理订单、客服服务、物流配送等完整的流程。在这个基础上,开发者可以对应用进行二次开发和改造,根据业务需求进行扩展和定制。 同时,这些源码提供了比较完善的文档和教程,即使没有前端或后端开发经验的人也能快速上手。在开发过程中,遇到问题可以通过社区或官方技术支持获得解决方案。 当然,使用这些应用源码也有一些限制和缺点,例如部分源码的功能不够完备,需要自己进行二次开发和调整;而且在一定程度上会受限于源码的架构和技术选型。 总之,对于需要开发美团外卖类似应用的开发者来说,使用现成的应用源码可以大大缩短开发周期和减少开发成本,同时还能够大大降低开发难度。 ### 回答3: Web美团外卖类似应用源码是一种基于Web技术的外卖订餐应用程序的源代码,在这份源码中,包含有设计外卖订餐的基本功能,如商家展示、菜品展示、购物车、订单提交、支付等。这些功能是通过前端页面和后台数据库相互配合实现的。 前端部分主要是通过HTML、CSS、JavaScript等技术来设计页面,让用户通过页面进行选择、添加、删除、提交订单等操作,同时还要兼容不同的设备和浏览器,确保用户能够方便地使用应用。 后端部分主要是通过PHP、JavaPython等服务器端语言来实现数据的存储和处理,包括商家及其菜品信息的存储、订单信息的生成、支付功能的调用等。同时,还需要与前端页面进行响应和交互,通过AJAX等技术实现动态更新和数据请求。 在这份源码中,还会包含一些开源框架和插件,可以帮助开发者更快地完成应用的构建,提高开发效率。同时,还需要考虑应用的安全性和性能,避免出现数据泄露、恶意攻击等问题,确保应用的稳定性和可靠性。 总的来说,Web美团外卖类似应用源码提供了一种快速搭建外卖订餐应用的方式,可以帮助开发者节省时间和精力,实现快速上线和提高用户体验的目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值