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

kravtsov

kravtsov

Well-known member
27.06.2017
47
77
Постараюсь принести пользу этому замечательному ресурсу практической статьей.

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

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

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

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

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

В качестве рабочей машинки я использую ноутбук с 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 полностью работоспособен, нужно только перезагрузить.

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

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



Напоследок

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

kravtsov

Well-known member
27.06.2017
47
77
В другом окне терминала подключяемся по 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
 
  • Нравится
Реакции: The Codeby
kravtsov

kravtsov

Well-known member
27.06.2017
47
77
В ходе восстановления у форумчан появляются вопросы, поэтому поясню по распиновке

На фото нижний ряд - нечетные пины. Если смотреть по порядку их нумерация такая: 1, 3, 5, 7,......19, 21, 23, 25
Верхний ряд - четные пины: 2,4,6,8,........24, 26
Да, я знаю, что на Raspberry Pi 3 пинов больше, но порядок первых 26 пинов (13 пар) одинаковый у всех версий rpi для обеспечения совместимости и единообразия.

rpi_jtag-1.png



На самом rpi3 четные пины находятся с внешней стороны
Нечетные - с внутренней

На фото четко видно: на внутренней стороне подключены подряд 3 соседних пина: 19, 21,23 (TDI, TDO, TCK)
На внешней стороне используется 2 пина: 14, 22 (Ground, TMS)

Напомню, что питание лучше подключить внешнее, через microusb. Пин 3.3v на pm3 не трогать вообще, оставив пустым. Это лишит вас шанса по ошибке подать неправильно питание.

Для коннекта, кстати, замечательно подходят проводки типа мама-мама для прозвона материнских плат. они чуть тоньше дырочек на pm3 но за счет оплетки встают очень плотно. Перепрошивал не раз уже.

Ну и совет, к которому я пришел: если pm3 используетесь в работе, то лучше иметь 2 устройства: "боевой" с наиболее функциональной и стабильной прошивкой и экспериментальный для игрищ.

oQbBlflb7v8.jpg
 

Вложения

InetTester

InetTester

Green Team
21.10.2018
199
38
Игрался игрался и решил обновить прошивку, во общем сейчас имею proxmark с алика который при подключении в Linux не детектится.
При зажатой кнопке включаю он детектится как ACM0 делаю дальше все по интсрукции(Вариант 1) и получаю:

Код:
Loading ELF file 'armsrc/obj/fullimage.elf'...
Loading usable ELF segments:
0: V 0x00102000 P 0x00102000 (0x0002fc60->0x0002fc60) [R X] @0x94
1: V 0x00200000 P 0x00131c60 (0x00001248->0x00001248) [RW ] @0x2fcf4
Note: Extending previous segment from 0x2fc60 to 0x30ea8 bytes

Waiting for Proxmark to appear on /dev/ttyACM0 .
Found.
Waiting for a response from the proxmark...        
You can cancel this operation by pressing the pm3 button
Ждал 5 минут но картинка не меняется) палец затек... буду рад если кто подскажет как реанимировать моего зверя)
Кабель новый, usb порты рабочие(пробовал в v2/v3) шить пробовал этой прошивкой: git clone
 
kravtsov

kravtsov

Well-known member
27.06.2017
47
77
Игрался игрался и решил обновить прошивку, во общем сейчас имею proxmark с алика который при подключении в Linux не детектится.
При зажатой кнопке включаю он детектится как ACM0 делаю дальше все по интсрукции(Вариант 1) и получаю:
Дружище, если у тебя Proxmark3 Easy, то нужно разблокировать загрузчик на чипе. Если не изменяет память, нужно подать питание на 55 ножку. Посмотри мануал к чипу, ща времени нет.

Там все просто. Нужно взять проводок с жеткими концами. Один запитать на 3.3в, второй прижать к 55 ноге (УТОЧНИ!!!!!!!) и включить проикспарк в розетку.
После этого загрузичк разблокируется, далее все делается по инструкции, которую написал выше.


Только учитывая размеры чипа лучше делать с лупой и НЕ с похмелья, тремор руки недопустим ;-)
 
  • Нравится
Реакции: The Codeby
InetTester

InetTester

Green Team
21.10.2018
199
38
Дружище, если у тебя Proxmark3 Easy, то нужно разблокировать загрузчик на чипе. Если не изменяет память, нужно подать питание на 55 ножку. Посмотри мануал к чипу, ща времени нет.

Там все просто. Нужно взять проводок с жеткими концами. Один запитать на 3.3в, второй прижать к 55 ноге (УТОЧНИ!!!!!!!) и включить проикспарк в розетку.
После этого загрузичк разблокируется, далее все делается по инструкции, которую написал выше.


