cabin 发表于 2023-3-21 15:07:22

来玩一个confirm的小题目

仔细研究了confirm,发现了一些有趣的防伪机制
各路大神看看有没有办法在劫持confrim的情况下,通关以下题目

https://blog.xhome.pro/

弹出 You are jailbroke

实际情况中,有可能confrim弹窗是由websocket推送,消息是动态,而且你没法定位到confirm代码,这种情况加入以上防伪机制,应该怎么突破

王一之 发表于 2023-3-21 15:07:23

核心就是阻塞300ms,可以for循环(或者劫持confirm和Date.now?)

李恒道 发表于 2023-3-21 16:06:44

来个想法
但是懒得写demo了
可以写个同步xhr和服务器地址
告诉服务器地址最低多少时间反给我来做死延迟
----------------

想了一下
这样还是没法判断什么内容该同意什么内容不该同意

cabin 发表于 2023-3-21 16:47:02

李恒道 发表于 2023-3-21 16:06
来个想法
但是懒得写demo了
可以写个同步xhr和服务器地址


如果劫持方法 window.confirm = () => {}则会默认返回 undefined,会被confirm当做 false来处理了。
你说得同步是什么做到的?node宿主环境还可以用同步方法,浏览器端咋用xhr做到同步的?

cabin 发表于 2023-3-21 17:04:24

王一之 发表于 2023-3-21 16:39
核心就是阻塞300ms,可以for循环(或者劫持confirm和Date.now?)

对,核心就是怎么能实现阻塞主线程300ms,settimeout这些都是异步的,如果是其他语言可以轻易使用sleep这些来阻塞,可js是全异步,采用死循环来不停的判断当前时间戳,while() 是可以做到

李恒道 发表于 2023-3-21 17:11:17

cabin 发表于 2023-3-21 16:47
如果劫持方法 window.confirm = () => {}则会默认返回 undefined,会被confirm当做 false来处理了。
你 ...

XMLHttpRequest 规范提到 同步 XMLHttpRequest 已经计划从 Web 平台删除,开发者禁止将 new XMLHttpRequest().open(method, url [, async = true [, username = null [, password = null]]]) 方法中 async 参数赋值为 false 使用。
好像gg了...
方法被删了= =

cabin 发表于 2023-3-21 17:14:19

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @descriptiontry to take over the world!
// @author       You
// @match      https://blog.xhome.pro/
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @run-at       document-start
// @grant      none
// ==/UserScript==

(function() {
    'use strict';
   let hookConfirm = window.confirm
   window.confirm = (msg) => {
         if(msg == 'can you take over it') {
             let t1 = Date.now()
             let t2 = Date.now()
             while(t2 - t1 <= 300) {
                t2 = Date.now()
             }
             return true
         } else {
             return hookConfirm.apply(this, arguments);
         }
   }
    // Your code here...
})();

大致是这么通关的,论坛大佬是真牛皮啊

cabin 发表于 2023-3-21 17:15:33

王一之 发表于 2023-3-21 15:07
核心就是阻塞300ms,可以for循环(或者劫持confirm和Date.now?)

论坛大佬是真牛皮啊{:4_94:}

cabin 发表于 2023-3-21 17:17:25

李恒道 发表于 2023-3-21 17:11
XMLHttpRequest 规范提到 同步 XMLHttpRequest 已经计划从 Web 平台删除,开发者禁止将 new XMLHttpRequ ...

王一之大佬已经搞定,代码贴出来了

王一之 发表于 2023-3-21 17:24:41

cabin 发表于 2023-3-21 17:14
大致是这么通关的,论坛大佬是真牛皮啊

不知道有没有其他更优雅的方法
页: [1] 2
查看完整版本: 来玩一个confirm的小题目