Хороший, плохой, злой способ пройти задание от TJournal + АльфаБанк

  • понедельник, 16 июля 2018 г. в 15:55:00

Зашёл на TJournal и наткнулся на такой блок. Follow the white rabbit...

Конечно, мне стало интересно и я начал проходить тест по JavaScript.

Мне нравятся шифры, криптография, стенография и прочая подобная ересь (когда-то увлекался этим).

Я не знаток JavaScript'a, но решил попробовать пройти тест. Скажу честно, в общей сумме, я потратил минут 20-30, чтобы выполнить эту задачу.

Определить шифр было легко. Кликаем правой кнопкой мыши на чувака из фотки (Блез де Виженер) и в поиске картинок Google, находим соответствующую инфу о шифре.

Шифр Виженера (фр. Chiffre de Vigenère) — метод полиалфавитного шифрования буквенного текста с использованием ключевого слова.

Чтобы понять эту таблицу, дальнейшие действия и как работает шифр, смотрите видео ниже (Влад вам все объяснит) и этот код

Теперь мы шарим в этой теме и расшифруем текст, который указан в задаче. Для этого, я использовал данную утилиту. Ключ для расшифровки/шифровки: ВЕЧЕРЯ

После расшифровки, получаем такой текст:

здесь могла быть красивая цитата из умной книги, но ты получишь только эти исходные данные: четыре,ноль,пять,один,два,три 28,14,19,173,44,57. поменяй их местами и вставь в код.

Далее, чтобы скопировать функцию, нам потребуется DevTools, а точней — Console (консоль).

И скоро вы поймете, почему заголовок так называется.

Хороший способ?

Я потратил минут 15 на то, чтобы догнать, что «четыре,ноль,пять,один,два,три», нужно писать цифрами...

Вручную код писать нету смысла, я решил прибегнуть к консоли и программно вытащил код:


_14
[...document.querySelectorAll('.task__code.state--animated span')].map((s) => s.getAttribute('data-text')).join('');
_14
_14
// Теперь разберем функцию:
_14
function getSequence(str1, str2) {
_14
const arr1 = str1.split(',');
_14
const arr2 = str2.split(',');
_14
let i = 0;
_14
let arr3 = arr2.map(n => i = arr2[i]);
_14
let result = '%s-%s-%s-%s-%s-%s';
_14
arr3.forEach(n => {
_14
result = result.replace('%s', arr1[n]);
_14
});
_14
return result;
_14
}

  1. Функция получает 2 аргумента, строки с цифрами: 28,14,19,173,44,57 и 4,0,5,1,2,3.
  2. Преобразует строки в массив чисел.
  3. Получает верный порядок индексов.
  4. Поочередно заменяет «%s» на число, соответствующее по индексу.

Верный ответ: 44-19-57-173-14-28

Тут можно проверить, как работает этот алгоритм — https://goo.gl/UtMWMm

Плохой способ?

Так вот, зачем нам нужен DevTools? На самом деле, это крутая штука и сейчас вы поймете почему.

Открываем консоль и выбираем вкладку «Source». Далее, нам нужно поставить точку остановки — «breakpoint» на тот момент, когда проверяется введённое значение пользователем.

Теперь введите любое значение, например «hello» и браузер остановит действие на этой точке. Справа вы увидите переменную «t», если она false, то тест считается проваленным.

Нам надо установить t = true. В итоге вас переведет на страницу с инфой, что вы успешно прошли тест.

Карл, а вот для тебя видео с инструкцией выше.

#js#взлом#tjournal#пентагон#способ