Представьте себе ситуацию, когда на камере наблюдения испортилась флэшка с прошивкой, и камера нуждается в ремонте. Берём копеечную флэшку и меняем, а прошивку скопируем с точно такой же камеры. Пять минут рекламы, и теперь камера работает и показывает видеопоток вновь. Но есть нюанс. Дело в том, что она теперь является полной копией камеры-донора прошивки. Это и ежу понятно, они же и были одинаковыми — возразите вы. Были одинаковыми всем, кроме таких настроек, как MAC-адрес и идентификатор в облаке, куда камера сливает свой видеопоток. А теперь они совсем близнецы.

Когда распространились камеры с облачным доступом, массово решились такие проблемы, как доступ к камере без внешнего IP-адреса или с динамическим адресом. Теперь стало ненужным использовать проброс портов на роутере, VPN, динамический DNS, требующие целой инфраструктуры для доступа к камере. Запускай себе приложение, и оно получит доступ к видеопотоку или к архиву через облако. Производители камер в то время пробовали различные варианты, которые часто заканчивались печальными результатами, как с камерами Foscam, связанные с тем, что производитель выбрал путь простоты и дешевизны, а пользователи за него проголосовали рублём. Камеры становились легкодоступными, дешёвыми и, в конце концов, собой просто заполонили весь мир, проникнув в магазины, детские сады, зоопарки, аэропорты, бары, подъезды, офисы, входы, выходы, проходы, пароходы и даже в спальни с туалетами. В крупнейшем каталоге камер insecam.org тогда были сотни тысяч камер со всего мира.

Так у производителей возникла проблема ограничения доступа к облаку. Камера должна была иметь крипто-ключ доступа. Такие производители, как Dahua и Hikvision, на многих своих камерах хранили этот ключ в отдельной микросхеме серии 24CXX. Но в массы пошёл вариант от вендора XiongMai (XM), платы которого использовались практически во всех китайских камерах, которые завалили нас в то время.

Все знают классический дизайн веб-интерфейса XiongMai, который назывался «китайские камеры» и никак иначе.

Веб-интерфейс камер и регистраторов XiongMai

На платах XiongMai преобладает вариант записи ключа прямо на микросхему с прошивкой, которая, как правило, хранится на флэшках SPI серии 25Q. С ростом популярности NAND-памяти для хранения прошивки устройства такой подход не изменился. Поскольку информация, которая отвечает за доступ к облаку и за такие индивидуальные реквизиты камеры, как MAC-адрес, зашифрована, то называют её криптоблок. В народе среди ремонтников прижилось название «крипта», которое в данном контексте не имеет к Биткойнам никакого отношения. Имейте это в виду, если увидите плачущего ремонтника, который безвозвратно потерял блок крипты.

▍ Как найти криптоблок в прошивке


Теперь покажу на практике, где «крипта» сохранена. Допустим, нам удалось слить прошивку с флэшки программатором или подключившись к консоли через USB UART-адаптер из меню U-Boot. Рабочая прошивка или нет, нас сейчас не интересует. Мы можем взять стандартную прошивку для конкретной камеры с сайта производителя, чтобы влить на новую рабочую флэшку, или перепрошить старую. Но к ней для нормальной работы нужен криптоблок, который сделает нашу камеру уникальной. Попробуем найти «крипту» в старой прошивке. Для начала заглянем внутрь и найдём регион, где записаны настройки загрузчика U-Boot.

