RU | 'PDF - Javascript' from root-me.org
Пошли более сложные и интересные задания, и давайте сразу приступим к одному из них.
В описании нам ничего не дается, кроме строчки - “Find the correct password!”
Открываем нашу pdf’ку и очевидно здесь мы ничего полезного не находим, только кучу символов:
Для этого задания нам понадобится хороший инструмент для анализа pdf, мой выбор пал на - peepdf, конечно выбор был не широкий, но очень рекомендую именно этот вариант (также отлично подойдет для анализа вредоносных файлов).
Открываем cmd/terminal и запускаем наш скрипт с флагом -i, чтобы работать в оболочке:
peepdf.py -i ch7.pdf
Далее, в выводе надо обратить внимание на поле Objects with JS code:
Исходя из названия поля, очевидно что это именно то, что мы ищем.
Чтобы извлечь весь javascript из нашего файла, введем следующее:
extract js > crackme.js
Закрываем peepdf, он больше не понадобится.
Открыв получившийся файл, мы натыкаемся на хорошо читаемый код. Не знаю как решали это другие, но в первую очередь я обратил внимание на алгоритм шифрования строки с помощью XOR и двух массивов чисел:
Ключ известен, алгоритм тоже, осталось найти какую строку программа шифрует, а точнее содержимое строки HeGJR4. Но для начала я просто перепишу этот алгоритм на питоне, чтоб было удобнее:
Я решил сразу перебрать два массива, ибо один из них может содержать правильный ключ.
Осталось разобраться со строкой, которую я упоминал выше. Все объявленные литеральные константы нам не подойдут, я просто проверил их перебором с помощью скрипта (ибо их всего 2 штуки). Но в самом конце анализируемого кода, мы можем обнаружить интересную функцию и 3 переменных:
Смотрим что переменная ozjcYQp сначала принимает значение false, но на след. строчке ей уже присваивается какая то строка с непонятным содержимым, но это неважно, главное что if (ozjcYQp) == true и код в условии выполнится. Искомая строка состоит из конкатенации трёх строк - YcQpjo + cYQpjo + zjocYQp. Посмотрев ниже на их объявления, можно догадаться что .author .title .subject это всё метадата из pdf файла.
Теперь нам понадобится exiftool, чтобы узнать значение этих переменных. Опять заходим в cmd/terminal и вбиваем:
exiftool ch7.pdf
Вывод с интересующими нас переменными ниже:
Складываем строку в правильном порядке:
HeGJR4 = YcQpjo + cYQpjo + zjocYQp;
HeGJR4 = author + title + subject;
HeGJR4 =”dVbFZxLu7en8hJhhFfCTIOer76hBPONCxj5oWJOch2E0ir5BI05QuClyYTLnHBmzI5xlmqMpKN14VZNWuCulWR2fy4X6jS3j”;
Теперь можно подставлять в наш скрипт эту строку и проверять вывод:
Первый вариант вывода нам подходит больше, поэтому анализируем его.
Видим что переменная key состоит из объединения трёх строк:
var key=’tXy’+cYQpjo(она же title)+’YaK’
Складываем строки и ключ наш