Показать сообщение отдельно
  #9 (permalink)  
Старый 28.05.2015, 11:06
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Сообщение от reinterpret_alexey
tsigel,

Thx, но тут есть проблема. Я почитал мануал mozilla по прокси-объектам (https://developer.mozilla.org/ru/doc..._Objects/Proxy) и выяснилось, что вроде бы нельзя никак именно подменить window, можно только создать новый объект - например, window2. А я не могу "заставить" скрипт использовать мой объект вместо window. Скрипт обфусцирован и велик. Мне потому и надо залогировать все вызовы и чтения свойств, что их не видно из-за обфускации (снять - не вариант). Скрипт может где-то в середине обращаться к window, складывая название объекта window по буковкам в разных callback-ах setInterval/setTimeout, и такая жесть есть. Вот в чем дело.
Можете, и очень просто, для этого достаточно обернуть этот скрипт в свой. Это делается примерно так:

var myWindow = new Proxy({}, {
    get: function(target, name){
        alert('get window element with name: ' + name);
        return name in target?
            target[name] : window[name];
    },
    set: function (target, name, value) {
        alert('set window element with name: ' + name);
        target[name] = value;
        return target;
    }
});
var myDocument = ...;

(function (window, document) {

  // Здесь много вражеского кода, который надо залогировать.

}).call(myWindow, myWindow, myDocument);


Если вы обернете код который хотите прологировать в свою функцию и переопределите там window, то тот код уже никак не доберется до оригинального window (кроме разве что с помощью конструкций типа eval(...) или new Function(...) и таймаут/интервал с о строковым параметром, но их вы можете найти поиском).

Последний раз редактировалось tsigel, 28.05.2015 в 11:21.
Ответить с цитированием