Статья опубликована по просьбе автора AS IS
Всем привет! Не так давно на рынок диабетических товаров вышел очень удобный глюкометр AccuChek Mobile.
Основным преимуществом данного изобретения является то, что он работает без тест-полосок. Вместо них производители Roche решили использовать специальные кассеты, которые содержат в себе барабан с лентой на 50 контрольных измерений.
И тот факт, что для замера уровня гликемии в крови диабетику больше не приходится возиться с кучей инструментов (бочонок с полосками, ручка-ланцет и глюкометр) несомненно радует, теперь все это сосредоточено в одном устройстве. Особенно это удобно людям ведущий активный образ жизни.
Но, как и за все в этом мире, за комфорт необходимо платить. В данном случае глюкометр в интернет магазине ТЕСТ-ПОЛОСКА стоит 3600 рублей в комплекте с одной тест-кассетой. (
http://www.test-poloska.ru/catalog/specialoffers/accucheckmobile.html) А каждая тест-кассета в этом же магазине (50 измерений) стоит 1060 рублей, что не мало (
http://www.test-poloska.ru/catalog/teststripes/mobileteststrips50.html) и эти цены одни из самых низких в интернете... (Средняя цена на обычные полоски от 300 до 600 рублей за 50 шт) Более того, этот глюкометр настолько «умный», что он не будет работать с кассетами с просроченным сроком годности, а установленная в глюкометр кассета должна быть использована не позднее чем через 90 дней со дня установки. Этот факт расстраивает, ведь многие глюкометры можно использовать с просроченными полосками, и результат как известно будет искажен совсем не сильно (в среднем 0.2 — 0.5 ед), а экономия получается существенная.
Так вот, данный глюкометр так же можно обмануть, заставив его работать с просроченными тест-кассетами при этом не теряя гарантии и вмешиваясь в конструкцию глюкометра!
Далее я опишу как происходит «обман» прибора и распишу сам способ, который доступен любому человеку. (
ВСЕ ДЕЙСТВИЯ С ГЛЮКОМЕТРОМ ВЫ ПРОВОДИТЕ НА СВОЙ СТРАХ И РИСК, АВТОР СТАТЬИ НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ТОЧНОСТЬ ИЗМЕРЕНИЙ «ОБМАНУТЫМИ» КАССЕТАМИ И ЗА СОХРАННОСТЬ ГЛЮКОМЕТРА)
С момента покупки глюкометра я задался вопросом, как заставить его измерять сахар просроченными кассетами. Обшерстив весь интернет — форумы, видео и другие материалы на разных языках я не нашел никакого готово решения, и решил сделать первый шаг сам.
Рассудив логически, я пришел в выводу, что срок годности зашит в каждую кассету отдельно, а значит и начинать исследование необходимо с кассеты, а решение лежит, а точнее сказать приклеено, на поверхности самой кассеты: Но не с этой стороны.))
Вот с этой:
После взгляда на эту наклейку, квадратная посредине с надписью LOT и REF мне в голову пришла аббревиатура — RFID! (RFID (англ. Radio Frequency IDentification, радиочастотная идентификация) —
https://ru.wikipedia.org/wiki/RFID)
Тут все стало ясно, это RFID чип и вся информация содержится в нем, а передача ее в глюкометр осуществляется бесконтактным методом, посредством радиоканала.
Отклеиваем чип и видим такую вот картинку:
В подробностях, на сколько позволила разрешающая способность матрицы камеры телефона =)
Наша теория оказывается верна, теперь необходимо считать информацию с это чипа.
Специального RFID считывателя у меня под рукой не оказалось, да и стандарта по которому он собран я тоже не знаю. Но т.к. я являюсь обладателем смартфона с продвинутым NFC передатчиком (Sony Xperia Z3 Comapact) я просто прикоснулся телефоном к чипу и услышал заветный сигнал и ошибку...
Раз сработало, значит чип либо семейства Mifire/Ultralight (Проездные метро), либо ISO 14443, либо ISO 15693 — все это стандарты, которые могут содержать достаточно информации о дате и сроке годности.
В плей-маркете я обнаружил приложение RFID NFC Tool (https://play.google.com/store/apps/details?id=tw.com.method.rfidtool ), которое все эти стандарты знает и знает команды для считывания информации с чипов. Установив его и метод «тыка» пробуя различные стандарты, я выяснил что чип типа
ISO 15693 Vicinity и считав всю информацию с него получил следующее —
Inventory — E0:40:01:00:26:8A:D9:1E
Sys info:
DSIF 0×00
AFI 0×00
NoB 28, 4 bytes per block
IC reference 0×01
0×00 30 20 A0 97
0×01 6F 5A 32 13
0×02 1E 46 1E 46
0×03 5C 28 3C A5
0×04 0A 14 0C 0E
0×05 10 12 14 11
0×06 1F 64 0A 0A
0×07 32 58 EA D3
0×08 C7 12 0A 98
0×09 75 A1 AA 13
0×0A DF 0E 3D E7
0×0B F8 00 F1 DD
0×0C 00 F1 F1 A9
0×0D 45 0A 32 32
0×0E 71 FF FF 37
0×0F 55 96 CA 54
0×10 B8 08 02 04
0×11 00 00 00 20
0×12 35 40 41 3B
0×13 31 24 16 50
0×14 3C 01 0F 28
0×15 00 00 D0 F0
0×16 76 1E 07 3F
0×17 2D 00 00 00
0×18 00 00 00 00
0×19 00 00 00 00
0×1A 00 00 00 00
0×1B 00 00 00 00
Далее я делал несколько измерений и снова считывал кассету, затем попробовал прочитать информацию с других кассет (с аналогичными и отличающимися сроками годности) И выяснилось несколько важных фактов. А именно назначение блоков:
Inventory — E0:40:01:00:26:8A:D9:1E —
Уникальный идентификатор кассеты (У всех разный)
Sys info: —
Информация о блокировках и разрешении чтения/записи.
DSIF 0×00
AFI 0×00
NoB 28, 4 bytes per block
IC reference 0×01
Полезные данные: (Здесь были определены блоки отвечающие за срок годности помечаю красным, остальные блоки неизменны всегда) Блоки перед которыми стоит точка защищены от записи — только чтение (Производитель позаботился о том что бы эти данные нельзя было изменить.)
0×00 30 20 A0 97
0×01 6F 5A 32 13
0×02 1E 46 1E 46
0×03 5C 28 3C A5
0×04 0A 14 0C 0E
0×05 10 12 14 11
0×06 1F 64 0A 0A
0×07 32 58 EA D3
0×08 C7 12 0A 98
0×09 75 A1 AA 13
0×0A DF 0E 3D E7
0×0B F8 00 F1 DD
0×0C 00 F1 F1 A9
0×0D 45 0A 32 32
0×0E 71 FF FF 37
0×0F 55 96 CA 54
0×10 B8 08 02 04
0×11 00 00 00 20
0×12 35 40 41 3B
0×13 31 24 16 50
0×14 3C 01 0F 28
0×15 00 00 D0 F0
Количество оставшихся измерений: (У новой кассеты 16 и 17 блоки = 00 00 00 00, это значит осталось 50 измерений, в данном снапшоте осталось 43 измерения)
0×16 76 1E 07 3F
0×17 2D 00 00 00
Нулевые значения: (Нигде не используются, видимо избыточная память чипа)
0×18 00 00 00 00
0×19 00 00 00 00
0×1A 00 00 00 00
0×1B 00 00 00 00
Расшифровать 16-тиричный код, что бы ввести нужную дату, мне пока что не удалось... Ни контрольные суммы, ни какие либо алгоритмы сюда не подходят пока что — получается всегда белиберда... Да и все блоки серьезно защищены от записи.
По идентификатору чипа и по интернет каталогу я выяснил что это за чип [PHILLIPS Semiconductors NXP I-CODE SLI (SL2 ICS20)] и наше для него «датащит». (Данные RFID метки имеют 28 перезаписываемых блока памяти с возможностью блокировки)
В «датащите» сказано, что каждый блок можно перезаписать 100000 раз, но при блокировке блока от записи — запись в него уже
не возможна!
Первый и самый просто способ взлома глюкометра состоит в том, что бы сбрасывать количество измерений на чипе с хорошим сроком годности и переклеивать его на просроченную, но неиспользованную кассету.
Необходимо:
1. Андроид — Смартфон с поддержкой NFC
2. Установленная программа NFC RFID Tool
3. Новая просроченная кассета
4. Использованная кассета с нормальным сроком годности.
Описание:
1. Достаем из глюкометра старую кассету,
2. Вставляем просроченную и включаем аппарат (Это нужно сделать что бы сбросить память глюкометра на старый чип, иначе не сработает)
3. После того как вылезла ошибка вытаскиваем просроченную кассету и меняем на ней чип на тот что приклеен на использованной кассете.
4. Запускаем RFID NFC Tool, выбираем ISO 15693 и прикасаемся к чипу, который мы только что приклеили.
5. Выбираем в пункте Command list — пункт Write single block.
6. В графе BLOCK(hex) пишем 16
7. В графе DATA(hex) пишем 00000000
8. Жмем Run command
9. Повторяем пункты 6-8, только вместе 16 теперь пишем 17 (Все это надо делать, не отводя чип от телефона)
10. Убираем телефон в сторону и вставляем кассету в глюкометра
11. Вуаля! Получаем сообщение что осталось 50 измерений — можно использовать.
Таким способом можно пользоваться до тех пор, пока либо физически не повредится чип, либо пока срок годности, прописанный в нем не подойдет к концу.
Я решил пойти другим путем и заказал упаковку этих чипов в интернет магазине, что бы попробовать записать на них срок годности на пару лет вперед :) и переписывать только количество измерений.
Посылка пришла в виде вырезаемых чипов на клейкой основе. Я сразу вырезал парочку под ширину кассеты (Вертикально они не вставляются)
Проверив чипы (Записав на них данные по блочно с одной из имеющихся у меня кассет) я начал методом «тыка» менять данные в тех блоках, которые я отмечал красным ранее.
И в итоге у меня получилось! Правда я не знаю до, когда этот чип будет работать, пока что срок годности я вижу всегда на + 90 дней вперед ;) Записал видео демонстрирующее, работу чипа:
https://www.youtube.com/watch?v=bDQCBiKevZ8
И представляю вашему вниманию данные для записи на чип:
0×00 30 20 A0 97
0×01 7D 5A 32 13
0×02 1E 46 1E 46
0×03 5C 28 3C A5
0×04 0A 14 0C 0E
0×05 10 12 14 11
0×06 1F 64 0A 0A
0×07 32 58 EA D3
0×08 C7 12 0A 98
0×09 75 A1 AA 13
0×0A DF 0E 3D E7
0×0B F8 00 F1 DD
0×0C 00 F1 F1 A9
0×0D 45 0A 32 32
0×0E 71 FF FF 37
0×0F 55 96 CA 54
0×10 B8 08 02 04
0×11 00 00 00 20
0×12 35 40 41 3B
0×13 31 24 16 50
0×14 3C 01 0F 28
0×15 00 00 D0 F0
Если у кого-то получится разобраться в коде — то будет крайне здорово! Ведь можно будет тогда указать срок годности любой вплоть до 2099 года! И пользоваться всегда этим чипом без переклеек и сложных манипуляций.
По сути этот метод ничем не отличается от переклеек старого чипа с использованной кассеты, всегда надо «сбрасывать» измерения. Но с этим чипом удобно то, что он ложится в глюкометр точно на считыватель, и не надо опасаться, что повредится индукционная антенна во время переклейки. А если вам будет лень перебирать разные значения блоков, можно просто считать данные с кассеты с большим сроком годности (это можно сделать даже, не вскрывая коробочки) и записать данные на этот чип.
Удачи!
Если кто-то заинтересуется данной темой, милости прошу и оставляю свои контакты
Летов Никита Кириллович
Email — letnik86@gmail.com
Мобильный — +7(905)549-36-47
ВК — http://vk.com/technixc