From cdd8062d52cf8fee25a48abffcb6dc62ea6dc7a6 Mon Sep 17 00:00:00 2001 From: FalsePhilosopher <108245223+FalsePhilosopher@users.noreply.github.com> Date: Mon, 27 Jun 2022 01:31:32 -0600 Subject: [PATCH] Add files via upload --- NFC/Generate URL/gen_url_nfc.py | 127 ++++++++++++++++++++++ NFC/Generate URL/gen_url_nfc_requirements | 2 + 2 files changed, 129 insertions(+) create mode 100644 NFC/Generate URL/gen_url_nfc.py create mode 100644 NFC/Generate URL/gen_url_nfc_requirements diff --git a/NFC/Generate URL/gen_url_nfc.py b/NFC/Generate URL/gen_url_nfc.py new file mode 100644 index 00000000..b50cb3cd --- /dev/null +++ b/NFC/Generate URL/gen_url_nfc.py @@ -0,0 +1,127 @@ +#!/usr/local/bin/python3 +""" +Generates NFC with URL address data and outputs Flipper NFC "save" file +this is a 5 min hack, No Guarantees + + python3 gen_url_nfc.py https://youtu.be/dQw4w9WgXcQ "Rick Roll". > rickroll.nfc + + requires ndeflib +""" + +import sys +import ndef + +verbose = 1 + +nfc_header = """Filetype: Flipper NFC device +Version: 2 +# Nfc device type can be UID, Mifare Ultralight, Mifare Classic, Bank card +Device type: NTAG215 +# UID, ATQA and SAK are common for all formats +UID: 04 10 56 01 74 48 03 +ATQA: 44 00 +SAK: 00 +# Mifare Ultralight specific data +Signature: A5 80 A4 CC A0 C3 A1 F6 8B BE 6F EE 83 A6 B9 EE 36 F8 FB C8 14 5A 23 AA 29 DB 78 56 07 B9 6B 92 +Mifare version: 00 04 04 02 01 00 11 03 +Counter 0: 0 +Tearing 0: 00 +Counter 1: 0 +Tearing 1: 00 +Counter 2: 0 +Tearing 2: 00 +Pages total: 135 +""" + +data_static = [ + 0x04, 0x10, 0x56, 0xCA, # 01 serial number + 0x01, 0x74, 0x48, 0x03, # 02 serial number + 0x3E, 0x48, 0x00, 0x00, # 03 serial number, internal, lock bytes, lock bytes + 0xE1, 0x10, 0x3E, 0x00, # 04 Capability Container +] + +conf_pages = [ + 0x00, 0x00, 0x00, 0xBD, # 130 + 0x04, 0x00, 0x00, 0xFF, # 131 + 0x00, 0x05, 0x00, 0x00, # 132 + 0x00, 0x00, 0x00, 0x00, # 133 + 0x00, 0x00, 0x00, 0x00, # 134 +] + + +def print_nfc_sub(t_data, file=sys.stdout): + + print(nfc_header, end='', file=file) + + p = 0 + for x in range(0, 540, 4): + print(f"Page {p}: {t_data[x]:02X} {t_data[x +1]:02X} " + f"{t_data[x +2]:02X} {t_data[x +3]:02X}", file=file) + p = p + 1 + + +def gen_nfc_sub(tag_data): + + tag_message = [] + data_list = [] + + for x in tag_data: + if x[0] == 'txt': + tag_message.append( ndef.TextRecord(x[1], "en") ) + elif x[0] == 'url': + tag_message.append(ndef.UriRecord(x[1])) + + if verbose: + print(x, file=sys.stderr) + print(tag_message[-1:], file=sys.stderr) + + buf = b"".join((ndef.message_encoder(tag_message))) + + m_len = len(buf) + + if verbose: + print("buf", m_len, hex(m_len), buf, file=sys.stderr) + + data_list.extend(data_static) + data_list.append(3) # Message Flags + data_list.append(m_len) # Type Length + data_list.extend(list(buf)) + + data_list.append(0xFE) # end of Data + + data_len = len(data_list) + + if verbose: + print("data_list", data_len, data_list, file=sys.stderr) + + x = 520 - data_len + data_list.extend([0] * x) + data_list.extend(conf_pages) + + return data_list + + +# url_str = "https://youtu.be/dQw4w9WgXcQ" +# title_str = "Rick Roll" + +if __name__ == '__main__': + + arg_data = [] + + for a in sys.argv[1:]: + if a.startswith("http"): + arg_data.append( ("url", a) ) + else: + arg_data.append( ("txt", a) ) + + if not arg_data: + print("requires at least one argument\n" + "Please provide URL and optional Title\n\n" + f"{sys.argv[0]} : https://some.url 'Title'") + sys.exit() + + nfc_data = gen_nfc_sub(arg_data) + + print_nfc_sub(nfc_data) + + sys.exit() \ No newline at end of file diff --git a/NFC/Generate URL/gen_url_nfc_requirements b/NFC/Generate URL/gen_url_nfc_requirements new file mode 100644 index 00000000..5b4fba95 --- /dev/null +++ b/NFC/Generate URL/gen_url_nfc_requirements @@ -0,0 +1,2 @@ +requires ndeflib +pip install ndeflib