Статья Proxmark3 rdv4: оживляем "кирпич"

Постараюсь принести пользу этому замечательному ресурсу практической статьей.

Сравнительно недавно стал пользователем Proxmark3 rdv4 для тестирования СКУД - блестящего инструмента при проведении выездного пентеста, включающего преодоление физического периметра. Далее для краткости изложения буду его называть pm3

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

Шаг 1. Скачиваем и устанавливаем нужное ПО на ПК.

Совет 1. Доказано на практике (и не только мной), что вероятность получить "кирпич" близка к 100%. Но все поправимо!
Совет 2. Именно для rdv4 используйте или стандартную прошивку, или rfidresearchgroup. Важно!!! Не пробуйте ставить прошвку от айсмана. Во-первых получите кирпич. А даже если нет - часть методов не будет работать. Вторая рекомендованная мной прошивка от RfidResearchGroup сделана на ее основе и с участием разработчика.

Родная прошивка: Proxmark/proxmark3
Прошивка RfidResearchGroup RfidResearchGroup/proxmark3

В качестве рабочей машинки я использую ноутбук с Ubuntu 18.04. Соответственно, процесс установки ПО на комп описывать не буду - это максимально корректно и подробно описано у RfidResearchGroup по ссылке выше.


Код:
# установка дополнительных бибилотек
sudo apt-get install p7zip git build-essential libreadline5 libreadline-dev libusb-0.1-4 libusb-dev libqt4-dev perl pkg-config wget libncurses5-dev gcc-arm-none-eabi

# Клонируем прошивку, в данном случае - ОРИГИНАЛЬНАЯ
git clone https://github.com/Proxmark/proxmark3.git

# Заходим в директорию proxmark3
cd proxmark3

# Компилируем ПО
make clean && make all


Шаг 2. Прошивка Proxmark3

После компиляции файлов на ПК вы дожны прошить сам pm3. Подразумевается, что это должно делаться автоматически вот этой командой:

Код:
client/proxmark3-flasher /dev/ttyACM0 -b bootrom/obj/bootrom.elf armsrc/obj/fullimage.elf

Где bootrom.elf - загрузчик pm3, а fullimage.elf - основная прошивка.
Помните, что оба файла генерируются при компиляции.

Если процесс прошел успешно, поздравляю! Перезагрузите pm3 и пользуйтесь. Если нет, то начинаем разбираться.

Команда для запуска ПО

./client/proxmark3 /dev/ttyACM0

Вариант 1. Ошибка в основной прошивке.

В данном случае все довольно просто и ситуация хорошо описано в мануалах. ПО якобы не видит pm3 и он не работает. Поскольку загрузчик в порядке, мы должны включить pm3 в "сервисном режиме" - с зажатой кнопкой.
После этого снова накатываем прошивку (лучше другую :) )

Вкратце алгоритм такой
  1. Отключаем pm3 (физически)
  2. Нажимаем и держим зажатой кнопку. НЕ ОТПУСКАЕМ!!!!!!!!!
  3. Включаем девайс в usb
  4. запускаем прошивку sudo client/flasher /dev/ttyACM0 armsrc/obj/fullimage.elf
  5. Ждем окончания
  6. Отпускаем кнопку
  7. Переподключаем pm3
Так же, судя по англоязычным форумам, ОЧЕНЬ часто встречается необходимость перезаписать правила. Мне это делать не пришлось, но у вас может быть эта проблема
Код:
make udev
sudo udevadm control --reload-rules
sudo adduser root dialout
The user `root' is already a member of `dialout'.

# Заново компилируем
make clean && make all

После чего пытаемся прошить pm3


Вариант 2. Ошибка загрузчика.

Вот это уже проблемка. Вы получили классический "кирпич", который будем исправлять программированием через интерфейс JTAG.

Перелопатив туеву хучу официальных и неофициальных мануалов, комментариев на форумах и проч. предлагаю САМЫЙ простой и эффективный способ.

Шаг 3. Исправляем загрузчик через JTAG

Нам понадобятся сам pm3, любой Raspberry Pi и 5 проводков для соединения пинов Raspberry с разъемами pm3.

Да, я читал про программаторы Segger, BusPirate, The Shikra... и даже купил некоторые... Забудьте. Ничего кроме проблем по совершенно непонятныс причинам. Если вы пентестер, то почти наверняка у вас есть Raspberry. Все остальное - пустая трата времени и денег с непонятным результатом. Не повторяйте моих ошибок. Мауналы подвирают, прверено на личном опыте.

Важно! Пины на pm3 - очень маленькие дырочки. В моем комплекте и в ближайших "радиотеталях" не оказалось ничего подходящего. Найти такие коннекторы или «крокодильчики» быстро — не самая простая задача. К слову, на lab401 продается переходник за 35 евро. За эти деньги можно плюноуть и купить с Китая pm3 rdv3. Поэтому обошелся простой "скруткой". Будьте внимательны, чтобы не перехлестнуть оголенные провода.

Берем Rasperry Pi и ставим на него дополнительные пакеты и библиотеку Openocd

Код:
cd ~
sudo apt-get update
sudo apt-get install git autoconf libtool make pkg-config libusb-1.0-0 libusb-1.0-0-dev
git clone http://openocd.zylin.com/openocd
cd openocd
./bootstrap
./configure --enable-sysfsgpio --enable-bcm2835gpio
make
sudo make install
sudo cp -r tcl/ /usr/share/openocd

