Comments 37
Можете смело переопределять возвращаемые функцией Object.getOwnPropertyNames значения, и вставлять туда всякий мусор, если захотите. Так же вы просто можете реагировать на ввод пользователя в консоле. (В примере мы просто выводим ту самую функцию хрома).
Если сайт твой и, может, ты не любишь, когда твой сайт отлаживают, можешь выключать консоль через это:
while(1);
А в целом я не знаю, почему так сделано, и как еще этим можно воспользоваться.

Даже без дебаггера, ваш код сразу виден, может дело в 58 версии?

Мой код очень легко остановить в дебагере, потому что его никто не обфрусцировал.
Если ты хочешь основательно прятать свой код, то можно его обфрусцировать, динамически менять, подкачивать как попало и т.д.
Тут я это не описовал, потому что статья не про это.
На счет "код виден" я не очень понял, что имеете ввиду, показывая скриншот.
На нем показано, как моя программа вывела функцию, которую использует хром, чтобы получить сагешены

Подумал что это браузер ) Надо завязвать писать комменты после бессонной ночи.
По теме — возможно этот способ дополнит ваш код?
Revisiting Disable JavaScript Execution From Console
var gn = Object.getOwnPropertyNames.bind(Object)
var f = function(o) {
if(f.caller && f.caller.toString &&
f.caller.toString().indexOf('object&&ArrayBuffer.isView(o)&&o.length>9999') > 0) {
return ['azaza', 'kek', 'lol']
}
return gn(o);
}
Object.getOwnPropertyNames = f
Может, можно дополнить, но в целом, это на ваше усмотрение, думаю.
Оба трюка не сильно взаимосвязаны, как понял.
Например, можно одновременно загрузить все шрифты, установленные в системе. Правда, тут нужно использовать Flash, без него список шрифтов получить нельзя (разве только жестко вшить).
var oldf=console.log;
console.log=function(){
store.push(arguments);
oldf.apply(console, arguments);
};
Подозреваю, что можно чуток допилить, переопределив console.log на пустую функцию и будет счастье. Ну то есть не очень понятно в чём именно это счастье, но будет.
Можно извратиться, и перехватывать все на свете, но так никто не делает.
После того, как мы пару раз забыли удалить вызовы console.log() и выкатили релиз, где у юзеров файрфокса всё поломалось из-за отсутствия у них console, мы переопределяем объект console и все его функции в продуктивной версии.
Ну зачем же с именно переопределять-то?
if (!window.console) window.console = { log: function() {} };
Я с 11 года пишу (отлаживаю во всех более-менее встречающихся браузерах), и ни разу не сталкивался, чтобы где-то кроме IE могло не быть console.
Но история коммитов всё помнит: 11.11.11 в 9:37 я коммитнул переопределение консоли :)
A стажем меня не надо пугать, я писал и отлаживал ещё под Mozilla, который не Firefox :-)
Я немного запyтался. Идея с гетерами мне понятна, но я не очень понял про значение console.log(x.y)
Если писать console.log(x.y)
, то поле y
будет получено сразу же. Что бы отловить именно обращение к полю из консоли, надо писать console.log(x)
А меня вот интересует другое. Как можно (и можно ли вообще) вырезать принудительные точки останова по ключевому слову debugger;
. Натыкался на такую защиту от отладки на некоторых сайтах — постоянно в «цикле» (по setTimeout()
, кажется) динамически генерируется функция, снова устанавливающая тот же самый таймер и содержащая инструкцию debugger;
. Соответственно, мало того, что от такой «защиты» сайт очень скоро начинал безбожно тормозить и подвешивать интерфейс браузера, так ещё и в инструменты разработчика было не зайти, поскольку они безусловно останавливались на инструкции debugger;
, пропустить которую нет никакой возможности. Так вот, есть ли какой-то способ отключить её к чертям хотя бы в каком-то браузере?
Она работает только с теми точками останова, что поставил сам, через инструменты разработчика. Если в коде встречается инструкция debugger;
, отладчик останавливается (останавливался, когда я последний раз смотрел) на ней независимо от состояния этой кнопки.
Угу. Посмотрел сертификат SSL — записали в читеры! :-)
Я предлагал факт, частоту и характер использования консоли тихо добавлять в поведенческий портрет пользователя наряду с максимальным количеством разных других признаков. По совокупности этих признаков различные эвристики (которые со временем будут добавляться, изменяться и устаревать) проклассифицируют пользователей по степени риска читерства. В любом случае нужны дополнительные проверки и правила.
Почаще бы такие случайности!
Подлавливаем пользователя на вводе в консоли в Google Chrome