您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Fetch and display Bearer tokens from all sites
- // ==UserScript==
- // @name Capture Bearer Token
- // @namespace http://tampermonkey.net/
- // @version 2.0
- // @description Fetch and display Bearer tokens from all sites
- // @author ForestArmy
- // @match *://*/*
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- function displayToken(token) {
- console.log("Captured Bearer Token:", token);
- let existing = document.getElementById("token-box");
- if (existing) return; // Prevent multiple displays
- let div = document.createElement("div");
- div.id = "token-box";
- div.style.position = "fixed";
- div.style.top = "10px";
- div.style.right = "10px";
- div.style.background = "black";
- div.style.color = "white";
- div.style.padding = "10px";
- div.style.borderRadius = "5px";
- div.style.zIndex = "9999";
- div.style.whiteSpace = "pre-wrap";
- div.style.maxWidth = "90vw";
- div.style.overflowX = "auto";
- div.innerText = "Bearer Token: " + token;
- document.body.appendChild(div);
- }
- // Hook Fetch API
- const originalFetch = window.fetch;
- window.fetch = async function(...args) {
- return originalFetch(...args).then(response => {
- let requestHeaders = args[1]?.headers;
- if (requestHeaders) {
- for (let header of Object.keys(requestHeaders)) {
- if (header.toLowerCase() === "authorization" && requestHeaders[header].startsWith("Bearer ")) {
- displayToken(requestHeaders[header]);
- }
- }
- }
- return response;
- });
- };
- // Hook XMLHttpRequest
- const originalXHROpen = XMLHttpRequest.prototype.open;
- XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
- this.addEventListener("readystatechange", function() {
- if (this.readyState === 4) {
- let authHeader = this.getResponseHeader("Authorization");
- if (authHeader && authHeader.startsWith("Bearer ")) {
- displayToken(authHeader);
- }
- }
- });
- return originalXHROpen.apply(this, arguments);
- };
- // Hook Fetch Headers (Works for sites using new Header() API)
- const originalHeaders = window.Headers;
- window.Headers = function(init) {
- if (init) {
- for (let [key, value] of Object.entries(init)) {
- if (key.toLowerCase() === "authorization" && value.startsWith("Bearer ")) {
- displayToken(value);
- }
- }
- }
- return new originalHeaders(init);
- };
- // Hook WebSockets (Experimental)
- const originalWebSocket = window.WebSocket;
- window.WebSocket = function(...args) {
- let ws = new originalWebSocket(...args);
- ws.addEventListener("message", function(event) {
- let data = event.data;
- if (typeof data === "string" && data.includes("Bearer ")) {
- let match = data.match(/Bearer\s+([A-Za-z0-9._-]+)/);
- if (match) {
- displayToken(match[0]);
- }
- }
- });
- return ws;
- };
- })();