吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1497|回复: 23
收起左侧

[Web逆向] 【Web逆向】头号老玩家逆向分析

  [复制链接]
hualy 发表于 2024-4-24 01:15
本帖最后由 hualy 于 2024-4-24 12:21 编辑

网站:https://www.thlaowanjia.com/3554.html 打开开发者模式就转到about:blank

查一下资料:阻止某些网站打开调试就跳转

获得代码:

window.addEventListener('beforeunload', function (e) { e.preventDefault();e.returnValue = '' });

优化后,刚开始觉得后面还会有用,发现到最后就不用了,嗯\~,学习一下也行:

window.addEventListener('beforeunload', function (e) {
    e.preventDefault();
});

像这种有触发条件的【F12】,一般,我们都可以在事件监听器找到答案,找呗,有学过相关知识的可以分析,这个不可能是哪一个,比如【click】点击事件,不过为了稳妥,我是一个一个找,怎么样判断是不是相关的事件,可以进行第三步移除,然后再触发此事件,比如再按F12

1.PNG

接着,会弹出如下图所示,说明不是第一个事件相关

2.PNG

那就继续重复呗,找呗,不过不要硬找,要有技巧的地找,如二分法,先砍掉一半,再触发,如果触发成功,那说明在这一半事件中,可以节省很多时间,然后还可以再学习学习相关的事件,不会就问GPT:

DOMContentLoaded: 当网页的DOM结构完全加载并解析完成之后,不包括图片和其他媒体文件,会触发此事件。
click: 当用户点击鼠标按钮后释放时触发。
contextmenu: 当用户点击鼠标右键或者使用上下文菜单按键时触发,通常用于显示页面的右键菜单。
cut: 当用户执行剪切操作时触发,可以通过JavaScript访问剪切板数据。
hashchange: 当URL的哈希部分(即URL中"#"后面的部分)发生变化时触发。
keydown: 当用户按下键盘上的某个键并保持时触发。
keypress: 当用户按下键盘上的某个键并释放时触发,通常用于检测字符输入。
load: 当整个页面包括所有依赖资源如图片、样式表等完全加载后触发。
message: 当接收到来自其他窗口、帧或浏览器插件的消息时触发。
pjax:complete: 这是一个由某些JavaScript库定义的自定义事件,通常在PJAX(一种快速页面加载技术)请求完成后触发。
pjax:send: 这也是一个自定义事件,通常在PJAX请求发送之前触发。
popstate: 当用户操作浏览器的历史记录,如点击后退按钮导致页面后退时触发。
resize: 当浏览器窗口或框架的大小发生变化时触发。
scroll: 当用户滚动页面时触发。

接着,成功找到相对应的事件了,是【resize】:当浏览器窗口或框架的大小发生变化时触发。

3.PNG

点进去查看jquery-2.2.4.min.js?v=173060,好家伙,看不懂就不要管了!!!别学我,死要分析,后面才发现,跟这个js关系不大,浪费了我好多时间

4.png

【复盘】:jquery-2.2.4.min.js是一个框架来的,没必要死磕,不要觉得前端会改这个,没那么多时间,而且这是一个网络加载的js(事后发现),那就更不可能了

5.png

那就到shield.js了,一看,好家伙,限制全放这了

6.png

我认为这个js写得代码还是很不错的,对前端限制比较全面,可以学习学习,代码如下:

