Сообщение от DjDiablo
|
Чо ты завёлся, никто и не сомневается что могёш )))
|
кто завелся? чет такого не помню. А вообще я к тому что делать проверку через toString бессмысленно.
Сообщение от DjDiablo
|
И более того с чего ты взял что все зловреды заменяют toString ?
|
не понял к чему это?
а насчет toString вот небольшой метод, который легко заменит метод и фиг ты узнаешь по toString что это нативный или нет.
Вот вам защита
function replace_method( context, method, fn ) {
var old = context[ method ];
if ( old.toString === Function.prototype.toString ) {
fn.toString = function() { return old.toString() }
fn.toString.toString = function() { return old.toString.toString() }
fn.toString.toString.toString = fn.toString.toString;
} else {
fn.toString = old.toString;
}
return context[ method ] = fn;
}
// ================ проверка =====================
var x=function(){alert(100)};
x.toString = function() {
return 'This is my lib method';
}
// ------- меняем метод -------
x = replace_method( window, 'x', function(){
alert( 100500 );
});
// -------
alert( x.toString );
alert( x.toString.toString );
alert( x.toString.toString.toString );
alert( x.toString.toString.toString.toString );
alert( x.toString.toString.toString.toString.toString );
alert( x.toString.toString.toString.toString.toString.toString );
alert( x );
x();
// -------- второй вариант без пользовательского toString -----------
var y=function(){alert(200)};
// ------- меняем метод -------
y = replace_method( window, 'y', function(){
alert( 200500 );
});
// -------
alert( y.toString );
alert( y.toString.toString );
alert( y.toString.toString.toString );
alert( y.toString.toString.toString.toString );
alert( y.toString.toString.toString.toString.toString );
alert( y.toString.toString.toString.toString.toString.toString );
alert( y );
y();
// ------- меняем метод -------
replace_method( window, 'alert', (function( org ) {
return function(){
org.call( this, ["Привет: "].concat( [].slice.call( arguments ) ) );
}
})( window.alert ));
// -------
alert( y.toString );
alert( y.toString.toString );
alert( y.toString.toString.toString );
alert( y.toString.toString.toString.toString );
alert( y.toString.toString.toString.toString.toString );
alert( y.toString.toString.toString.toString.toString.toString );
alert( y );
y();