Discussion:
Script Python ne fonctionne pas
(trop ancien pour répondre)
Pebrok
2022-10-04 18:18:27 UTC
Permalink
Bonjour, j'ai récupéré un script Python pour convertir un fichier .json e
fichier .nfc, mais quand je le passe dans IDLE et que k'essaie de le fair
tourner, rien ne se passe.
J'ai mis tous les fichiers (script .py et fichier .json) dans le même dossier.
C:UsersCJ78714Python>

J'essaie de vous joindre le script ci-dessous:
#!/usr/local/bin/python3

"""
Reads: proxmark3 MiFare json dump files
Outputs: Flipper NFC compatable format

nfc_prox2flip.py Gate25.json > Gate25.nfc

Written By: Peter Shipley github.com/evilpete

From pkg https://github.com/evilpete/flipper_toolbox
"""

import sys
import json


# Nfc device type can be UID, Mifare Ultralight, Mifare Classic, Bank card
# ATQA SAK
CARD_TYPE = {
("0400", "08"): "Mifare Classic", # 1k
("0200", "18"): "Mifare Classic", # 1k
("0400", "09"): "Mifare Mini",
("4400", "00"): "Mifare Ultralight", # "NTAG213" "NTAG216"
("4400", "20"): "Bank card",
("4403", "20"): "Mifare DESFire",
}


def convert_dat(in_dat):
"""
Take a parsed proxmark json dump arg
returns list in Flipper NFC compatable format
"""

# output list
out_dat = []

x = in_dat["Card"]

# Guess card type by looking at ATQA/SAK combo
j = (x['ATQA'], x['SAK'])

t = CARD_TYPE.get(j, x['UID'])

# this is a hack to generate Key maps
# should add code to actually parse "SectorKeys"
y = len(in_dat["SectorKeys"])
s = int("1" * y, 2)
ska = skb = f"{s:016X}"

out_dat.append(f"""
Filetype: Flipper NFC device
Version: 2
# generated with flipper_toolbox
# Nfc device type can be UID, Mifare Ultralight, Mifare Classic, Bank card
Device type: {t}
# UID, ATQA and SAK are common for all formats
UID: {x['UID'][0:2]} {x['UID'][2:4]} {x['UID'][4:6]} {x['UID'][6:8]}
ATQA: {x['ATQA'][0:2]} {x['ATQA'][2:4]}
SAK: {x['SAK']}
# Mifare Classic specific data
Mifare Classic type: 1K
Data format version: 1
# Key map is the bit mask indicating valid key in each sector
Key A map: {ska}
Key B map: {skb}
# Mifare Classic blocks""")

# Loop through blocks spliting data into 1 byte pieces
for k, v in in_dat["blocks"].items():
b = " ".join([v[i:i + 2] for i in range(0, len(v), 2)])
out_dat.append(f"Block {k}: {b}")

return out_dat


if __name__ == '__main__':

in_filename = "Gate25.json"

if len(sys.argv) > 2:
in_filename = int(sys.argv[2])

with open(in_filename, encoding="utf-8") as fd:
input_dat = json.load(fd)

output_list = convert_dat(input_dat)

print("n".join(output_list))

sys.exit()
Olivier Miakinen
2022-10-04 21:43:41 UTC
Permalink
Bonjour,
Bonjour, j'ai récupéré un script Python pour convertir un fichier .json en
fichier .nfc, mais quand je le passe dans IDLE et que k'essaie de le faire
tourner, rien ne se passe.
J'ai mis tous les fichiers (script .py et fichier .json) dans le même dossier.
C:UsersCJ78714Python>
[...]
in_filename = "Gate25.json"
in_filename = int(sys.argv[2])
Je ne connais pas IDLE, mais est-ce que tu peux lui dire que le répertoire
courant doit être C:UsersCJ78714Python> lors du lancement ?

Sinon, est-ce que tu as essayé de passer comme paramètre le chemin complet du
fichier, comme C:/UsersCJ78714Python>/Gate25.json au lieu de Gate25.json ?
--
Olivier Miakinen
ast
2022-10-05 07:48:01 UTC
Permalink
Post by Pebrok
Bonjour,
Bonjour, j'ai récupéré un script Python pour convertir un fichier .json en
fichier .nfc, mais quand je le passe dans IDLE et que k'essaie de le faire
tourner, rien ne se passe.
J'ai mis tous les fichiers (script .py et fichier .json) dans le même dossier.
C:UsersCJ78714Python>
[...]
in_filename = "Gate25.json"
in_filename = int(sys.argv[2])
Je ne connais pas IDLE, mais est-ce que tu peux lui dire que le répertoire
courant doit être C:UsersCJ78714Python> lors du lancement ?
Sinon, est-ce que tu as essayé de passer comme paramètre le chemin complet du
fichier, comme C:/UsersCJ78714Python>/Gate25.json au lieu de Gate25.json ?
import os

# pour voir où l'on est
os.getcwd()

# pour aller dans un autre répertoire, ici le bureau de windows
os.chdir("C:\\Users\name\\Desktop")
Olivier Miakinen
2022-10-05 09:27:54 UTC
Permalink
Post by ast
Post by Olivier Miakinen
Je ne connais pas IDLE, mais est-ce que tu peux lui dire que le répertoire
courant doit être C:UsersCJ78714Python> lors du lancement ?
Sinon, est-ce que tu as essayé de passer comme paramètre le chemin complet du
fichier, comme C:/UsersCJ78714Python>/Gate25.json au lieu de Gate25.json ?
import os
# pour voir où l'on est
os.getcwd()
# pour aller dans un autre répertoire, ici le bureau de windows
os.chdir("C:\\Users\name\\Desktop")
Oui. Par ailleurs j'ai reçu par courriel privé (?) une réponse de quelqu'un
dont l'adresse de courriel est visiblement invalide mais non *suffixée* par
le nom réservé .invalid *sans e* (ce qui n'est pas bien) :

<début de citation>
nom répertoire 'curieux" ?
caractères spéciaux interdits : <, >, :, “, /, \, |, ?, *.
@+
<fin de citation>

Ma réponse est que j'ai recopié tel quel le nom du répertoire donné par
Pebrok. En réalité, je suppose qu'il doit s'agir plutôt de :
C:\Users\CJ78714\Python
... où les \ ont été bouffés par la passerelle web-news, et le > en trop
devait être celui de l'invite de commande.

Cordialement,
--
Olivier Miakinen
Loading...