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

前言

实习了小3个月,昨天跟学长说了准备12月中旬走人,感觉轻松多了,感觉太对不起他这三个月指导。我有太多事要处理论文项目做的前后端只搞了一半,同时也准备深入学习一下安卓补充一下技术栈缺陷。等过完年搞完所有事情在出来接着实习。

逆向过程

补环境要补的太多的我就简单贴一部分主要检测环境。

Object.defineProperties(Window.prototype, {
    [Symbol.toStringTag]: {
        value: "Window",
        writable: true,
        enumerable: false,
        configurable: true
    }
})
Object.defineProperty(window, 'Window', {
    configurable: true,
    enumerable: false,
    writable: true,
    value: function Window() {
    }
})
Object.defineProperty(Window.prototype, 'PERSISTENT', {
    configurable: false,
enumerable: true,
value: 1,
writable: false,
})
Object.defineProperty(Window.prototype, 'TEMPORARY', {
    configurable: false,
enumerable: true,
value: 0,
writable: false,
})
window.__proto__ = Window.prototype

ondevicemotion = null
Object.defineProperty(window, 'outerHeight', {
    configurable: true,
    enumerable: true,
    get: function outerHeight() {
        return 834
    },
    set: function outerHeight(value) {
        this.outerHeight = value
    },
})
Object.defineProperty(window, 'outerWidth', {
    configurable: true,
    enumerable: true,
    get: function outerHeight() {
        return 1536
    },
    set: function outerHeight(value) {
        this.outerWidth = value
    },
})
Object.defineProperty(window, 'innerHeight', {
    configurable: true,
    enumerable: true,
    get: function innerHeight() {
        return 760
    },
    set: function innerHeight(value) {
        this.innerHeight = value
    },
})
Object.defineProperty(window, 'innerWidth', {
    configurable: true,
    enumerable: true,
    get: function innerWidth() {
        return 1470
    },
    set: function innerWidth(value) {
        this.innerWidth = value
    },
})
Object.defineProperty(window, 'screenLeft', {
    configurable: true,
    enumerable: true,
    get: function screenLeft() {
        return 0
    },
    set: function screenLeft(value) {
        this.screenLeft = value
    },
})
Object.defineProperty(window, 'screenTop', {
    configurable: true,
    enumerable: true,
    get: function screenTop() {
        return 0
    },
    set: function screenTop(value) {
        this.screenTop = value
    },
})
Object.defineProperty(window, 'screenX', {
    configurable: true,
    enumerable: true,
    get: function screenX() {
        return 0
    },
    set: function screenX(value) {
        this.screenX = value
    },
})
Object.defineProperty(window, 'screenY', {
    configurable: true,
    enumerable: true,
    get: function screenY() {
        return 0
    },
    set: function screenY(value) {
        this.screenY = value
    },
})
// delete global
delete require
delete __filename;
delete __dirname;
ActiveXObject = undefined

Object.defineProperty(window, 'Storage', {
    configurable: true,
    enumerable: false,
    writable: true,
    value: function Storage() {
    }
})
Object.defineProperties(Storage.prototype, {
    [Symbol.toStringTag]: {
        value: "Storage",
        writable: true,
        enumerable: false,
        configurable: true
    }
})

Object.defineProperty(Storage.prototype, 'setItem', {
    configurable: true,
    enumerable: true,
    writable: true,
    value: function setItem(key, value) {
        this[key] = value
    }
})
Object.defineProperty(Storage.prototype, 'getItem', {
    configurable: true,
    enumerable: true,
    writable: true,
    value: function getItem(key, value) {
        return this[key]
    }
})

还有很多就不全部弄出来了,主要是打算说一下rpc实现。看了某个大佬的感觉很牛。

结果

总结

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

更多推荐