0001D4A8 02 02 02 62 │ 6F 6F 74 61 │ 72 67 73 3D │ 6D 65 6D 3D │ 33 35 4D 20 │ 63 6F 6E 73  ...bootargs=mem=35M cons
0001D4C0 6F 6C 65 3D │ 74 74 79 41 │ 4D 41 30 2C │ 31 31 35 32 │ 30 30 20 72 │ 6F 6F 74 3D  ole=ttyAMA0,115200 root=
0001D4D8 2F 64 65 76 │ 2F 6D 74 64 │ 62 6C 6F 63 │ 6B 32 20 72 │ 6F 6F 74 66 │ 73 74 79 70  /dev/mtdblock2 rootfstyp
0001D4F0 65 3D 63 72 │ 61 6D 66 73 │ 20 6D 74 64 │ 70 61 72 74 │ 73 3D 78 6D │ 5F 73 66 63  e=cramfs mtdparts=xm_sfc
0001D508 3A 32 35 36 │ 4B 28 62 6F │ 6F 74 29 2C │ 31 35 33 36 │ 4B 28 6B 65 │ 72 6E 65 6C  :256K(boot),1536K(kernel
0001D520 29 2C 31 32 │ 38 30 4B 28 │ 72 6F 6D 66 │ 73 29 2C 34 │ 35 34 34 4B │ 28 75 73 65  ),1280K(romfs),4544K(use
0001D538 72 29 2C 32 │ 35 36 4B 28 │ 63 75 73 74 │ 6F 6D 29 2C │ 33 32 30 4B │ 28 6D 74 64  r),256K(custom),320K(mtd
0001D550 29 00 62 6F │ 6F 74 63 6D │ 64 3D 62 6F │ 6F 74 6D 20 │ 30 78 36 30 │ 30 34 30 30  ).bootcmd=bootm 0x600400
0001D568 30 30 00 62 │ 6F 6F 74 64 │ 65 6C 61 79 │ 3D 31 00 62 │ 61 75 64 72 │ 61 74 65 3D  00.bootdelay=1.baudrate=
0001D580 31 31 35 32 │ 30 30 00 65 │ 74 68 61 64 │ 64 72 3D 30 │ 30 3A 30 31 │ 3A 30 32 3A  115200.ethaddr=00:01:02:
0001D598 30 33 3A 30 │ 34 3A 30 30 │ 00 69 70 61 │ 64 64 72 3D │ 31 39 32 2E │ 31 36 38 2E  03:04:00.ipaddr=192.168.
0001D5B0 31 2E 31 00 │ 6E 65 74 6D │ 61 73 6B 3D │ 32 35 35 2E │ 32 35 35 2E │ 32 35 35 2E  1.1.netmask=255.255.255.
0001D5C8 30 00 63 72 │ 61 6D 66 73 │ 61 64 64 72 │ 3D 30 78 36 │ 30 30 34 30 │ 30 30 30 00  0.cramfsaddr=0x60040000.
0001D5E0 64 61 3D 74 │ 66 74 70 20 │ 30 78 38 31 │ 30 30 30 30 │ 30 30 20 75 │ 2D 62 6F 6F  da=tftp 0x81000000 u-boo
0001D5F8 74 2E 62 69 │ 6E 2E 69 6D │ 67 3B 73 66 │ 20 70 72 6F │ 62 65 20 30 │ 3B 66 6C 77  t.bin.img;sf probe 0;flw
0001D610 72 69 74 65 │ 00 64 75 3D │ 74 66 74 70 │ 20 30 78 38 │ 31 30 30 30 │ 30 30 30 20  rite.du=tftp 0x81000000
0001D628 75 73 65 72 │ 2D 78 2E 63 │ 72 61 6D 66 │ 73 2E 69 6D │ 67 3B 73 66 │ 20 70 72 6F  user-x.cramfs.img;sf pro
0001D640 62 65 20 30 │ 3B 66 6C 77 │ 72 69 74 65 │ 00 64 72 3D │ 74 66 74 70 │ 20 30 78 38  be 0;flwrite.dr=tftp 0x8
0001D658 31 30 30 30 │ 30 30 30 20 │ 72 6F 6D 66 │ 73 2D 78 2E │ 63 72 61 6D │ 66 73 2E 69  1000000 romfs-x.cramfs.i
0001D670 6D 67 3B 73 │ 66 20 70 72 │ 6F 62 65 20 │ 30 3B 66 6C │ 77 72 69 74 │ 65 00 64 77  mg;sf probe 0;flwrite.dw

Нас интересует строка, которая передаётся ядру и говорит о том, как разбита флэшка. MTD-разделы флэшки на встраиваемых системах — это аналог партиций жёсткого диска. Но вместо сохранения информации о разбиении в начале жёсткого диска в MBR, формат тут простой как три копейки — в переменной mtdparts ядру Linux в текстовом виде перечислены размеры каждого раздела и его метка в скобках:

mtdparts=xm_sfc:256K(boot),1536K(kernel),1280K(romfs),4544K(user),256K(custom),320K(mtd)

Отсюда мы видим, что первый же раздел boot занимает 256 килобайт. Именно в нём хранится «крипта». Но этот MTD-раздел тоже разбит на регионы с различным назначением. Последние 64кб. из них — env — регион с настройками, куда U-Boot пишет свои переменные по команде saveenv, их можно вывести командой printenv. Я говорю сейчас не о командах Linux, а именно о командах U-Boot, в командную строку которого можно попасть при некотором везении, если в консоли UART нажать Ctrl+C для прерывания загрузки Linux (об этом есть огромное количество информации). Первые 191кб — это код U-Boot, следующий за ними килобайт — искомый нами регион с зашифрованной индивидуальной информацией (сто девяносто второй килобайт). Если опустить всю вышесказанную лирику, то для этой камеры «крипта» находится по шестнадцатеричному адресу 0x2FC00 и занимает 1 килобайт (0x400 байт в HEX).