//屏蔽右键菜单
document.oncontextmenu = function (event) {
        if (window.event) {
                event = window.event;
        } try {
                var the = event.srcElement;
                if (!((the.tagName == "INPUT" && the.type.toLowerCase() == "text") || the.tagName == "TEXTAREA")) {
                        return false;
                }
                return true;
        } catch (e) {
                return false;
        }
}//屏蔽剪切
document.oncut = function (event) {
        if (window.event) {
                event = window.event;
        } try {
                var the = event.srcElement;
                if (!((the.tagName == "INPUT" && the.type.toLowerCase() == "text") || the.tagName == "TEXTAREA")) {
                        return false;
                }
                return true;
        } catch (e) {
                return false;
        }
}//禁止f12
function fuckyou() {
        window.close(); //关闭当前窗口(防抽)
        window.location = "about:blank"; //将当前窗口跳转置空白页
}//禁止Ctrl+U
var arr = [123, 17, 18];
document.oncontextmenu = new Function("event.returnValue=false;"), //禁用右键
window.onkeydown = function (e) {
        var keyCode = e.keyCode || e.which || e.charCode;
    var ctrlKey = e.ctrlKey || e.metaKey;
    console.log(keyCode + "--" + keyCode);
    if (ctrlKey && keyCode == 85) {
                e.preventDefault();
    }
    if (arr.indexOf(keyCode) > -1) {
                e.preventDefault();
    }
}
function ck() {
        console.profile();
        console.profileEnd();
        //我们判断一下profiles里面有没有东西,如果有,肯定有人按F12了,没错!!
        if (console.clear) {
                console.clear()
        };
        if (typeof console.profiles == "object") {
                return console.profiles.length > 0;
        }
}
function hehe() {
        if ((window.console && (console.firebug || console.table && /firebug/i.test(console.table()))) || ( typeof opera == 'object' && typeof opera.postError == 'function' && console.profile.length > 0)) {
                fuckyou();
        }
        if (typeof console.profiles == "object" && console.profiles.length > 0) {
                fuckyou();
        }
}
hehe();
window.onresize = function () {
        if ((window.outerHeight - window.innerHeight) > 200)
    //判断当前窗口内页高度和窗口高度,如果差值大于200,那么呵呵
    fuckyou();
}
document.onkeydown = function (event) {
        if ((event.keyCode == 112) || //屏蔽 F1
                (event.keyCode == 113) || //屏蔽 F2
                (event.keyCode == 114) || //屏蔽 F3
                (event.keyCode == 115) || //屏蔽 F4
                // (event.keyCode == 116) || //屏蔽 F5
                (event.keyCode == 117) || //屏蔽 F6
                (event.keyCode == 118) || //屏蔽 F7
                (event.keyCode == 119) || //屏蔽 F8
                (event.keyCode == 120) || //屏蔽 F9
                (event.keyCode == 121) || //屏蔽 F10
                (event.keyCode == 122) || //屏蔽 F11
                (event.keyCode == 123)) { //屏蔽 F12
                return false;
        }
}
window.onhelp = function () {
        return false;
};
function forbidKeyboard() {
        $(document).keydown(function(e) {
                /*9:Tab键, 17:Control键, 18:Alt键, 123:F12键, 83:S键*/
                var keyboardCode = [9, 17, 18];
                for (i in keyboardCode) {
                        if (keyboardCode[i] == e.keyCode) {
                                return false;
                        }
                }
                if ((e.keyCode == 83) && (e.ctrlKey || e.metaKey)) {
                        return false;
                }
        });
        /*禁止文本选择功能*/
        $(document).bind("selectstart",function(){return false;});
}
$(function(){
        forbidKeyboard();
});

看到了这么多的函数,那就都重写一下吧,不知道为什么这样子重写的小伙伴可以参考一下我上一篇文章【Web逆向】关于我是如何解决mooc禁止右键、复制,里面有比较详细的介绍

window.addEventListener('beforeunload', function (e) { e.preventDefault();e.returnValue = '' });
// 重定义事件处理函数为空函数
    document.oncontextmenu = function() {};
    document.oncut = function() {};
    window.onkeydown = function() {};
    window.onresize = function() {};
    window.onhelp = function() {};

    // 等待DOM完全加载
    window.addEventListener('load', function() {

        // 在尝试覆盖它们之前检查函数是否存在
        var originalFuckYou = window.fuckyou || function() {};
        var originalCk = window.ck || function() {};
        var originalHehe = window.hehe || function() {};
        var originalForbidKeyboard = window.forbidKeyboard || function() {};

        // 覆盖函数
        window.fuckyou = function() {
            console.log("fuckyou 函数现在为空。");
            // 可选地,如果需要可以调用原始函数
            // originalFuckYou();
        };

        window.ck = function() {
            console.log("ck 函数现在为空。");
            // originalCk();
        };

        window.hehe = function() {
            console.log("hehe 函数现在为空。");
            // originalHehe();
        };

        window.forbidKeyboard = function() {
            console.log("forbidKeyboard 函数现在为空。");
            // originalForbidKeyboard();
        };

        // 尝试移除通过jQuery绑定的事件监听器,如果它们存在
        try {
            $(document).off("keydown");
            $(document).off("selectstart");
        } catch (e) {
            console.log("未能移除 jQuery 事件绑定,或 jQuery 未加载。");
        }
    });

