Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
firmware-workshop — В ходе этого практического занятия мы извлечём прошивку из зарядной станции для электромобилей, разберёмся в ней и в итоге эмулируем её, чтобы мы могли взаимодействовать с сервисами в реальном времени. | Kitploit
Инструменты/GitHubGitHub/onekey-sec/firmware-workshop
Безопасность встроенных системДинамический анализ (песочница)Безопасность IoTОбратная инженерияАнализ Бинарных ФайловОбучение и ОбразованиеАнализ ПрошивокЛаборатории и Практика

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
GitHub
onekey-sec/firmware-workshop

firmware-workshop

В ходе этого практического занятия мы извлечём прошивку из зарядной станции для электромобилей, разберёмся в ней и в итоге эмулируем её, чтобы мы могли взаимодействовать с сервисами в реальном времени.

Репозиторий
5913203 месяцев назадПроверено Kitploit

Практическое извлечение, исследование и эмуляция прошивки

Присоединяйтесь к нам на этом практическом демо Unblob — гибкого экстрактора прошивки. В ходе этого воркшопа мы извлечём прошивку из зарядной станции для электромобилей, разберём её внутреннее устройство и в итоге эмулируем её, чтобы иметь возможность взаимодействовать с сервисами в реальном времени. Unblob работает как с аппаратными, так и с загружаемыми версиями прошивки, так что у нас богатая среда для работы. Предварительный опыт не требуется, сессия подходит для любого уровня подготовки, и мы с нетерпением ждём встречи с вами.

Наша цель

Наша цель — контроллер зарядной станции для электромобилей от Phoenix Contact. Подробнее о нём можно узнать здесь.

CHARX control modular, AC-контроллер заряда, со встроенной системой Linux, IEC 61851-1, режим работы: автономный, клиент, сервер,

Интерфейсы:

  • Ethernet (2x)
  • Сотовая связь (4G/2G)
  • Системная шина CHARX control modular
  • MICRO-USB type C

Протоколы связи:

  • OCPP 1.6J
  • Modbus/TCP
  • MQTT

Подключаемые периферийные устройства:

  • Счётчик электроэнергии
  • RFID
  • Контроль остаточного тока постоянного тока
  • Крепление на DIN-рейку

Предварительные требования

Для этого воркшопа нам понадобится несколько инструментов. Вы можете установить их, запустив скрипт install-prerequisites следующим образом:```sh ./install-prerequisites

## Получение прошивки

Прошивку можно получить с сайта производителя. В этом репозитории есть скрипт
`download-firmware`, который позволяет скачать прошивку
без необходимости открывать браузер.

Сегодня мы сосредоточимся на прошивке, предоставленной производителем, поскольку в ней есть всё,
что нам нужно. Но аналогичный подход можно применить и к дампу памяти, извлечённому
с работающего устройства. Интересно здесь то, что мы можем извлекать, исследовать и
эмулировать, даже не имея реального устройства.

## Извлечение с помощью Unblob

Начнём с проверки наличия всех зависимостей:```
unblob --show-external-dependencies
The following executables found installed, which are needed by unblob:
    7z                          ✓
    debugfs                     ✓
    jefferson                   ✓
    lz4                         ✓
    lziprecover                 ✓
    lzop                        ✓
    sasquatch                   ✓
    sasquatch-v4be              ✓
    simg2img                    ✓
    ubireader_extract_files     ✓
    ubireader_extract_images    ✓
    unar                        ✓
    zstd                        ✓