А знаете ли вы, что настройки камеры хранятся в последнем разделе с меткой 'mtd'. Если этот раздел затереть через команду U-Boot 'sf erase <offset>|<partition> <len>', то все настройки камеры, включая пользовательский пароль, будут сброшены к первоначальному виду, как у новой камеры. А если ошибиться с адресами, то можно остаться без прошивки.

Чтобы убедиться, что найденный блок — это именно криптоблок, нужно проверить первые два символа. Заголовок крипты в HEX всегда D2 D4.

Если смущает командная строка, то наверняка у вас найдётся HEX-редактор, который позволит по адресам выделить и скопировать нужные нам 1024 байта зашифрованной информации. Но мне удобнее и быстрее запустить команду, которая сохранит криптоблок в отдельный файл:

dd if=BLK530WX1-0235-V1.02-fulldump-XM25QH64A.bin of=cryptoblock.bin bs=1 skip=191k count=1024

В этой команде я указываю опции:

  • if — input file;
  • of — output file;
  • bs — block size (считать в следующих опциях в единицах по одному байту, чтобы было понятней);
  • skip — пропустить до чтения 191 * 1024 * blocksize;
  • count — количество байт для записи в файл назначения 1024 * blocksize.

Вот такого содержания файл у нас получится
00000000 D2 D4 36 77 │ D6 29 5C AF │ A6 1E C1 EA │ 55 E7 27 2F │ 3C BA BB 4C │ 5D F3 08 B6  ..6w.)\.....U.'/<..L]...
00000018 12 6A 01 00 │ 01 00 00 00 │ 00 00 00 00 │ 10 00 00 00 │ 00 01 00 00 │ 00 00 00 00  .j......................
00000030 00 00 00 00 │ 68 01 00 80 │ 67 45 23 01 │ 67 45 23 01 │ 67 45 23 01 │ 67 45 23 01  ....h...gE#.gE#.gE#.gE#.
00000048 67 45 23 01 │ 67 45 23 01 │ 67 45 23 01 │ 67 45 23 01 │ 37 05 C9 22 │ 40 7A 7F CB  gE#.gE#.gE#.gE#.7.."@z..
00000060 06 0A 5C F4 │ 8B 50 1D 7A │ D1 D1 3E 09 │ C3 92 AE 2E │ C3 22 84 5A │ 18 4D 22 37  ..\..P.z..>.Ò ...".Z.M"7
00000078 7D BB 0E 31 │ 6C C0 BB 72 │ 4A 97 E7 D6 │ E7 05 D0 3A │ 56 0F 43 9A │ 21 F1 C8 E4  }..1l..rJ......:V.C.!...
00000090 14 CC 3F AC │ 1A E1 E3 97 │ B7 CF A4 A5 │ A4 B0 E3 A8 │ C0 4D A5 A5 │ B5 A5 A5 A5  ..?...㗷 Ϥ ......M......
000000A8 A5 A4 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ CD A4 A5 25 │ C2 E0 86 A4 │ C2 E0 86 A4  ............ ͤ .%........
000000C0 C2 E0 86 A4 │ C2 E0 86 A4 │ C2 E0 86 A4 │ C2 E0 86 A4 │ C2 E0 86 A4 │ C2 E0 86 A5  ........................
000000D8 17 BF E7 88 │ 3F A0 96 A4 │ AB 2A F2 DB │ FC 02 BE D1 │ 6B F5 1C 78 │ E5 6E F5 50  ....?....*......k..x.n.P
000000F0 F5 7F 14 17 │ 2B 51 C2 42 │ 91 AA 4B D0 │ 4B 61 F4 F6 │ 8B E7 52 08 │ E9 90 DA D4  ....+Q.B..K.Ka....R.....
00000108 06 76 4D EC │ E4 44 3D 5A │ C3 D0 F1 EE │ 23 B4 B0 34 │ 5F FB 84 2A │ DD 7A A0 69  .vM..D=Z....#..4_..*.z.i
00000120 62 F3 F1 CC │ 84 CC A1 8B │ C2 EF F7 27 │ 34 B4 81 77 │ 85 73 E5 28 │ A7 96 5C 07  b.. ̄  ̡ ....'4..w.s.(..\.
00000138 10 00 01 00 │ 01 08 00 01 │ 08 02 00 00 │ 52 00 00 01 │ 00 00 00 01 │ 00 00 00 00  ............R...........
00000150 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00  ........................
00000168 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ D4 53 4F 34 │ FF FF FF FF  .................SO4....
00000180 F9 CF 13 39 │ DF 73 94 BD │ D5 BF 9D BC │ B1 85 9B 50 │ 9D 98 B1 C3 │ 3D E9 D7 39  ...9.s..տ .....P....=..9
00000198 E8 B6 5F 88 │ 9D F4 95 17 │ C5 28 CF 25 │ 1C 64 E2 F1 │ A3 00 AF 55 │ 05 CA 25 A3  .._......(.%.d.....U..%.
000001B0 63 D6 E6 A1 │ 41 3E DA 2A │ B5 A5 A4 A5 │ A4 AD A5 A4 │ AD A7 A5 A5 │ F7 A5 A5 A4  c...A>.*................
000001C8 A5 A5 A5 A4 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5  ........................
000001E0 A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 5A A5  ......................Z.
000001F8 AF E6 E8 67 │ E2 A2 8F D6 │ F6 44 27 48 │ F8 F7 19 5B │ 1E EC B7 BE │ E6 70 B0 EE  ...g⢏  ..D'H...[.췾 .p..
00000210 27 B4 C2 38 │ 75 57 5C 25 │ 3E C4 0C A0 │ E6 9B F6 5D │ 60 9E A6 59 │ 96 BF 34 B4  '..8uW\%>......]`..Y..4.
00000228 AC 6B F2 13 │ DB 23 03 04 │ D7 45 BB 4D │ 9C 18 F2 5B │ 5D 7E 7B 44 │ 1B 73 A2 FA  .k...#...E.M...[]~{D.s..
00000240 12 49 54 28 │ 88 08 5D B4 │ 74 50 C7 CF │ 74 4A D3 CB │ 90 0F 99 AC │ 28 8C 87 05  .IT(..].tP..tJ.ː ...(...
00000258 01 10 00 11 │ 40 10 02 02 │ 08 00 46 11 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00  ....@.....F.............
00000270 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00  ........................
00000288 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 0C 53 35 17 │ 00 00 00 00  .................S5.....
000002A0 A7 69 D3 B5 │ D3 4E 24 78 │ 89 65 A1 5A │ C6 5F 4F 62 │ 5E 11 C2 26 │ 25 F3 3C D2  .iӵ .N$x.e.Z._Ob^..&%.<.
000002B8 1B 96 08 DA │ 3E 78 26 E5 │ 62 79 1B 36 │ C7 BE AF 51 │ A4 51 2B 6B │ 30 7B CD 8E  ....>x&.by.6Ǿ .Q.Q+k0{ ͎
000002D0 0C 10 B4 B0 │ 04 71 84 20 │ A4 B5 A5 B4 │ E5 B5 A7 A7 │ AD A5 E3 B4 │ A5 A5 A5 A5  .....q. ....嵧 ...㴥 ...
000002E8 A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5  ........................
00000300 A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 5A A5 A5  .....................Z..
00000318 FD 31 0C 31 │ 2B A0 FE 6A │ D2 2E AF 51 │ 11 9D 6E D3 │ A1 D9 70 09 │ 21 74 E4 78  .1.1+..j...Q..nӡ .p.!t.x
00000330 0F 38 D1 C6 │ 24 B4 A5 22 │ 65 B1 54 90 │ D1 53 7A 24 │ 01 A9 76 13 │ 48 E4 66 69  .8..$.."e.T..Sz$..v.H.fi
00000348 3E D7 73 DE │ CB 58 57 5A │ 10 29 A0 34 │ 5D 46 57 C2 │ 78 AB D2 4A │ 7E CD 6F FE  >.s..XWZ.).4]FW.x..J~.o.
00000360 77 65 12 3F │ C9 F8 A9 09 │ D0 9C E7 1C │ F4 BF 76 05 │ E8 18 B9 C6 │ 5E 11 89 56  we.?....М ....v.....^..V
00000378 01 01 01 15 │ 01 46 00 0D │ 01 65 00 E8 │ 01 00 11 11 │ 41 44 50 11 │ A1 03 06 0A  .....F...e......ADP.....
00000390 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00  ........................
000003A8 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 52 28 EF 5E │ B8 C3 2F 66  ................R(.^../f
000003C0 A9 97 1B E8 │ BB 59 CE 12 │ 48 51 58 DD │ 74 78 32 71 │ 3A A3 5A A4 │ 89 6A 96 83  .....Y..HQX.tx2q:.Z..j..
000003D8 5B 38 23 66 │ AD DE 57 D7 │ F5 72 C0 B2 │ CB 0F C4 14 │ 60 9C 71 D4 │ 16 A4 A4 A4  [8#f..W..r......`.q.....
000003F0 A4 A5 A4 A5 │ A5 A5 54 66 │ 43 78 CC 70 │ 70 0B B9 87 │                            ......TfCx.pp…


Если нужно в шестнадцатеричной системе исчисления, то с помощью калькулятора вы можете перевести десятичные цифры DEC в HEX и получить, что регион прошивки с «криптой» на платах XM, как правило, 0x2FC00 — 0x30000. Иногда на более старых камерах встречается диапазон 0x1FC00 — 0x20000.

В результате мы получим файл cryptoblock.bin размером 1024 байта. Это и есть сохранённая «крипта», которую нужно будет вставить в новую прошивку камеры на своё место, чтобы камера обрела свой старый заводской законный MAC-адрес и CloudID.

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

▍ Будет ли работать камера без криптоблока


У врача пациент спрашивает после сложной и тяжёлой операции:
— Доктор, скажите, я жить буду?
— Ну-у-у… Возможно. Но я бы не советовал, не советовал…

Без криптоблока камера работать будет, но без облака, с нюансами. MAC-адрес такой камеры становится 00:00:23:34:45:66. Работать камера с таким адресом будет ровно до того момента, пока в сети не появится ещё одна такая же камера. К той поре уже все забудут про то, что камера перешивалась, и через много дней ковыряния в глюках сети, когда всем коллективом поймут, кто виновен в этом, уже накопится достаточно злости, чтобы бить виновного коллективно и организованно.

▍ Что делать, если криптоблок утерян


Если лень восстанавливать криптоблок, и вам не нужен доступ к облаку, а достаточно стандартных протоколов камеры, то ставьте прошивку OpenIPC. В ней не используется криптоблок, а любой MAC-адрес можно задать следующей командой:

fw_setenv ethaddr  XX:XX:XX:XX:XX:XX

Рекомендуется использовать старый MAC, если он у вас сохранился, хотя бы чтобы производитель камеры корректно определялся при сканировании в nmap:

Сканер nmap показывает производителя исходя из MAC-адреса
#  nmap -nsP 192.168.1.0/24
Starting Nmap 7.94 ( nmap.org ) at 2023-10-30 10:15 EET
Nmap scan report for 192.168.1.1
Host is up (0.0010s latency).
MAC Address: BC:5F:F4:BC:EA:24 (ASRock Incorporation)
Nmap scan report for 192.168.1.2
Host is up (0.0017s latency).
MAC Address: 00:1D:0F:FE:07:6C (TP-Link Technologies)
Nmap scan report for 192.168.1.20
Host is up (0.0012s latency).
MAC Address: 00:12:16:BB:93:6F (ICP Internet Communication Payment AG)
Nmap scan report for 192.168.1.21
Host is up (0.0015s latency).
MAC Address: 00:12:16:C6:3A:EC (ICP Internet Communication Payment AG)
Nmap scan report for 192.168.1.22
Host is up (0.0015s latency).
MAC Address: 00:2A:2A:A2:38:55 (Unknown)
Nmap scan report for 192.168.1.23
Host is up (0.0012s latency).
MAC Address: 00:1C:27:01:AC:56 (Sunell Electronics)
Nmap scan report for 192.168.1.24
Host is up (0.0015s latency).
MAC Address: 00:12:17:AF:F8:36 (Cisco-Linksys)
Nmap scan report for 192.168.1.25
Host is up (0.0012s latency).
MAC Address: 00:12:41:F1:CA:43 (a2i marketing center)
Nmap scan report for 192.168.1.26

Но если старый MAC не сохранился, совсем не беда влепить любой другой и даже подделать производителя на какой нибудь-модный Hikvision.

А знаете ли вы, что вендор определяется по первым трём байтам MAC-адреса? Вот по этому списку можно самостоятельно определить вендора.

Второй вариант — создать клон камеры товарища с такой же камерой с пониманием всех последствий как для вас, так и для всех пользователей камеры — донора прошивки.

Но есть ещё один вариант, который можно рассмотреть, если у вас прямо совсем много времени и умений: сгенерировать новый криптоблок.

▍ Генератор крипты


Пользователь github под ником nikitos1550 создал репу с генератором «крипты» для камер XM.

Никитос — красавчик, решил пойти простым путём, не исследуя дизассемблером и не взламывая криптоалгоритмы, чем занялся бы достаточно умный, но недостаточно хитрый хакер. Он взял библиотеки, такие как libcrypto.so из прошивки, в них нашёл нужные функции для кодирования и декодирования и написал программы, которые используют библиотеки производителя для шифрования или дешифрования криптоблока.

Запустить на своём домашнем линуксе генератор не получится. Так как библиотеки были выковыряны из оборудования XM на ARM-платформе, то запустить эти программы можно тоже только на аналогичном оборудовании в системе с полным комплектом библиотек. Для этого нужно прошить подготовленную скриптом часть прошивки на камеру или регистратор, загрузиться и в ней сгенерировать «крипту». После чего вернуть родную прошивку.

Я уже рассказывал про то, как можно использовать камеры со сгоревшим сенсором в качестве одноплатного компьютера. Так, из ненужной камеры можно подготовить отдельную железку для генерирования криптоблока и открыть на базаре ларёк, чтобы вытеснить конкуренцией даже бананы. Уверен, будет очередь. Шучу, конечно. Не бананы!

▍ Онлайн-сервисы генерирования криптоблока


Чтобы не заморачиваться с установкой прошивки для генерирования криптоблока, можно воспользоваться онлайн-сервисом cgistart.com.

Для этого вам нужно иметь файл с дампом прошивки камеры. Тут всё просто:

  1. Вводим необходимый MAC и адрес криптоблока в прошивке в шестнадцатеричном виде без префикса «0x».
  2. Выбираем файл прошивки и отправляем файл на сервер.
  3. Скачиваем обратно переделанную прошивку и зашиваем её назад в камеру.

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

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

▍ Резюме


Теперь вы понимаете, насколько безопасны облака популярных камер. Конечно, это уже не так доступно, как в своё время «облако» Foscam, когда любая домохозяйка, помешивая борщ, могла запустить второй рукой сканер и полистать тысячи камер, установленных в спальнях, и в лучшем случае сравнить, как спят чужие дети. Подбор Cloud ID прямым перебором имеет мало смысла, так как количество комбинаций слишком огромно. Но подмена криптоблока позволяет не только увидеть Cloud ID, но и лить своё видео в это облако.

Установка сложного пароля на доступ к камере — это самый минимум, который должен сделать для безопасности пользователь камеры, даже если она находится без внешнего IP-адреса в локальной сети за роутером. Минимум — не гарантирует безопасность, а лишь повышает шанс. В идеале камера вообще не должна иметь доступ к интернету. Но такой вариант массового пользователя тоже не устроит, ведь мы хотим лёгким способом видеть своё имущество, где бы ни находились. Тут-то и начинаются танцы компромиссов с файрволами и виртуальными приватными сетями.

Скидки, итоги розыгрышей и новости о спутнике RUVDS — в нашем Telegram-канале ????

Комментарии (27)


  1. Javian
    16.12.2023 14:47

    XMEye наверное не так сложно. Было у меня две одинаковые камеры. С исправной взял дамп, где в двух местах в явном месте был виден серийный номер - переписал от неисправной и записал в флешь. Камера ожила в родном ПО.


    1. SergeyNovak Автор
      16.12.2023 14:47

      Нужны пруфы: модели камер, скриншоты.

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


      1. Javian
        16.12.2023 14:47

        Так оно и получилось. Две камеры с одинаковым номером попеременно давали картинку в приложение. Или вообще не давали. Было забавно.


        1. SergeyNovak Автор
          16.12.2023 14:47

           в явном месте был виден серийный номер - переписал от неисправной и записал в флешь

          Так об этом и речь, что недостаточно исправить серийник, нужно менять весь криптоблок чтобы камеры не были клонами.


      1. sansar
        16.12.2023 14:47

        huachung age technology (net dvr)....ну или почти всё с АПП V12, n_eye, goolink этим прям страдали.


  1. begin_end
    16.12.2023 14:47

    Кстати, а для XMEye-камер-DVRов существует рабочий клиент-приложение под Win (желательно опенсорсный)? Или там есть только этот ужасный ActiveX под старый IE... Я какие-то вещи пробовал, но с китайскими не заработало.
    Вот под андроид подобного достаточно.


    1. SergeyNovak Автор
      16.12.2023 14:47

      Есть, но эта софтина больше для настройки. Работает даже из Linux через wine.

      https://team.openipc.org/ipcam_dms/


    1. Javian
      16.12.2023 14:47

      Для облака не встречал. Запускаю active x через совместимость в edge


      1. begin_end
        16.12.2023 14:47

        Я обычно не в облаке использую, а прямое подключение. Вон то ipcam dms опробовал - неплохо работает, но как просмотрщик, конечно не удобно.
        Может на его базе что-то сделать, но код вроде на питоне - тут я всё. Продолжаю поиски.

        На самом деле сам XMEye ActiveX супер не удобен, не сохраняет настроенный режим отображения, иногда плохо переподключается, беда с масштабированием (много полезного места теряет), нет сохранения паролей.
        Точно не тот софт, который раз настроил и всегда работает, даже если внезапно перезагрузить.


        1. sarhome
          16.12.2023 14:47

          Есть родное CMS, работает сносно, как по мне, лучше так чем через браузер.


          1. TVExpert
            16.12.2023 14:47

            CMS не без претензий к логике настроек, но да, это более профильно чем через браузер (вариант, который видимо был сделан как "запасной вариант/крайний случай").
            Но... по слов одного из "тянущих тему" представителей ХМ в РФ, поддержка/разработка CMS прекращена, все "силы" (ухахатывающийся смайлик) переброшены на VMS.
            Мнения/просьбы/предложения/помощь пользователей демонстративно проигнорированы.

            P.S.
            Кстати, м.б. кто в курсе, как "достучаться" до разработчиков, дабы они пофиксили довольно дикий косяк сбивающий с толку Андроид - приложение XMEye ?
            Суть в чём - если при просмотре записать на устройство кусочек видео (нажатием на экранную "запись видео"). То происходит создание файла с именем yyyymmdd_hhss.mp4_****.mp4 (какое то малопонятное дублирование имени, где вторая половина формируется произвольно).
            Андроид чаще всего "заметно удивляется" от таких вариантов в именовании файла.

            Плюс у меня, на ксяомишном МУИ записанное таким образом (и даже переименованное) видео, нельзя отправить через телеграм/ватсап.
            На старом ксяоми (4) такого не было, на новом (11) упирается не понятно во что.


            1. Javian
              16.12.2023 14:47

              происходит создание файла с именем yyyymmdd_hhss.mp4_****.mp4

              У меня XMEye сохраняет в виде "дата время начала"_"дата время конца" фрагмента видеозаписи ".mp4".

              Можете попробовать iCSee - теже данные аккаунта ввести и появятся камеры с большим количеством настроек. Но программа надоедливо денег просит.


              1. TVExpert
                16.12.2023 14:47

                Спасибо, надо будет попробовать.


        1. Javian
          16.12.2023 14:47

          Локально с телефоном смотрю через onvier. C ПК - ONVIF Device Manager https://habr.com/ru/companies/synesis/articles/120747/


        1. SergeyNovak Автор
          16.12.2023 14:47

          ActiveX - это пережиток 90х как и Макромедиа Флэш (да, встречается на многих камерах). Но радует, что все нормальные камеры умеют RTSP/ONVIF и достаточно RTSP клиента, чтобы иметь доступ ко всему личному зоопарку камер. Самая главная проблема в RTSP - это найти RTSP путь, по которому камера отдает видеопоток. Но с этой проблемой как раз и справляется ONVIF (клиент по ONVIF протоколу запрашивает RTSP URL и дальше работает по RTSP).

          Ну и, конечно-же, эти стандартные протоколы снимают головную боль с того, что есть клиент под винду, но нет под линукс или Андроид. RTSP - он и в африке RTSP.


    1. sansar
      16.12.2023 14:47

      а чем родной vms не угодил ? и локальные в полном доступе и облачные(всмысле через облако без пробросов и т.п.)


      1. begin_end
        16.12.2023 14:47

        Так родной под WIndows - это вот тот ActiveX, что на скриншоте из статьи. Продублирую кратко проблемы: "не сохраняет настроенный режим отображения, иногда плохо переподключается, беда с масштабированием (теряет полезную площадь экрана), нет сохранения паролей".
        В итоге он не удобен для необслуживаемой демонстрации на настенном экране 24/7. Уверенно утверждаю, исходя из восьмилетнего опыта использования.
        С пробросами у меня проблем нет, всюду статические IP добыты; облакам не доверяю.

        Не по теме, но чтобы было понятнее, зачем хочу улучшить отображение:
        Слежу за дачей из дома с 2013 года, преследую 3 цели: иногда посмотреть на красивые виды природы; убедиться что ничего не сломано непогодой или не украдено (впрочем, сам факт наличия камер привел к тому, что это прекратилось); контролировать состояние разнообразной электроники, отопления и т.д. Была еще цель следить за/удаленно кормить кота, решено (кот забран с собой).
        На даче установлено 15 аналоговых камер и 3 цифровые высокого разрешения. Аналоговые камеры разведены на 2 видеорегистратора (основной и дублирующий). Есть еще третий видеорегистратор, который я использую как некий аналог части KVM (захватывает картинки с серверов, для аварийных ситуаций). Регистраторы подключены к двум разным провайдерам (ADSL/4G), тоже для надежности. Питание регистраторов и серверов резервирует отчасти кустарный UPS, на десяток АКБ 12-7. Питание камер разводится линией 36В с отдельными блочками у каждой камеры (т.к. у аналоговых есть свои нюансы), постепенно добавляю каждой камере самодельный Li-акб UPS (раньше ставил NiMH).
        Постепенно строю обратную систему - смотреть за домом из дачи.
        Зачем мне это нужно в плане практической пользы..? И сам не знаю. Так спокойнее, интереснее.


        1. sansar
          16.12.2023 14:47

          я про этот родной. пароли добавленных устройств точно помнит...а про сохранение видов не понятно, что нужно.

          Для мониторинга ~150 движущихся регов использовалась лишь с одним существенным недостатком - сначала грузится список устройств с опросом каждого, если кто-то не в сети ждать чтоб открыть последнего очень долго.


          1. begin_end
            16.12.2023 14:47

            Хм, интересно. Это в первый раз вижу. У меня во всех китайских регистраторах/камерах разных поставщиков и годов (от самых старых до последних) подгружается/предлагает только то, что на скриншотах из статьи.


    1. Maximuzz
      16.12.2023 14:47

      у них есть свежее win-приложение XMEye VMS вполне рабочее

      url


  1. SergeyNovak Автор
    16.12.2023 14:47

    .


  1. Wesha
    16.12.2023 14:47

    Запускай себе приложение, и оно получит доступ к видеопотоку или к архиву через облако.

    ...а потом в один прекрасный день окажется, что кому-то где-то что-то не понравилось — ну, например, что вы живёте на каком-то неправильном полуострове (сейчас разговор идёт о конкретном оконечном пользователе, который на всю эту политику повлиять может чуть менее, чем никак) — и это ваше облако накроется санкциями какими, или ещё какой звездой — и "что, сынку, помогли тебе твои ляхи облака?"


    1. TVExpert
      16.12.2023 14:47

      Относительно продвинутые "локальные" дилеры/представители (по их заверениям) поднимают свои облачные сервера + прописывают в FW камер/регистраторах их "координаты".
      Но XM изначально ведёт довольно странную "политику" по качеству/продуманности своих продуктов. Примерно на уровне 1 шаг вперёд - 2 назад. Многие вещи вообще не подаются здравому смыслу и логике.

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

      В итоге получается какой то винегрет.
      Что по реализации возможностей железа, что по продуманности ПО, что по реальной работе всей "цепочки" в целом (IPC/NVR/APP).


    1. Javian
      16.12.2023 14:47

      Такие камеры есть. На 4pda было в теме об ip камерах упоминание производителя, который перестал работать на полуострове. Камеры превратились в тыкву.


  1. VADemon
    16.12.2023 14:47

    Но если старый MAC не сохранился, совсем не беда влепить любой другой и даже подделать производителя на какой нибудь-модный Hikvision.

    Пожалуйста, используйте в качестве случайного locally administrated MAC-адреса.


    1. SergeyNovak Автор
      16.12.2023 14:47

      Кому какое горе какие МАКи я использую в своей локалке?


      1. VADemon
        16.12.2023 14:47

        Цитата

        MAC-адрес такой камеры становится 00:00:23:34:45:66. Работать камера с таким адресом будет ровно до того момента, пока в сети не появится ещё одна такая же камера. К той поре уже все забудут про то, что камера перешивалась, и через много дней ковыряния в глюках сети, когда всем коллективом поймут, кто виновен в этом, уже накопится достаточно злости, чтобы бить виновного коллективно и организованно.