Rust, Хакинг на Rust

Курс — Хакинг на Rust. #9 Типы данных и структуры: Примитивы, строки, коллекции

Здравствуйте, дорогие друзья.

Типы данных в Rust — это основа, на которой строится безопасность и предсказуемость кода. Для хакеров это означает:

  • Защиту от эксплуатации (например, переполнения буфера).
  • Контроль над представлением данных (например, сетевые пакеты).
  • Эффективную работу с памятью (без утечек и повреждений).

Разберем ключевые типы и структуры, которые пригодятся в кибербезопасности.

3.1 Примитивные типы: целые, числа с плавающей точкой, булевы

Rust требует явного указания типов, что предотвращает ошибки:

Целые числа

  • u8, i8 — 8-битные беззнаковые/знаковые.
  • u16, i16, …, u128, i128.
  • usize/isize — размером с указатель (зависит от архитектуры).

Пример :

Защита от переполнения :
В debug-режиме Rust проверяет целочисленные переполнения. В release-режиме — оборачивает значения (как в C), но это можно изменить через атрибуты.

Числа с плавающей точкой

  • f32, f64 (по умолчанию).

Пример :

Символы (char)

  • Unicode-символ, занимает 4 байта.

Пример :

Булевы значения

  • true/false.

3.2 Строки: String и &str

Строки в Rust — сложная тема, но именно их безопасность делает язык уникальным.

&str (строковый срез)

  • Неизменяемая ссылка на UTF-8 данные.
  • Используется для литералов:

String

  • Владеет данными, выделенными в куче.
  • Изменяемый и расширяемый:

Пример уязвимости в C :

В Rust :

3.3 Коллекции: Vec, HashMap, VecDeque

Коллекции в Rust управляют памятью автоматически, но с гарантиями безопасности.

Вектор (Vec<T>)

  • Динамический массив, хранящий данные в куче.
  • Используется для хранения перехваченных пакетов, брутфорс-списков и т.д.

Пример :

Хэш-карта (HashMap<K, V>)

  • Ассоциативный массив для хранения метаданных атаки:

Очередь (VecDeque<T>)

  • Для обработки пакетов в порядке очереди:

3.4 Структуры: моделирование данных

Структуры позволяют создавать сложные типы для представления объектов (пакеты, эксплойты, статусы).

Пример :

Использование :

3.5 Перечисления: структурирование состояний

Перечисления (enum) идеальны для моделирования статусов атаки или типов пакетов.

Пример :

Обработка :

3.6 Обработка ошибок: Result и Option

Rust не использует исключения. Вместо этого:

  • Result<T, E> — для операций, которые могут завершиться ошибкой.
  • Option<T> — для необязательных значений.

Пример сетевого запроса :

3.7 Работа с сырыми данными

Для анализа бинарных протоколов используйте срезы байтов (&[u8]):

Пример парсера заголовка TCP :

3.8 Практическое задание: анализ пакета

Задача : Напишите функцию, которая проверяет, содержит ли ICMP-пакет тип «Echo Request».

Решение :

Итог
Типы данных и структуры в Rust — это инструменты для создания безопасных и предсказуемых хакерских инструментов:

  • Примитивы предотвращают целочисленные переполнения.
  • Строки и коллекции защищают от переполнения буфера.
  • Структуры и перечисления структурируют хаотичные данные (протоколы, статусы).

В следующих главах мы углубимся в низкоуровневые операции и создание эксплойтов. А пока — попробуйте написать парсер для UDP-пакета, используя структуры и срезы байтов.

Хакинг на языке программирования Rust

На этом все. Всем хорошего дня!

Цикл статей по курсу — «Хакинг на Rust».