Постараюсь принести пользу этому замечательному ресурсу практической статьей.
Сравнительно недавно стал пользователем Proxmark3 rdv4 для тестирования СКУД - блестящего инструмента при проведении выездного пентеста, включающего преодоление физического периметра. Далее для краткости изложения буду его называть pm3
Спустя несколько месяцев экспериментов и успешных пентестов пришло понимание, что функционал устройства нужно расширять. Один из способов это сделать - установка альтернативной прошивки.
Шаг 1. Скачиваем и устанавливаем нужное ПО на ПК.
Совет 1. Доказано на практике (и не только мной), что вероятность получить "кирпич" близка к 100%. Но все поправимо!
Совет 2. Именно для rdv4 используйте или стандартную прошивку, или rfidresearchgroup. Важно!!! Не пробуйте ставить прошвку от айсмана. Во-первых получите кирпич. А даже если нет - часть методов не будет работать. Вторая рекомендованная мной прошивка от RfidResearchGroup сделана на ее основе и с участием разработчика.
Родная прошивка: Proxmark/proxmark3
Прошивка RfidResearchGroup RfidResearchGroup/proxmark3
В качестве рабочей машинки я использую ноутбук с Ubuntu 18.04. Соответственно, процесс установки ПО на комп описывать не буду - это максимально корректно и подробно описано у RfidResearchGroup по ссылке выше.
Шаг 2. Прошивка Proxmark3
После компиляции файлов на ПК вы дожны прошить сам pm3. Подразумевается, что это должно делаться автоматически вот этой командой:
Где bootrom.elf - загрузчик pm3, а fullimage.elf - основная прошивка.
Помните, что оба файла генерируются при компиляции.
Если процесс прошел успешно, поздравляю! Перезагрузите pm3 и пользуйтесь. Если нет, то начинаем разбираться.
Команда для запуска ПО
Вариант 1. Ошибка в основной прошивке.
В данном случае все довольно просто и ситуация хорошо описано в мануалах. ПО якобы не видит pm3 и он не работает. Поскольку загрузчик в порядке, мы должны включить pm3 в "сервисном режиме" - с зажатой кнопкой.
После этого снова накатываем прошивку (лучше другую )
Вкратце алгоритм такой
После чего пытаемся прошить pm3
Вариант 2. Ошибка загрузчика.
Вот это уже проблемка. Вы получили классический "кирпич", который будем исправлять программированием через интерфейс JTAG.
Перелопатив туеву хучу официальных и неофициальных мануалов, комментариев на форумах и проч. предлагаю САМЫЙ простой и эффективный способ.
Шаг 3. Исправляем загрузчик через JTAG
Нам понадобятся сам pm3, любой Raspberry Pi и 5 проводков для соединения пинов Raspberry с разъемами pm3.
Да, я читал про программаторы Segger, BusPirate, The Shikra... и даже купил некоторые... Забудьте. Ничего кроме проблем по совершенно непонятныс причинам. Если вы пентестер, то почти наверняка у вас есть Raspberry. Все остальное - пустая трата времени и денег с непонятным результатом. Не повторяйте моих ошибок. Мауналы подвирают, прверено на личном опыте.
Важно! Пины на pm3 - очень маленькие дырочки. В моем комплекте и в ближайших "радиотеталях" не оказалось ничего подходящего. Найти такие коннекторы или «крокодильчики» быстро — не самая простая задача. К слову, на lab401 продается переходник за 35 евро. За эти деньги можно плюноуть и купить с Китая pm3 rdv3. Поэтому обошелся простой "скруткой". Будьте внимательны, чтобы не перехлестнуть оголенные провода.
Берем Rasperry Pi и ставим на него дополнительные пакеты и библиотеку 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-порту или зарядному устройству. Поверьте, это проще и значительно безопаснее.
Итак, теперь мы готовы к прошивке.
В директории /usr/share/openocd/scripts/target/ создайте файл конфигурации с названием at91sam7s512-buspirate.cfg.
В него запишите код, рекомендованный производителем pm3
Теперь скопируйте на rpi два файла:
Прошивка загрузчика, который обычно находится тут: proxmark3//bootrom/obj/bootrom.elf
Прошивка платы, обычно она находится тут: proxmark3/armsrc/obj/fullimage.elf
Итак, запускаем openocd
В другом окне терминала подключяемся по telnet и прошиваем:
Все! Теперь ваш pm3 полностью работоспособен, нужно только перезагрузить.
Таким образом можно залить любую прошивку и это ГОРАЗДО стабильнее работает, нежели штатным средствами.
Вкратце все, успехов!
Напоследок
Делайте все выспавшимся, на трезвую голову и без тремора рук. Последствия неверного соединения неизвестны и могут привести к повреждению микросхем.
Сравнительно недавно стал пользователем 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 в "сервисном режиме" - с зажатой кнопкой.
После этого снова накатываем прошивку (лучше другую )
Вкратце алгоритм такой
- Отключаем pm3 (физически)
- Нажимаем и держим зажатой кнопку. НЕ ОТПУСКАЕМ!!!!!!!!!
- Включаем девайс в usb
- запускаем прошивку sudo client/flasher /dev/ttyACM0 armsrc/obj/fullimage.elf
- Ждем окончания
- Отпускаем кнопку
- Переподключаем 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-порту или зарядному устройству. Поверьте, это проще и значительно безопаснее.
Ссылка скрыта от гостей
Итак, теперь мы готовы к прошивке.
В директории /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
В другом окне терминала подключяемся по 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
Все! Теперь ваш pm3 полностью работоспособен, нужно только перезагрузить.
Таким образом можно залить любую прошивку и это ГОРАЗДО стабильнее работает, нежели штатным средствами.
Вкратце все, успехов!
Напоследок
Делайте все выспавшимся, на трезвую голову и без тремора рук. Последствия неверного соединения неизвестны и могут привести к повреждению микросхем.