当前位置: 首页 > news >正文

Hook javascipt 获取的时间 -- xyctf 2025 ez_puzzle wp

本文章附带TP(Thinking Process)!

题目提供了提示:需要我在两秒内完成拼图

  • [v] 我需要检查js逻辑

js中存在混淆与反调试

  • 尝试反混淆
  • [v] 尝试绕过反调试

既然无法反混淆,但是反调试可绕过,是否有方法在运行时调试,并干扰js对拼图完成时间时间的判断?

  • 题目代码经过高度混淆,已经无法辨识,我现在需要找到是否有方式能在控制台当中分析函数逻辑

代码过于混乱,已经无法识别逻辑,但是所有逻辑均在本地完成,没有任何网络通信

  • [v] 或者,我是否能使用某种方式控制js获取到的时间?例如直接修改操作系统时间?
  • [v] 我现在需要了解js获取时间的大部分方式,并编写代码
// 劫持时间起点(记录页面加载时间)
const baseTime = Date.now();

// 覆盖所有时间获取方式
(function() {
  // 劫持 Date 对象
  const OriginalDate = Date;
  Date = function() {
    if (new.target) { // 当被 new 调用时(如 new Date())
      return new OriginalDate(baseTime + 1000); // 返回固定时间
    }
    return OriginalDate.apply(this, arguments);
  };
  Date.now = () => baseTime + 1000; // 固定为开始时间+1秒
  Date.parse = OriginalDate.parse;
  Date.UTC = OriginalDate.UTC;

  // 劫持 performance.now()
  const originalPerfNow = performance.now;
  performance.now = () => 1000; // 固定返回1秒

  // 劫持 setTimeout/setInterval 的延迟计算
  const originalSetTimeout = window.setTimeout;
  window.setTimeout = function(callback, delay, ...args) {
    return originalSetTimeout(callback, 0, ...args); // 强制所有定时器立即触发
  };

  const originalSetInterval = window.setInterval;
  window.setInterval = function(callback, delay, ...args) {
    return originalSetInterval(callback, 0, ...args); // 强制所有间隔为0
  };
})();
  • [v] 我该如何在js执行前就执行这段代码?有什么浏览器插件能做到吗

编写油猴脚本

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      2025-04-05
// @description  try to take over the world!
// @author       You
// @match        http://eci-2ze2r3f9jd169rxoou1d.cloudeci1.ichunqiu.com/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=ichunqiu.com
// @grant        none
// ==/UserScript==

(function() {
  'use strict';
  // 劫持时间起点
  const baseTime = Date.now();

  // 覆盖所有时间API
  const OriginalDate = Date;
  window.Date = function() {
    if (new.target) {
      return new OriginalDate(baseTime + 1000);
    }
    return OriginalDate.apply(this, arguments);
  };
  Date.now = () => baseTime + 1000;
  Date.parse = OriginalDate.parse;
  Date.UTC = OriginalDate.UTC;

  performance.now = () => 1000;

  window.setTimeout = (callback, delay, ...args) => {
    return window.setTimeout(callback, 0, ...args);
  };
  window.setInterval = (callback, delay, ...args) => {
    return window.setInterval(callback, 0, ...args);
  };
})();
console.log("Date.now() ->", Date.now());      // 应返回固定值
console.log("new Date() ->", new Date());     // 显示固定时间
console.log("performance.now() ->", performance.now()); // 显示1000

我现在成功hook了时间,再次尝试拼图,成功获得flag

相关文章:

  • Vue3 Composition API 深度开发指南
  • ECharts配置优化
  • 信息学奥赛一本通 1861:【10NOIP提高组】关押罪犯 | 洛谷 P1525 [NOIP 2010 提高组] 关押罪犯
  • 软考系统架构设计师之大数据与人工智能笔记
  • [ctfshow web入门] web17
  • 力扣HOT100之链表:19. 删除链表的倒数第 N 个结点
  • 【MySQL 数据库】数据表的操作
  • 永磁同步电机无速度算法--基于HOPLL的滑模观测器
  • Python设计模式:组合模式
  • JavaScript基础--22-call、apply 和 bind
  • PPP实验笔记
  • C#语言的饼图
  • java.io快读快写StreamTokenizer、PrintWriter
  • 低级错误 System.setProperty 值为空时引发空指针
  • ubuntu,react的学习(1)
  • PandaAI:一个基于AI的对话式数据分析工具
  • 2025 年前端与后端开发方向的抉择与展望-优雅草卓伊凡
  • C++: 类型转换
  • 构建k8s下Helm私有仓库与自定义Chart开发指南
  • Workbench运动副与dyna对应关系(一)
  • 上海软件定制开发公司/百度首页排名优化平台
  • 视频网站亏损也做/怎样在百度上发布作品
  • 建设征信注册中心网站/互联网营销师证书有用吗
  • 网站系统建设开票要开什么/国内重大新闻
  • 引导企业做网站/新品上市怎么做宣传推广
  • wordpress的上传大小/seo引擎优化教程