После подготовки rpi нужно соединить пины с pm3. Для моего Rpi3 model B v 1.2 правильная именно такая. Первые 13 рядов идентичны с шиной Raspberry Pi первой версии и нам нужны только вот эти пины:

14 - Grnd
22 - TMS
19 - TDI
21 - TDO
23 - TCK


Если есть желание, чуть подробнее про GPIO Raspberry Pi можете прочитать в этой статье:
Возможно у меня кривые руки, но целая куча других публикаций и описаний не помогла.

ВАЖНО!!! Питание (разъём 3.3v на pm3) НЕ ТРОГАЕМ вообще. Используйте ТОЛЬКО штатное, подключив pm3 через кабель к usb-порту или зарядному устройству. Поверьте, это проще и значительно безопаснее.



oQbBlflb7v8.jpg



Итак, теперь мы готовы к прошивке.

В директории /usr/share/openocd/scripts/target/ создайте файл конфигурации с названием at91sam7s512-buspirate.cfg.
В него запишите код, рекомендованный производителем pm3


Код:
# Ports
telnet_port 4444
gdb_port 3333
# Interface
source [find interface/sysfsgpio-raspberrypi.cfg]
# use combined on interfaces or targets that can’t set TRST/SRST separately
reset_config srst_only srst_pulls_trst
jtag newtap sam7x cpu -irlen 4 -ircapture 0x1 -irmask 0xf
#target create sam7x.cpu arm7tdmi -endian little -chain-position sam7x.cpu -variant arm7tdmi
target create sam7x.cpu arm7tdmi -endian little -chain-position sam7x.cpu
sam7x.cpu configure -event reset-init {
    soft_reset_halt
    mww 0xfffffd00 0xa5000004   # RSTC_CR: Reset peripherals
    mww 0xfffffd44 0x00008000   # WDT_MR: disable watchdog
    mww 0xfffffd08 0xa5000001   # RSTC_MR enable user reset
    mww 0xfffffc20 0x00005001   # CKGR_MOR : enable the main oscillator
    sleep 10
    mww 0xfffffc2c 0x000b1c02   # CKGR_PLLR: 16MHz * 12/2 = 96MHz
    sleep 10
    mww 0xfffffc30 0x00000007   # PMC_MCKR : MCK = PLL / 2 = 48 MHz
    sleep 10
    mww 0xffffff60 0x00480100   # MC_FMR: flash mode (FWS=1,FMCN=72)
    sleep 100
}
gdb_memory_map enable
#gdb_breakpoint_override hard
#armv4_5 core_state arm
sam7x.cpu configure -work-area-virt 0 -work-area-phys 0x00200000 -work-area-size 0x10000 -work-area-backup 0
flash bank sam7x512.flash.0 at91sam7 0 0 0 0 sam7x.cpu 0 0 0 0 0 0 0 18432
flash bank sam7x512.flash.1 at91sam7 0 0 0 0 sam7x.cpu 1 0 0 0 0 0 0 18432


Теперь скопируйте на rpi два файла:
Прошивка загрузчика, который обычно находится тут: proxmark3//bootrom/obj/bootrom.elf
Прошивка платы, обычно она находится тут: proxmark3/armsrc/obj/fullimage.elf

Итак, запускаем openocd

Код:
cd /usr/share/openocd/scripts/target/

sudo openocd -f at91sam7s512-buspirate.cfg

eajvrJT8LK0.jpg


В другом окне терминала подключяемся по telnet и прошиваем:
Код:
telnet 127.0.0.1 4444
halt
flash erase_sector 0 0 15
flash erase_sector 1 0 15
flash write_image "ПУТЬ ДО ПРОШИВКИ/fullimage.elf"
flash write_image "ПУТЬ ДО ПРОШИВКИ/bootrom.elf"
exit
nfAteHjXLpQ.jpg


Все! Теперь ваш pm3 полностью работоспособен, нужно только перезагрузить.

Таким образом можно залить любую прошивку и это ГОРАЗДО стабильнее работает, нежели штатным средствами.

Вкратце все, успехов!



Напоследок

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

localchap

Green Team
13.03.2020
10
1
BIT
0
Команда Iceman выкладывают готовые билды на Win64, работает прямо из коробки, распаковали архив, прошили вин драйвер, залили в пм3 full image и вперед, все работает как часы. На линуксе имел кучу гемора. брать тут
 

InetTester

Green Team
21.10.2018
308
43
BIT
5
Кто шил у кого получилось прошить iceman-ом клон proxmark-a НЕ через JTAG а просто по инструкциям на GIT?
У меня прошивка проходит на ура но проблема в том что ничего не заливается... В данный момент нет малинки и сломать его окончательно не хочу)
 

poison

Member
22.02.2017
5
0
BIT
0
у меня тоже по инструкции все прошло. Сейчас разбираюсь с командами. У тебя получилось записать? Есть разница от прошивки залитой по инструции с гита и с разблокированным загрузчиком?
И еще, какая это 55 ножка ? Я, блин с лупой их ели считаю, не будет хана, если не ту ножку запитать ?
 

brizx

New member
10.01.2024
1
0
BIT
6
Команда Iceman выкладывают готовые билды на Win64, работает прямо из коробки, распаковали архив, прошили вин драйвер, залили в пм3 full image и вперед, все работает как часы. На линуксе имел кучу гемора. брать тут
Переехало----
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!