来玩一个confirm的小题目
仔细研究了confirm,发现了一些有趣的防伪机制各路大神看看有没有办法在劫持confrim的情况下,通关以下题目
https://blog.xhome.pro/
弹出 You are jailbroke
实际情况中,有可能confrim弹窗是由websocket推送,消息是动态,而且你没法定位到confirm代码,这种情况加入以上防伪机制,应该怎么突破 核心就是阻塞300ms,可以for循环(或者劫持confirm和Date.now?) 来个想法
但是懒得写demo了
可以写个同步xhr和服务器地址
告诉服务器地址最低多少时间反给我来做死延迟
----------------
想了一下
这样还是没法判断什么内容该同意什么内容不该同意
李恒道 发表于 2023-3-21 16:06
来个想法
但是懒得写demo了
可以写个同步xhr和服务器地址
如果劫持方法 window.confirm = () => {}则会默认返回 undefined,会被confirm当做 false来处理了。
你说得同步是什么做到的?node宿主环境还可以用同步方法,浏览器端咋用xhr做到同步的? 王一之 发表于 2023-3-21 16:39
核心就是阻塞300ms,可以for循环(或者劫持confirm和Date.now?)
对,核心就是怎么能实现阻塞主线程300ms,settimeout这些都是异步的,如果是其他语言可以轻易使用sleep这些来阻塞,可js是全异步,采用死循环来不停的判断当前时间戳,while() 是可以做到 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了...
方法被删了= =
透
// ==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...
})();
大致是这么通关的,论坛大佬是真牛皮啊 王一之 发表于 2023-3-21 15:07
核心就是阻塞300ms,可以for循环(或者劫持confirm和Date.now?)
论坛大佬是真牛皮啊{:4_94:} 李恒道 发表于 2023-3-21 17:11
XMLHttpRequest 规范提到 同步 XMLHttpRequest 已经计划从 Web 平台删除,开发者禁止将 new XMLHttpRequ ...
王一之大佬已经搞定,代码贴出来了 cabin 发表于 2023-3-21 17:14
大致是这么通关的,论坛大佬是真牛皮啊
不知道有没有其他更优雅的方法
页:
[1]
2