编辑代码

// 从 webassembly.js 提取 base64 字符串解码函数
var base64ReverseLookup = new Uint8Array(123/*'z'+1*/);
for (var i = 25; i >= 0; --i) {
  base64ReverseLookup[48+i] = 52+i; // '0-9'
  base64ReverseLookup[65+i] = i; // 'A-Z'
  base64ReverseLookup[97+i] = 26+i; // 'a-z'
}
base64ReverseLookup[43] = 62; // '+'
base64ReverseLookup[47] = 63; // '/'

function base64DecodeToExistingUint8Array(uint8Array, offset, b64) {
  var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '=');
  for (; i < bLength; i += 4) {
    b1 = base64ReverseLookup[b64.charCodeAt(i+1)];
    b2 = base64ReverseLookup[b64.charCodeAt(i+2)];
    uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4;
    if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2;
    if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)];
  }
}

// 从 webassembly.js 提取的 base64 字符串
const base64Data1 = "anJnLyE3JVszPUYsfDJ1QW12NVxZKVh+XVNfd0QnKkUiR09laHo+bEBXOHFgNGNDVjtmUTYmMF5SK3RvQiMoZHAxSyRiSE46PFBMblVUeVppIH0/a2EuOUlKLXtNeHMAHFUbAi9NCltGIhoIGS8tSQgaCjgiXBotGRkIXDxKFBopCDwcCDAZUi0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAbmFuAGluZgBOQU4ASU5GAC4AKG51bGwpAFNVRkZBSCBXRUJERVZTISEhISEhISEKAAAAAAAAAAAAAAAZAAsAGRkZAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABkACgoZGRkDCgcAAQAJCxgAAAkGCwAACwAGGQAAABkZGQAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAZAAsNGRkZAA0AAAIACQ4AAAAJAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAEwAAAAATAAAAAAkMAAAAAAAMAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAEDwAAAAAJEAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAARAAAAABEAAAAACRIAAAAAABIAABIAABoAAAAaGhoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAABoaGgAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAABcAAAAAFwAAAAAJFAAAAAAAFAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAAAAAAAAAVAAAAABUAAAAACRYAAAAAABYAABYAADAxMjM0NTY3ODlBQkNERUY=";
const base64Data2 = "BQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAABoAwEAAAQAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAP////8KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAIBADAKAQA=";

// 创建缓冲区并解码
const bufferSize = 70000; // 足够大的缓冲区
const buffer = new Uint8Array(bufferSize);

// 解码两个 base64 字符串
base64DecodeToExistingUint8Array(buffer, 65536, base64Data1);
base64DecodeToExistingUint8Array(buffer, 66240, base64Data2);

// 辅助函数:将字节数组转换为可读字符串(完整输出所有字符)
function bytesToString(bytes, start, length) {
  let result = '';
  for (let i = 0; i < length; i++) {
    const byte = bytes[start + i];
    if (byte >= 32 && byte <= 126) { // 可打印 ASCII
      result += String.fromCharCode(byte);
    } else if (byte === 0) {
      result += '\\0'; // 空字符显示为 \0
    } else {
      result += `\\x${byte.toString(16).padStart(2, '0')}`;
    }
  }
  return result;
}

// 输出完整的解码数据
console.log("=== 第一段数据完整解码结果(65536-66240)===");
console.log(bytesToString(buffer, 65536, 704));

console.log("\n=== 第二段数据完整解码结果(66240-66500)===");
console.log(bytesToString(buffer, 66240, 260));

// 输出十六进制转储(完整显示所有内存区域)
console.log("\n=== 内存区域十六进制完整转储 ===");
for (let i = 65536; i < 66500; i += 16) {
  let line = `0x${i.toString(16).padStart(8, '0')}: `;
  let ascii = '';
  
  for (let j = 0; j < 16; j++) {
    if (i + j < bufferSize) {
      const byte = buffer[i + j];
      line += byte.toString(16).padStart(2, '0') + ' ';
      ascii += (byte >= 32 && byte <= 126) ? String.fromCharCode(byte) : '.';
    } else {
      line += '   ';
      ascii += ' ';
    }
  }
  
  console.log(`${line} |${ascii}|`);
}

// 查找特定字符串并输出其位置
function findString(buffer, str) {
  const bytes = new TextEncoder().encode(str);
  for (let i = 65536; i < 66500; i++) {
    let found = true;
    for (let j = 0; j < bytes.length; j++) {
      if (buffer[i + j] !== bytes[j]) {
        found = false;
        break;
      }
    }
    if (found) {
      console.log(`找到字符串 "${str}" 在偏移量: 0x${i.toString(16)}`);
      return i;
    }
  }
  return -1;
}

console.log("\n=== 特定字符串位置 ===");
findString(buffer, "SUFFAH");
findString(buffer, "0123456789ABCDEF");