Только учитывая размеры чипа лучше делать с лупой и НЕ с похмелья, тремор руки недопустим ;-)
Скорее всего да, у меня самая простая версия, т.е по дефолту он идет с алика с заблокированный загрузчиком ? Или это мои действия привели к этому ?
Сейчас при его подключении к ПК он не детектится как устройство ACM.. Детектится только если подключаю с зажатой кнопкой, но не шьется(другие прошивки не пробовал)...


В конце этой инструкции если я верно понял, у автора так и не вышло прошить клона с помощью Jtag, пишет что он вообще отключен разработчиками.

Сейчас при подключении мой proxmark не детектится даже при зажатой кнопке, на нем как на елке горят все диоды.

Мой порядок действий насколько я понял:
1. При включении девайса(без зажатой кнопки) меньше чем на 1. сек закоротить проводом 55 контакт чипа с 'площадкой' на торце где указано 3.3v
2 Далле(для китайского клона все прошивки подходят без проблем?)
  1. Отключаем pm3 (физически)
  2. Нажимаем и держим зажатой кнопку. НЕ ОТПУСКАЕМ!!!!!!!!!
  3. Включаем девайс в usb
  4. запускаем прошивку sudo client/flasher /dev/ttyACM0 armsrc/obj/fullimage.elf
  5. Ждем окончания
  6. Отпускаем кнопку
  7. Переподключаем pm3
 
kravtsov

kravtsov

Well-known member
27.06.2017
47
77
Сейчас при подключении мой proxmark не детектится даже при зажатой кнопке, на нем как на елке горят все диоды.
Да, в таком режиме ПК не увидит pm3 - убит загрузчик bootrom.elf. Хоть зажимай кнопку, хоть нет. Это "кирпич".
Поэтому нужно прошивать через JTAG.

Повторюсь про то, что писал в статье: делайте строго через Распбери. Забудьте про всякие J-link и иже с ними. У меня не получилось. И даже не понимаешь толком почему. Ерунда, трата времени и денег.

У меня 2 устройства. Один родной 4й ревизии. Он прошивается сразу.
Второй китайский pm3 easy. Прошивается после разблокировки.
Прошивал их через JTAG раз 10, не меньше. Оба сейчас работают.
С точно такой же историей на pm3 easy один из форумчан кодебая столкнулся. Все получилось. Собственно, он и откопал историю про заблокированный загрузчик и 55 ножку.

ВАЖНО!!!!! прежде чем сбрасывать загрузчик НУЖНО УЗНАТЬ что за устройство в руках и НА КАКОМ ЧИПЕ. Вдруг у вас другой чип и что там нужно делать я не знаю.

Ну и в качестве таблеточки успокоина: кривая работа проискмарка с прошивками встречается очень часто. И на оригиналах, и на клонах.
Злоупотребление с этим делом приводит к гарантированному нарушению режима сна, кратонму увеличению матерного лексикона и осознанию в итоге, что его НЕ НУЖНО обновлять так же как смарфон или комп.

Собственно, я второй и взял себе потому что за....ся экспериментировать с "боевым". Теперь оригинал не трогаю, он чисто для работы на нужной мне прошивке. А все эксперименты, когда доходят руки, делаю с китайчиком.
 
Последнее редактирование:
  • Нравится
Реакции: InetTester
kravtsov

kravtsov

Well-known member
27.06.2017
47
77
Добавлю кратко:
1. В pm3 две прошивки. Одна прошивка загрузчика (bootrom). Вторая - системы (fullimage). При исправном загрузчике можно перепрошить систему штатными командами pm3 с помощью нажатой кнопки.
2. У тебя горят все светодиоды. Это значит нарушена программная часть загрузчика. Устройство неработоспособно совсем.
3. Интерфейс JTAG работает с платой на самом низком физическом уровне. И с помощью него можно не только тестировать аппаратные проблемы железок, но даже иногда - прошивать их.
4. Мы счастливчики!!!!!! Ибо мы можем прошить загрузчик через JTAG
5. На НЕКОТОРЫХ чипах, используемых китайцами в клонах Proxmark3, возможность прошивки через JTAG заблокирована. Для разблокировки нужно читать мануал к чипу. Не проиксмарку, а чипу.
6. В моем случае на pm3 easy чип AT91SAM7S512 это решалось подачей питания на 55 пин.
7. После этого через JTAG заливаем и bootrom и fullimage и радуемся жизни.

Примечания
1. Bootrom.elf и fullimage.elf должны быть скомпилирвоаны на соответствующую версию софта, которую вы хотите использовать на ПК или телефоне.
2. Недопустимо комбинировать их при прошивке чере JTAG.
2.1 Некоторые (в т.ч. Айсман) советуют не трограть bootrom, если он свежий. Могу согласиться если вы прошиваете штатными командами. Проблемы могут быть, но встречаются реже чем ошибка прошивки самого загрузчика.
3. Недопустимо работать с прошивкой PM3 и другой версией софта на ПК. Как правило, это не работает или работает весьма криво.
4. Прошивка через JTAG при условии прямых рук работает всегда. Без "но".
5. Прошивка штатными средствами практически всегда приводит к проблемам. Но может и повезти.


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