气氛都到这了,何不油猴一下呢,不知道怎么样使用油猴的小伙伴,可以参考一下简单来说就是复制代码,然后放到新建的油猴脚本

【我又来求好评啦\~】

// ==UserScript==
// @name         头号老玩家解除限制
// @namespace    http://tampermonkey.net/
// @version      2024-04-23
// @description  头号老玩家解除限制,使得可以右键菜单、剪切、Ctrl+U、F1~F12、文本选择、Tab键、Control键、Alt键
// @author       hualy
// @match        https://www.thlaowanjia.com/3554.html
// @icon         https://www.google.com/s2/favicons?sz=64&domain=thlaowanjia.com
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

// 测试使用
    // window.addEventListener('beforeunload', function (e) { e.preventDefault();e.returnValue = '' });

// 重定义事件处理函数为空函数
    document.oncontextmenu = function() {};
    document.oncut = function() {};
    window.onkeydown = function() {};
    window.onresize = function() {};
    window.onhelp = function() {};

    // 等待DOM完全加载
    window.addEventListener('load', function() {

        // 在尝试覆盖它们之前检查函数是否存在
        var originalFuckYou = window.fuckyou || function() {};
        var originalCk = window.ck || function() {};
        var originalHehe = window.hehe || function() {};
        var originalForbidKeyboard = window.forbidKeyboard || function() {};

        // 覆盖函数
        window.fuckyou = function() {
            console.log("fuckyou 函数现在为空。");
            // 可选地,如果需要可以调用原始函数
            // originalFuckYou();
        };

        window.ck = function() {
            console.log("ck 函数现在为空。");
            // originalCk();
        };

        window.hehe = function() {
            console.log("hehe 函数现在为空。");
            // originalHehe();
        };

        window.forbidKeyboard = function() {
            console.log("forbidKeyboard 函数现在为空。");
            // originalForbidKeyboard();
        };

        // 尝试移除通过jQuery绑定的事件监听器,如果它们存在
        try {
            $(document).off("keydown");
            $(document).off("selectstart");
        } catch (e) {
            console.log("未能移除 jQuery 事件绑定,或 jQuery 未加载。");
        }
    });

    // 如果这些函数是通过页面中的其他脚本定义的,并且定义在油猴脚本之前,
    // 它们可能在油猴脚本运行之前就已经执行了,因此直接覆盖可能不会有效。
    // 为了处理这种情况,我们可以使用一个Mutation Observer来监视新的script元素被添加。
    // 这更复杂,但根据具体情况可能并非必要。

})();

免费评分

参与人数 5威望 +1 吾爱币 +24 热心值 +5 收起 理由
涛之雨 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
liuxuming3303 + 1 + 1 谢谢@Thanks!
FitContent + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
HillBoom + 1 + 1 用心讨论,共获提升!
tomhex + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

悦来客栈的老板 发表于 2024-4-24 08:35
虽然禁用了F12和右键,但是还能打开菜单栏(右上角三个点)。抓包后分析限制都在 shield.js 文件中,将其置空再替换即可。
LYYH 发表于 2024-4-24 07:27
LYYH 发表于 2024-4-24 07:28
披星代月 发表于 2024-4-24 08:08
有点意思,特别是中间那段代码和命名
秦腔小王子 发表于 2024-4-24 08:13
感谢分享
Vincent2018 发表于 2024-4-24 08:14
又学习了点, 一点点进步
xspapdc 发表于 2024-4-24 08:16
js逆向我一直都学不好,大佬厉害
millioxe 发表于 2024-4-24 18:13
感谢分享
学到了 谢谢
ZHOUJIAN75 发表于 2024-4-24 20:12
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-6 09:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表