Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 29.10.2012, 08:51
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от iMaxmaxmaximus
Тред не читал - все методы можно перезаписать так, что другой скрипт не определит их нативность.
Тролль в треде. Будешь нести фигню - получишь добробан на пару дней.
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #32 (permalink)  
Старый 29.10.2012, 12:36
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Сообщение от devote
ну вот, хоть один разумный вариант)))
не говори ГОП пока не перепрыгнешь

Сорри но чем createElement или .appendChild от toString отличается ? что мешает подменить и их ?

<html>
<head>
</head>

<body>
        <!-- здесь прячется зловред -->
	<script>      

         //тело зловреда спрячем полностью в замыкании;
         (function(){ 

                 // метод crack общий для window и всех фреймов, 
                 // даже если frame создаст фрейм, это непоможет

 	         function crack(target){
	
	              var realCreateElement=target.document.createElement;
	
	
	               target.Function.prototype.toString=function(){
	                   return 'trololo';  
	               }
	
	               target.Object.prototype.toString=function(){
	                   return 'trololo';  
	               }
	
	               target.document.createElement=function(param){           
  	  	                 var result=realCreateElement.apply(target.document,arguments);
		           
		                 if (param== 'iframe'){
		                      target.document.documentElement.appendChild( result );
		                      crack(result.contentWindow);
		                }
		
		                return result;               
		         };
	         }
	
	         crack(window);
           })();
    </script>  


     <!-- А здесь мы обманули всех при помощи фрейма -->    
     <script>  
    
    	// 1. создаём фрейм.
      var frame = document.createElement("iframe");
      document.documentElement.appendChild( frame );
       
      // 2. тырим из него toString
      var Func_toString = frame.contentWindow.Function.prototype.toString; // для проверки функций
      var Obj_toString = frame.contentWindow.Object.prototype.toString; // для проверки объектов

        alert (Func_toString.apply("isu98") );
        alert (Obj_toString.apply("isu98") );

    </script>  
    

</body>

</html>
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 29.10.2012 в 14:33.
Ответить с цитированием
  #33 (permalink)  
Старый 29.10.2012, 15:59
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от DjDiablo
Сорри но чем createElement или .appendChild от toString отличается ? что мешает подменить и их ?
мешает сеттер на innerHTML у элементов
var bad = function () { return "LOL"; }; // so sarcastic

// все они не помечены как readonly, но некоторые из них FF их менять не хочет.
// в хроме всё взламывается :)
document.createElement = Document.prototype.createElement = bad;
HTMLElement.prototype.insertAdjacentHTML = bad;

alert(document.createElement); // :((

// начинаем мстить.

// 1. получаем ГО - обычный window может прокатить : 
var win = window;

// window.document -> readonly!
// 2. получаем document.
var doc = win.document; // в doc - тёплый и мягкий экземпляр Document.

// document.body -> readonly!
// 3. получаем наконец-то элемент
var body = doc.body;

// 4. меняем innerHTML (надо бы менять не body'евский, а чей-нибудь другой)
//  и прокалываем фрейму ухо, чтобы можно было его опознать.
var id = "secret_" + (Math.random()*1e6|0);
body.innerHTML += '<iframe id="' + id + '"></iframe>';

// document.body.children -> readonly!
// 5. проходимся по детям и находим наш фрейм.
var myFrame;
for (var i = 0; i < body.children.length; i++) {
    if (body.children[i].id === id) {
        myFrame = body.children[i];
        break;
    }
}

// 6. PROFIT!!!
var normalWindow = myFrame.contentWindow;
var normalDocument = normalWindow.document;

alert( normalDocument.createElement );

Последний раз редактировалось melky, 29.10.2012 в 16:04.
Ответить с цитированием
  #34 (permalink)  
Старый 29.10.2012, 16:35
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от DjDiablo
не говори ГОП пока не перепрыгнешь
а ты в курсе что у вставленного элемента появляется свойство parentNode?
var frame = document.createElement("iframe");
document.documentElement.appendChild( frame );
alert( frame.parentNode );

var frame = document.createElement("iframe");

// если он тут есть, значит метод createElement подменили
// тут можно смело останавливать программу и слать всех лесом.
alert( frame.parentNode );
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #35 (permalink)  
Старый 29.10.2012, 17:01
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Сообщение от devote
а ты в курсе
Да в курсе.
поэтому и написал что appendChild можно подменить тоже. В этом случае кряку применять appendChild самому нет никакой надобности. Достаточно дождаться пока жертва воспользуется нашей обёрткой думая что это appendChild, и подсунуть свои методы в фрейм.

А вот melkiy в ответ на критику алгоритм улучшил серьёзно. Появилось новое поле для размышлений.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 29.10.2012 в 17:09.
Ответить с цитированием
  #36 (permalink)  
Старый 29.10.2012, 17:20
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от BallsShaped
Причем сначала выполняется код расширений, а затем код страницы, так?
кстати, так и не выяснили. А то можно было бы сделать какой-нибудь финт ушами
Object.freeze( Object.prototype );

Object.prototype.toString = function() {
	return false;
};

alert( {} );
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скрыть из исходного кода часть javascript кода. javasc Javascript под браузер 10 12.03.2014 09:32
Рег.выражения, подсветка кода lynch1 Events/DOM/Window 6 17.12.2012 20:04
Пример кода сохранения в базу html страницы генерированного посредством JavaScripts wayzer Серверные языки и технологии 2 06.09.2012 16:46
TabPanel загрузка кода с сервера Jevgeny ExtJS 5 07.12.2010 15:35
Добавление методов к стандартным объектам и совместимость кода Василий Б. Общие вопросы Javascript 10 20.07.2010 12:00