Как эмулировать тег NFC FeliCa с определенным кодом службы и блокировать данные?Python

Программы на Python
Ответить
Anonymous
 Как эмулировать тег NFC FeliCa с определенным кодом службы и блокировать данные?

Сообщение Anonymous »

Я работаю над проектом по эмуляции тега NFC с определенными сервисными кодами и блокировке данных в Python с помощью nfcpy. Моя цель — прочитать карту, захватить ее данные (сервисные коды, блоки и содержимое), а затем эмулировать этот тег с точной структурой данных, чтобы считыватель распознавал его как исходную карту.
Код выполняется. без ошибок, и я вижу выходные сообщения типа «тег активирован», но устройство чтения по-прежнему не распознает эмулируемый тег, как это происходит с исходной картой. Кроме того, я не могу правильно установить сервисный код таким образом, чтобы обеспечить правильное чтение и запись данных на основе блоков, полученных с исходной карты.
Вот что я сделал. далеко:
  • Я могу успешно считать данные с карты, включая сервисные коды и данные блокировки, с помощью nfcpy.
  • На основе собранных данных я настроил среду эмуляции с помощью nfcpy на USB-считывателе NFC (Sony RC-S380).< /p>
  • Я пробовал добавлять службы с помощью tag.add_service() и определять функции ndef_read и ndef_write для предоставлять данные на уровне блоков.
Я могу успешно считывать данные с карты, включая сервисные коды и данные блокировки, используя nfcpy. На основе собранных данных я настроил среду эмуляции с помощью nfcpy на USB-считывателе NFC (Sony RC-S380). Я пробовал добавлять службы с помощью tag.add_service() и определять функции ndef_read и ndef_write для предоставления данных на уровне блоков.
Вот пример моего кода:
import nfc
import struct

ndef_data_area = bytearray(64 * 16)
ndef_data_area[0] = 0x10 # NDEF mapping version '1.0'
ndef_data_area[1] = 12 # Number of blocks that may be read at once
ndef_data_area[2] = 8 # Number of blocks that may be written at once
ndef_data_area[4] = 63 # Number of blocks available for NDEF data
ndef_data_area[10] = 1 # NDEF read and write operations are allowed
ndef_data_area[14:16] = struct.pack('>H', sum(ndef_data_area[0:14])) # Checksum

def ndef_read(block_number, rb, re):
if block_number < len(ndef_data_area) / 16:
first, last = block_number * 16, (block_number + 1) * 16
return ndef_data_area[first:last]

def ndef_write(block_number, block_data, wb, we):
global ndef_data_area
if block_number < len(ndef_data_area) / 16:
first, last = block_number * 16, (block_number + 1) * 16
ndef_data_area[first:last] = block_data
return True

def on_startup(target):
idm, pmm, sys = '03FEFFE011223344', '01E0000000FFFF00', '12FC'
target.sensf_res = bytearray.fromhex('01' + idm + pmm + sys)
target.brty = "212F"
return target

def on_connect(tag):
print("tag activated")

tag.add_service(0x1A88, ndef_read, ndef_write)
tag.add_service(0x000B, ndef_read, lambda: False)
return True

with nfc.ContactlessFrontend('usb:054c:06c1') as clf:
while clf.connect(card={'on-startup': on_startup, 'on-connect': on_connect}):
print("tag released")

Мои вопросы:
  • Как правильно эмулировать тег NFC с определенными сервисными кодами и блокировать данные, чтобы считыватель интерпретирует его точно так же, как исходную карту?
  • Есть ли что-то особенное для nfcpy, чего мне не хватает при установке сервисных кодов или данных блока, что может повлиять на эмуляцию?
    Есть ли лучшие библиотеки или методы для достижения тега FeliCa эмуляции, особенно если nfcpy имеет ограничения в обработке служебного кода?
Будем очень признательны за любые советы и предложения! Спасибо.
追記:
Я пытаюсь реализовать в программе следующие данные.
 connected
System 8688 (unknown)
Area 0000--FFFE
System FE00 (Common Area)
Area 0000--FFFE
Area 1A80--1AFF
Area 1A81--1AFF
Random Service 106: write with key & read w/o key (0x1A88 0x1A8B)
0000: 30 31 30 30 30 30 30 30 30 30 30 30 00 00 30 31 |010000000000..01|
0001: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |... ............|
0002: 30 30 30 30 30 30 30 30 32 30 32 34 30 34 30 31 |0000000020240401|
0003: 32 30 33 33 30 33 33 31 63 30 30 30 30 30 30 30 |20330331c0000000|
Area 1B00--1B3F
Area 1B01--1B3F
Random Service 108: write with key & read with key (0x1B08 0x1B0A)
Area 1B40--1B7F
Area 1B41--1B7F
Random Service 109: write with key & read with key (0x1B48 0x1B4A)
Area 42C0--42FF
Area 42C1--42FF
Random Service 267: write with key & read with key (0x42C8 0x42CA)
Area 4300--433F
Area 4301--433F
Random Service 268: write with key & read with key (0x4308 0x430A)
Area 4340--437F
Area 4341--437F
Random Service 269: write with key & read w/o key (0x4348 0x434B)
0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
* 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
0002: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
Area 50C0--50FF
Area 50C1--50FF
Random Service 323: write with key & read w/o key (0x50C8 0x50CB)
0000: 00 00 21 12 08 00 04 00 00 00 00 00 00 00 00 00 |..!.............|
0001: 01 00 22 12 26 00 06 49 00 00 00 00 00 00 00 00 |..".&..I........|
0002: 00 00 01 68 00 00 00 00 00 00 00 00 00 00 00 00 |...h............|
0003: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
* 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
0005: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
Cyclic Service 323: write with key & read w/o key (0x50CC 0x50CF)
0000: 20 22 12 13 19 21 35 05 00 00 10 00 09 90 00 00 | "...!5.........|
0001: 20 22 12 12 13 14 59 05 00 00 93 00 10 00 00 00 | "....Y.........|
0002: 20 22 12 10 15 08 51 05 00 00 27 00 10 93 00 00 | "....Q...'.....|
0003: 20 22 12 09 21 51 08 05 00 00 96 00 11 20 00 00 | "..!Q....... ..|
0004: 20 22 12 09 17 14 32 01 00 01 00 00 12 16 00 00 | "....2.........|
0005: 20 22 12 08 18 35 55 05 00 00 35 00 11 16 00 00 | "...5U...5.....|
0006: 20 22 12 07 17 26 18 05 00 00 74 00 11 51 00 00 | "...&....t..Q..|
0007: 20 22 12 06 17 51 06 05 00 03 21 00 12 25 00 00 | "...Q....!..%..|
0008: 20 22 12 06 14 42 30 01 00 10 00 00 15 46 00 00 | "...B0......F..|
0009: 20 22 12 05 20 15 35 05 00 03 21 00 05 46 00 00 | ".. .5...!..F..|
Purse Service 323: direct with key & decrement with key & read w/o key (0x50D0 0x50D4 0x50D7)
0000: de 03 00 00 00 00 00 00 00 00 00 00 00 00 03 70 |...............p|

данные извлекаются этой программой.
import nfc

def on_connect(tag: nfc.tag.Tag) -> bool:
print("connected")
print("\n".join(tag.dump()))

return True

def on_release(tag: nfc.tag.Tag) -> None:
print("released")

with nfc.ContactlessFrontend("usb") as clf:
while True:
clf.connect(rdwr={"on-connect": on_connect, "on-release": on_release})


Подробнее здесь: https://stackoverflow.com/questions/791 ... block-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»