Представляем 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 края были обрезаны, и я загрузил оригинальную версию сюда:

Я давно хотел, чтобы в этих проектах была функциональность. Было бы неплохо узнать, что я не единственный, кто использует Интернет таким образом. Свяжитесь с нами, если вы найдете эти инструменты полезными!