From cee3bdf5881920e2878b4422a4a31be7ce761367 Mon Sep 17 00:00:00 2001 From: Paul Philippov Date: Tue, 8 Feb 2022 12:51:56 -0500 Subject: [PATCH 1/4] fix typo. --- ru/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ru/installation.md b/ru/installation.md index 0e378c0..0f82899 100644 --- a/ru/installation.md +++ b/ru/installation.md @@ -160,7 +160,7 @@ tftp 0x82000000 firmware-full.bin 0x1000000 присущих той или иной камере. Но и казалось бы менее значимые детали могут устанавливать ограничения на возможности камеры и её прошивки. Например, у разных камер могут отличаться установленные микросхемы флэш-памяти. Одни камеры -могут иметь флэш-память объемом 8 МБ, в то время как другие - 16 МБ, то и +могут иметь флэш-память объемом 8 МБ, в то время как другие - 16 МБ, а то и больше. В больший объем флэш-памяти можно поместить большее количество программного кода, позволить камере запускать дополнительные сервисы, которые недоступны на камерах с меньшим объёмом флэш-памяти. Поэтому мы решили From fd852f614cf8dcb9ae997b8cc75025da86fc75b6 Mon Sep 17 00:00:00 2001 From: Paul Philippov Date: Fri, 11 Feb 2022 06:54:48 -0500 Subject: [PATCH 2/4] Update help-uboot.md --- ru/help-uboot.md | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/ru/help-uboot.md b/ru/help-uboot.md index 992b19d..cf65227 100644 --- a/ru/help-uboot.md +++ b/ru/help-uboot.md @@ -21,8 +21,16 @@ root@openipc-hi3518ev100:~# ### Сохранение заводской прошивки без tftp. В программе-терминале, используемой для подключения к порту UART, установите -сохранение лога сессии. После чего в консоли загрузчика запустите команду чтения -данных из памяти длиной в объем флэш-памяти начиная с нулевого адреса. +сохранение лога сессии. В качестве примера мы используем программу-терминал +`screen`. В этом случае команда подлючения к UART-адаптеру с сохранением лога +сессии в файл _fulldump.log_ будет выглядеть примерно так: + +``` +$ screen -L -Logfile fulldump.log /dev/ttyUSB0 115200 +``` + +После чего в консоли загрузчика запустите команду чтения данных из памяти длиной +в объем флэш-памяти начиная с нулевого адреса. Используйте шестнадцатеричное представление для адресов памяти. Так 0 в шестнадцатеричной записи выглядит как 0x0, 8 мегабайтов (8 * 1024 * 1024 = @@ -41,6 +49,15 @@ md.b 0x0 0x800000 md.b 0x0 0x1000000 ``` +После запуска команды чтения содержимого памяти вы можете отсоедить сессию, +чтобы случайное нажатие клавиш не замусорило лог. В `screen` это делается +последовательным нажатием комбинации клавиш `Ctrl-a` и клавиши `d` (detach). +Для последующего присоединения к запущенной сессии используйте команду + +``` +screen -r +``` + Будьте готовы к тому, что процесс передачи данных через серийное подключение займет несколько часов. Зато в результате у вас будет полная копия оригинальной прошивки, которую можно конвертировать в бинарный файл с помощью программы From 575fedd142be65c1aeff09be191eb7aef5b193ca Mon Sep 17 00:00:00 2001 From: Paul Philippov Date: Sat, 12 Feb 2022 20:59:51 -0500 Subject: [PATCH 3/4] fix typos. --- ru/help-uboot.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ru/help-uboot.md b/ru/help-uboot.md index cf65227..cb44ab1 100644 --- a/ru/help-uboot.md +++ b/ru/help-uboot.md @@ -32,10 +32,10 @@ $ screen -L -Logfile fulldump.log /dev/ttyUSB0 115200 После чего в консоли загрузчика запустите команду чтения данных из памяти длиной в объем флэш-памяти начиная с нулевого адреса. -Используйте шестнадцатеричное представление для адресов памяти. Так 0 в -шестнадцатеричной записи выглядит как 0x0, 8 мегабайтов (8 * 1024 * 1024 = -8,388,608 байтов) выглядят как 0x800000, 16 мегабайтов (16 * 1024 * 1024 = -или 16,777,216 байтов) - как 0x1000000. +Используйте шестнадцатеричную запись для адресов памяти. +Так 0 в шестнадцатеричном представлении выглядит как 0x0, +8 мегабайтов (8 * 1024 * 1024 = 8,388,608 байтов) -- как 0x800000, +16 мегабайтов (16 * 1024 * 1024 = или 16,777,216 байтов) -- как 0x1000000. Чтение 8МБ флэш-памяти: @@ -67,7 +67,7 @@ screen -r ### Обход запароленного загрузчика. -Смена загрузчика -- рискованная операция. Уж слишком высоки шансы превратить +Смена загрузчика -- рискованная операция. Уж слишком высоки шансы превратить камеру в пресс-папье, если что-то пойдёт не так. Поэтому прежде чем прошивать новый загрузчик надо взвесить все риски и бенефиты. @@ -79,7 +79,7 @@ screen -r загрузки -- это приглашение ввести пароль. В таком случае относительно безопасным решением будет даунгрейд родной прошивки до версии, где ещё не требовался пароль. Например, у камер Xiongmai пароль в загрузчике появился -где-то в районе июля 2021 года, следовательно вам понадобится файл с фирменной +где-то в районе июля 2021 года, следовательно, вам понадобится файл с фирменной прошивкой от вашей камеры с более ранней датой. После успешного даунгрейда на беспарольный загрузчик вы сможете установить прошивку OpenIPC уже стандартными средствами. From c018f7a9d557721ba9deb8cbd76f077cb15e8d2f Mon Sep 17 00:00:00 2001 From: Paul Philippov Date: Sat, 12 Feb 2022 21:00:16 -0500 Subject: [PATCH 4/4] add dumping flash via SD card. --- ru/help-uboot.md | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/ru/help-uboot.md b/ru/help-uboot.md index cb44ab1..c1968ef 100644 --- a/ru/help-uboot.md +++ b/ru/help-uboot.md @@ -64,6 +64,59 @@ screen -r [binwalk](https://github.com/ReFirmLabs/binwalk) и использовать для дальнейшего изучения или для восстановления камеры в её оригинальный вид. +#### Сохранение прошивки через SD карту. + +Бывает, что у камеры есть только беспроводной доступ, который не работает +напрямую из загрузчика. Очень часто такие камеры имеют разъём для внешней карты +памяти формата microSD. В таком случае можно попробовать получить копию +оригинальной прошивки используя карту как носитель-посредник. Объем данных, +которые вам потребуется сохранить -- не более 16 МБ, поэтому подойдет любая +доступная карта, даже самого маленького объема. + +Вставьте карту в соответствующий разъем на камере, подключите серийный адаптер +к порту UART, подайте питание на камеру и остановите процесс загрузки так, +чтобы оказаться в консоли загрузчика. + +Инициализируйте доступ к карте, и очистите место для сохранения копии прошивки. +Запись на карту производится блоками по 512 байтов. Для очистки 8 МБ вам +потребуется стереть 16384 таких блоков, а для 16 МБ - 32768, что в +шестнадцатеричном представлении будет 0x4000 и 0x8000, соответственно. + +Обратите внимание, что мы используем прямой доступ к регистрам карты, минуя +таблицу разделов. Чтобы избежать конфликтов при обращении к данным карты, мы +будем записывать данные пропустив 8 килобайтов от начала (8 * 1024 = 8192 байтов +или 16 блоков по 512 байтов, или 0x10 блоков в шестнадцатеричном представлении) + +``` +mmc dev 0 +mmc erase 0x10 0x8000 +``` + +Теперь вам надо скопировать содержимое прошивки из микросхемы флэш-памяти в +оперативную память камеры. Для этого очистите участок оперативной памяти +(0x800000 байтов для микросхем объемом 8 МБ или 0x1000000 байтов для микросхем +объемом 16 МБ), получите доступ к микросхеме флэш-памяти и скопируйте весь объем +флэш-памяти в очищенное пространство оперативной памяти. После чего сохраните +скопированные данные из оперативной памяти на карту. + +NB! В примере мы используем стартовый адрес 0x2000000, но этот параметр может +отличаться у разных моделей камер. + +``` +mw.b 0x2000000 ff 0x1000000 +sf probe 0 +sf read 0x2000000 0x0 0x1000000 +mmc write 0x2000000 0x10 0x8000 +``` + +Выньте карту из камеры и вставьте в компьютер с операционной системой Linux. +Используя команду `dd` скопируйте данные с карты в бинарный файл на диске +компьютера. + +``` +dd bs=512 skip=16 count=32768 if=/dev/sdc of=./fulldump.bin +``` + ### Обход запароленного загрузчика.