Представляем Hackium
с Shift-рефакторингом и Shift-интерпретатором
Я очень рад выпустить Hackium, shift-refactor и shift-интерпретатор - три инструмента, которые я использовал для анализа, автоматизации и управления веб-сайтами в течение последнего года. Эти проекты создавались долгое время, они включают в себя техники, которыми я начал заниматься более 20 лет назад. Конечно, эти методы были не более чем хитрым HTTP-прокси и десятками регулярных выражений, но дух был там.
Hackium - это инструмент командной строки, браузер и фреймворк. Во всяком случае, это презентация для лифта. Технически Hackium - это библиотека nodejs, которая расширяет возможности puppeteer для управления связанной версией Chromium, предварительно настроенной для отключения элементов управления безопасностью и предоставления дополнительных API. Это менее броско. На практике Hackium - это браузер, который меньше мешает вам и дает больше.
Для кого предназначен Hackium?
Часто ли вы открываете инструменты разработки, даже на сайтах, над которыми фактически не работаете?
Вы когда-нибудь хотели, чтобы ваш браузер был более полезным в командной строке?
Вы когда-нибудь разочаровывались в том, что веб-сайт может делать то, чего не может API разработчика?
Hackium может быть для вас.
Производители браузеров отдают предпочтение функциям для двух групп пользователей: обычных людей, просматривающих веб-страницы, и, чуть позже, разработчиков веб-приложений. Hackium не для таких людей. Конечно, они могут это использовать. Но это не для них. Их достаточно.
Как использовать Hackium?
Установить Hackium через npm…
$ npm install -g hackium
… И запустите его с помощью команды hackium
….
$ hackium
… И с изумлением наблюдайте, как появляется странно раскрашенный двойник Chrome. Я знаю, пока не слишком увлекательно, но снова зайдите в терминал, и вы сможете поиграть с REPL! REPL позволяет вам взаимодействовать со страницей через API Hackium и Puppeteer. Попробуйте ввести следующее:
page.goto('https://google.com');
Основная часть методов API-интерфейсов браузера и страниц взята из Puppeteer, замечательной библиотеки веб-автоматизации, которая проложила мне путь к созданию Hackium.
См. Github.com/jsoverson/hackium для получения дополнительной информации о параметрах командной строки или используйте hackium init
для создания базового файла конфигурации:
Конфигурация Hackium объединяет то, что обычно было бы утомительным шаблоном, чтобы мы могли сразу перейти к интересующей нас логике. Перехватчики переходят в середину запросов и ответов, а инъекции - это внутристраничные скрипты, которые запускаются до запуска любого кода веб-сайта. Скрипты Hackium - это базовые скрипты nodejs (с ожиданием верхнего уровня), которые имеют доступ к уже запущенным экземплярам browser
и page
.
Shift-рефакторинг
Я сделал превью Shift-рефакторинга почти год назад, и теперь у нас есть версия v1 (на самом деле v2). Shift-refactor - это библиотека преобразования JavaScript, которая использует CSS-подобные селекторы и jQuery-подобный API, чтобы упростить разрезание и изменение исходного кода JavaScript.
const $script = refactor(ast); $script('VariableDeclarationStatement').prepend(`test();`); $script.statements().first().delete(); $script.print();
Если вы когда-либо использовали регулярные выражения для очистки данных или изменения JavaScript, то вы знаете, как сложно создать регулярное выражение для произвольного кода. Shift-рефакторинг - это то, что вам нужно.
Узнайте больше об API на github.com/jsoverson/shift-refactor и поэкспериментируйте с синтаксисом запроса в онлайн-демонстрации здесь: https://jsoverson.github.io/shift-query-demo/
Сменный переводчик
Shift-интерпретатор - это метаинтерпретатор JavaScript, который оценивает JavaScript по частям. Экземпляр интерпретатора принимает узлы абстрактного синтаксического дерева JavaScript (AST) в любом порядке и оценивает эти узлы индивидуально, сохраняя при этом осведомленность об исходной области видимости. Это не обычное поведение, но именно поэтому я начал проект. Эта функция позволяет вырезать только те части исходного кода, которые вам нужны, без фактического переписывания чего-либо.
Зачем кому-то это нужно?
Что ж, представьте, что у вас есть кусок запутанного JavaScript, что-то вроде этого:
Все эти закодированные строки мешают понять источник. Здесь где-то есть метод декодирования, нам просто нужно его найти. Как только мы его найдем, мы сможем просто скопировать логику и декодировать эти строки, но что, если алгоритм кодирования изменится? Или что, если декодирование зависит от состояния приложения? Это становится сложнее.
Shift-интерпретатор позволяет использовать эти методы напрямую. Объедините интерпретатор с shift-refactor для запроса узлов, их интерпретации, а затем обратно в JavaScript. Другими словами, вы можете использовать JavaScript против самого себя.
Я создал интерпретатор сдвига специально для деобфускации исходного кода, но он оказался полезным для общего анализа и отображения потока кода.
Сменный переводчик не для всех. Это мощно, но чревато предостережениями, над которыми стоит работать, только если вы достаточно сумасшедшие, чтобы делать то, о чем я говорю.
Узнайте больше на github.com/jsoverson/shift-interpreter.
Лучше вместе?
Я создавал эти проекты в ответ на дыры, которые обнаружил в своих путешествиях по взлому веб-сайтов, но каждый из них является независимым проектом, который можно использовать и сам по себе.
Однако, владея ими всеми вместе, вы чувствуете себя волшебником, который может крутить паутину в любом направлении, которое вы выберете. Это нельзя упускать.
Еще демо!
Я объявил об этих выпусках в прошлую субботу во время моей сессии в Defcon’s AppSec Village.
На этом занятии я демонстрирую, как начать работу, как интегрироваться с другими сервисами и как объединить Hackium с shift-refactor и shift-интерпретатором для деобфускации JavaScript. Если вы его пропустили, то вам повезло! У версии Defcon края были обрезаны, и я загрузил оригинальную версию сюда:
Я давно хотел, чтобы в этих проектах была функциональность. Было бы неплохо узнать, что я не единственный, кто использует Интернет таким образом. Свяжитесь с нами, если вы найдете эти инструменты полезными!