Теперь мы можем извлечь прошивку с помощью unblob:``` unblob CHARXSEC3XXXSoftwareBundleV190.raucb

Извлечение занимает около 3 минут на нормальном ноутбуке. Вы должны увидеть индикатор выполнения:

![unblob_progress](https://assets.kitploit.com/production/public/readmes/48963/9bdd3fefdf4e600ee070a461172a3ef07e482cde75b8e8a5d881021c7fa341e6.png)

После завершения извлечения должна появиться директория с именем
`CHARXSEC3XXXSoftwareBundleV190.raucb_extract`. Можно зайти
в неё и просмотреть содержимое.

### Чанки, Неизвестные чанки

Unblob работает путём определения чанков данных внутри файлов. Если чанк — это
сжатый поток, он распаковывается. Если это файловая система или архив — он
извлекается. Если извлечение или распаковка прошли успешно, чанк,
вырезанный на диск, удаляется для освобождения места.

Здесь чанк SquashFS версии 4 little-endian был вырезан на диск, извлечён
и удалён. Файлы (а следовательно, и директории извлечения) именуются
по схеме `{start_offset}-{end_offset}.{type}`.

Мы видим, что после файловой системы squashfs появляется 11 КБ «неизвестного» чанка.```
./0-132173824.squashfs_v4_le_extract
./132173824-132184833.unknown

Вы можете запустить binwalk на нём, чтобы увидеть, что он содержит:``` binwalk 132173824-132184833.unknown

DECIMAL HEXADECIMAL DESCRIPTION

0 0x0 Object signature in DER format (PKCS header length: 4, sequence length: 10997 58 0x3A Certificate in DER format (x509 v3), header length: 4, sequence length: 4372 4434 0x1152 Certificate in DER format (x509 v3), header length: 4, sequence length: 4387

Вы можете проверить сертификаты с помощью openssl:```
dd if=132173824-132184833.unknown bs=1 skip=58 | openssl x509 -in /dev/stdin -inform der -noout -text
dd if=132173824-132184833.unknown bs=1 skip=4434 | openssl x509 -in /dev/stdin -inform der -noout -text

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

Это одно из преимуществ unblob: превращение неизвестных неизвестных в известные неизвестные, которые можно исследовать.

Файловые системы

Посмотрим на содержимое нашей файловой системы squashfs:``` ls -al 0-132173824.squashfs_v4_le_extract total 460532 drwxrwxr-x 4 kali kali 4096 dec 5 09:51 . drwxrwxr-x 3 kali kali 4096 dec 5 09:51 .. -rw-rw-r-- 1 kali kali 20971520 sep 8 09:59 bootimg.vfat drwxrwxr-x 3 kali kali 4096 dec 5 09:51 bootimg.vfat_extract -rwxrwxr-x 1 kali kali 2654 sep 19 2022 hook -rw-rw-r-- 1 kali kali 442 sep 8 09:59 manifest.raucm -rw-rw-r-- 1 kali kali 450584576 sep 8 09:59 root.ext4 drwxrwxr-x 22 kali kali 4096 sep 8 09:57 root.ext4_extract

Мы можем видеть манифест в открытом виде, shell-скрипт, одну MBR и файловую систему EXT4:```
find -maxdepth 1 -type f -exec file {} \;
./manifest.raucm: ASCII text
./hook: a /usr/bin/env sh script, ASCII text executable
./bootimg.vfat: DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "mkfs.fat", sectors/cluster 4, reserved sectors 4, root entries 512, sectors 40960 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 40, sectors/track 63, heads 255, hidden sectors 163158016, reserved 0x1, serial number 0xd09aad9c, label: "KERNEL     ", FAT (16 bit)
./root.ext4: Linux rev 1.0 ext4 filesystem data, UUID=8ed19606-02c4-42e7-9cfb-1a2839f93ec4 (extents) (large files) (huge files)

Оба bootimg.vfat и root.ext4 были обработаны и извлечены с помощью unblob. Раздел VFAT содержит всё, что связано с загрузкой и ОС (ядро Linux, DTB, TEE):``` oftree: Device Tree Blob version 17, size=27469, boot CPU=0, string block size=1657, DT structure block size=25756 tee.bin: data zImage: Linux kernel ARM boot executable zImage (little-endian) zImage-imx6ul-ksp0632.dtb: Device Tree Blob version 17, size=27469, boot CPU=0, string block size=1657, DT structure block size=25756

Вы увидите, что unblob немного жадный и извлечёт ELF-файл и CPIO-архив
из ядра Linux (`zImage`), они соответствуют минимальному ядру и ramdisk.
Скачать инструмент