LINUX.ORG.RU

Установить breakpoint на изменение переменной javascript

 , ,


0

1

Возможно ли как то установить breakpoint который сработает когда javascript устанавливает конкретную переменную. Ситуация такая: имеется веб сайт с формой поиска, хотелось бы получить данные из этой формы поиска в программе на php. Однако javascript этого сайта устанавливает где то переменную checksum которая включается в этот запрос. Этого javascript'а на том веб сайте просто бесконечное море, весь он минимизирован какой то утилитой так что всё в одной длинной строчке, функции с однобуквенным названием и т.д. Чтобы разобраться в этом море говна потребуется наверное месяц, я пробовал и за целый день осилил только ничтожно малую часть. При этом текстовые редакторы мерзко притормаживают на таких файлах. Поиск «checksum» в chromium выдаёт только 2 строчки в которых встречается это слово и в обоих оно стоит справа от знака «=». Т.е. присваивается оно где то в другом месте и я не знаю почему это место не находится, может виноват в этом кривой поиск в браузере, может как то подргужается этот скрипт в котором присваивается где то в недрах этой наскриптованной помойки. Теперь понимаю почему браузеры тормозят, переварить такое не просто, куда катится веб!


checksum - свойство какого объекта? можно определить setter с помощью Object.defineProperty() и ловить его там.

dib2 ★★★★★
()

Не помогайте спамеру.

anonymous
()

http://unminify.com/ ну и вообще unminify.

Это место может быть в другом файле, например, притянутом через <script src=...>.
Или происходит что-то вроде a="che"; b="sum"; k=a+"ck"+b; object[k]=...

почему браузеры тормозят, переварить такое не просто

Браузеру совершенно похеру, есть ли там пробелы, и как названы переменные с функциями. Все тормоза собственно не в разборе, а в выполнении этого гуано.

arturpub ★★
()
Ответ на: комментарий от dib2

Можно поподробнее? Т.е. Object.defineProperty() это метод в который передаётся управление например из такого выражения: obj.checksum = somefunction(a,b,c);? И где сам этот метод, как установить в нём breakpoint?

iluha16
() автор топика
Ответ на: комментарий от arturpub

А есть ли скрипт в открытом доступе который можно запустить локально для деобфускации, посмотреть исходники и подправить немного под свои нужды?

Про пробелы понятно, имел ввиду что очень уж много там джаваскрипта. Сам делал веб формы и посложнее но всегда всё организованно было и столько лишнего говна не пихал. Там же видимо несколько поколений быдлокодеров потрудилось.

iluha16
() автор топика
Ответ на: комментарий от iluha16

Фиг знает, я не жскриптер. Нагуглил первое по ключевому слову unminify (процесс упаковки называется minifying).

arturpub ★★
()
Ответ на: комментарий от iluha16

Вообще, если у тебя есть отладчик (там же вообще есть пошаговый отладчик?), то найти цепочку вызовов, где именно ставится checksum, должно быть не проблема. Добавь его в watch-list (там же есть вачлист?) и смотри, где он меняется. Запоминаешь, в след.раз заходишь внутрь. И так пока не придешь к конечной строчке.

arturpub ★★
()
Ответ на: комментарий от iluha16

Object.defineProperty() это метод в который передаётся управление например из такого выражения: obj.checksum = somefunction(a,b,c);? И где сам этот метод, как установить в нём breakpoint?

да, только надо знать какой объект. Если глобальная переменная, то window. Ставишь где-нибудь вначале

window.myVar_ = null
Object.defineProperty(window, "myVar", {
   get: function(){return this.myVar_},
   set: function(newValue){doSomethingWith(newValue); this.myVar_ = newValue}
})

только хз, поможет ли тебе это

filequest
()
Ответ на: комментарий от iluha16

А кто сказал что будет легко? :)

zz ★★★★
()
Ответ на: комментарий от iluha16

Двоичный поиск. Делишь функцию условно пополам, ставишь брейк. Выше-ниже? Делишь, ставишь брейк, выше-ниже? Ну ты понел. Или можно в каждую функцию редактором вставить

if (object.checksum !==== null) { // или как там правильно в жс, спроси у filequest
    console.log("opa-opa! in line" + __LINE__);
    // <-- сюда брейк, как узнать __LINE__ тоже у него спроси
}
И потом просто смотришь, где опа-опа, а там уже рядом.

arturpub ★★
()
Ответ на: комментарий от filequest

То что надо. Надо будет начать изучать джаваскипт подробно.

iluha16
() автор топика
Ответ на: комментарий от arturpub

или как там правильно в жс

В данном случае, уместно воспользоваться приведением типов, наверное. Вообще, если переменная не определена, то она undefined, можно с этого начать!==. А если предположить, что она была выставлена в null предварительно, то != может помочь, он даст false при сравнении как с null так и c undefined.

filequest
()
Ответ на: комментарий от arturpub

Интересная идея. Дело ещё осложняется тем что эта скриптосвалка постоянно делает какие то запросы (как следует из просмотра вкладки «Network» devtools) и что то в них получает и отправляет, всё очень запутанно.

iluha16
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.