Поверь, навык прошивки через jtag необходим при работе с проискмарк.

Ни одно устройство в мире не дает такого функиционала при работе с rfid. Тут огромное коммьюнити. Все, кто занимаются этой темой. Все новые атаки появляются именно на проиксмарк.
Все удобства появтляются именно на происмарк.
И как ни крути, придется периодически прошиваться.


Советую следить за прошивкой от rfidresearchgroup и вообще работать именно с ней.
Сравни ее с оригиналом. Посмотри разницу. Выбери что нравится с точки зрения функционала, стабильности и скорости работы.
Ну и периодически поглядывай changelog.
 
Последнее редактирование:
  • Нравится
Реакции: InetTester
InetTester

InetTester

Green Team
21.10.2018
199
38
Спасибо!
У меня тоже чип AT91SAM7S512 , но странно то что при попытке разлочить JTAG интерфейс у меня ничего не вышло, вроде старался делать все ювелирно, отсчитал 55 контакт и замыкал его на площадку с надписью 3.3.v

Фото одной из моих попыток

1579028906333.JPEG

А вот моя новогодняя елка:
IMG_20200114_213840.jpg

Малинки у меня к сожалению нет(к большому стыду, нужно только заказывать), если всетаки рискнуть и купить с алика простой программатор для JTAG то какую модель посоветуйте?
Также насколько реально при самом ужасном сценарии снять феном чип и и прошить его через программатор? У меня есть старенький CH341A которым я пару раз шил биос, можно на него докупить установочную 'площадку' для данного(AT91SAM7S512) чипа и прошить его? Или там нужен программатор специально для этого семейства(ARM) чипов?

PS: Девайс жалко так как я им практически и не попользовался, но о проделанном эксперименте не жалею, негативный результат тоже результат)
 
Последнее редактирование:
kravtsov

kravtsov

Well-known member
27.06.2017
47
77
у меня ничего не вышло,
Друг, с чего ты взял, что ничего не вышло? Сдается, что нам нужно выспаться.

Индикация проиксмарка говорит о том, что загрузчик не загрузился. Конечно! Он поврежден.

А питанием на 55 ногу ты разблокировал только возможность его заливки через JTAG. Вот когда зальешь, перезагрузишь, тогда и индикация изменится.
Собственно, понять разблокировал ты или нет сможет только в момент заливки прошивки через jtag: будет ошибка или все ок.

С программатором хз. Я прочитал туеву хучу мануалов. Купил j-link и.... ничего не получилось. Неделя псу под хвост в хождениях по магазинам, попытках понять почему эта. ... не работает и т.д.
buspirate? Shikra? Я не хотел уже экспериментировать с этим..... тактичных слов не приходит в гловову. И тебе не буду советовать. Судя по форумам, проблем огребают немало.

Я не профи в этом. Может скилловые ребята и сделают, но по мне лучше малинки ничего нет. Все работает. Просто. Понятно. Видно что происходит. Шикарная библиотека openocd под любые чипы. Обпрошивайся.

Неужели нельзя ни у кого одолжить на время? Очень распространенная и очень полезная штука. Если вопрос финансов не сильно волнует, покупай.
 
Последнее редактирование:
InetTester

InetTester

Green Team
21.10.2018
199
38
Успешно восстановил свой proxmark, автору большое спасибо за проделанную работу.
Если планируйте использовать данный девайс то очень желательно иметь малинку для восстановления..
 
  • Нравится
Реакции: kravtsov
slaviky

slaviky

New member
28.12.2019
2
2
Восстанавливал свой окирпиченный proxmark 3 easy по инструкции автора. Спасибо за такое подробное руководство. Делал через малину. После команды
Код:
 flash erase_sector 1 0 15
получал сообщение
Код:
Lock Error Bit Detected, Operation Abort
failed erasing sectors 1 to 15
так как прошика на чипе залочена. Я ввел
Код:
flash protect 1 0 15 off
и все прошло как по маслу
Команда подсмотренна на wiki на githab
 
  • Нравится
Реакции: kravtsov
kravtsov

kravtsov

Well-known member
27.06.2017
47
77
и все прошло как по маслу
Команда подсмотренна на wiki на githab
если быть более точным, две команды ;-)

прикольно, получается это альтернативный разок. Я делал через питание на 55 ножку (см комменты выше).
Конечно, командами удобнее!
 
slaviky

slaviky

New member
28.12.2019
2
2
у меня лок был именно на секторе 1 0 15.
flash erase_sector 0 0 15 проходила без проблем
 
  • Нравится
Реакции: kravtsov
Мы в соцсетях: