Добрый день, айтишники. Где-то год назад примерно, я учился в автошколе, где каждый день решали тесты на сайте пдд. И чисто ради интереса, немного покопавшись, я написал скрипт, который выдает правильный ответ. Подробнее Сдаем экзамен ПДД на сайте без ошибок. Сейчас поговорим о недавно возникшей подобной ситуации. Один человек попросил меня посмотреть, есть ли такая недоработка на сайте
Вроде все ок, обычный тест, согласны? Смотрим лог любимого расширения для хрома - Web Sniffer, и видим
Устанавливаем фильтр, чтобы лог отображал только POST запросы, которые отправлялись на master-test.net
Всего лишь один запрос, отлично. Смотрим параметры, которые передавались в запросе и адрес сайта, куда направлялся запрос
Запрос принимает, скрипт находящийся по этому адресу -
Посмотрите на конец адреса сайта, разве не одни и те же цифры? Значит id - это номер теста. Скорее всего, так сайт получает все данные для теста. Идем на любой REST API TEST и отправляем POST запрос. Я буду пользоваться самым удобным,
id - служит как идентификатор теста, 104943 - номер теста. Отправляем запрос, и видим
Как мы видим, в ответ получаем JSON данные, только вместо обычного текста, мы получили юникод (UNICODE). Идем на
Вставляем весь полученный текст из запроса в поле и нажимаем Convert.
Теперь легче читается, правда? Это JSON объект со всеми вопросами и ответами на них. Теперь нам нужно написать скрипт, который будет отправлять POST запрос на адрес с нужными параметрами, а также парсить JSON из полученного ответа. Если будем разбирать каждый шаг, то из статьи получится целая книга, поэтому моменты написания скрипта, я не буду показывать. В результате, у меня получился примерно такой скрипт
Заходим на тест, открываем консоль и вставляем скрипт, и конечно же жмем Enter
Отлично, как мы видим, скрипт работает. Попробуем ответить на все вопросы, каждый раз запуская скрипт. Итог
Скрипт помог нам решить тест со 100% правильными ответами. Мы конечно же могли бы, чтобы в вопросе подсвечивался правильный ответ, но мы ведь любим когда все просто, правда? Скрипт работает абсолютно на любом тесте с данного сайта. С вами был GoodSmile, на этом мы с вами прощаемся, до скорых встреч!
Ссылка скрыта от гостей
. Получив данные для входа, я начал внимательно изучать, как и куда ответы загружаются. В качестве теста, я взял предмет "МСС. Метрология 3 семестр", который я точно не знал. Начинаем тест и видим
Устанавливаем фильтр, чтобы лог отображал только POST запросы, которые отправлялись на master-test.net
Ссылка скрыта от гостей
. Видим что передавался всего лишь один параметр id со значением 104943. Эти цифры что-то напоминают, правда? Вернемся на тест и посмотрим на адресную строку
Ссылка скрыта от гостей
. В качестве адреса указываем
Ссылка скрыта от гостей
, выбираем метод POST, и заполняем поле для параметров.id - служит как идентификатор теста, 104943 - номер теста. Отправляем запрос, и видим
Ссылка скрыта от гостей
для декодирования юникода в текст.Вставляем весь полученный текст из запроса в поле и нажимаем Convert.
JavaScript:
var testNum = location.pathname.replace('/ru/quiz/testing/id/quiz/testing/id/', '');
var url = "https://master-test.net/ru/site/json/load-quiz.proxy"
var quizNum = document.getElementsByClassName('x-tree-node-el x-tree-node-leaf x-unselectable x-tree-selected')[0].children[3].href;
var quizTitle = document.getElementsByClassName('x-tree-node-el x-tree-node-leaf x-unselectable x-tree-selected')[0].children[3].children[0].getAttribute('qtip');
quizNum = quizNum.replace('https://master-test.net/ru/quiz/testing/id/quiz/testing/id/'+testNum+'#quiz_item_', '');
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var json = JSON.parse(xhr.responseText);
for ($i=0; $i < json.data.items.length; $i++)
{
if (quizTitle==json.data.items[$i].data.title)
alert(json.data.items[$i].data.correct_answer);
}
}
};
var data = 'id=' + testNum ;
xhr.send(data);
Заходим на тест, открываем консоль и вставляем скрипт, и конечно же жмем Enter
P.S. ВСЯ ИНФОРМАЦИЯ ПРЕДОСТАВЛЕНА ИСКЛЮЧИТЕЛЬНО В ОЗНАКОМИТЕЛЬНЫХ И ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЯХ