Lateo.net - Flux RSS en pagaille (pour en ajouter : @ moi)

🔒
❌ À propos de FreshRSS
Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierInformatique & geek

RFID – Le clone parfait

Par Alex

Quand j’ai écrit, il y a 2 ans, l’article qui expliquait comment dupliquer le contenu d’une puce RFID, je n’imaginais pas qu’il susciterait un tel engouement. Pourtant, encore aujourd’hui c’est un des articles les plus consultés du site et c’est également un de ceux pour lequel je reçois de plus en plus de questions. Aussi, je me suis dit qu’il était temps d’écrire cette seconde partie que tant attendent : comment réaliser un clone parfait et complet d’une puce rfid.

On travaille toujours sur la famille de tag Mifare

Même s’il en existe différentes familles, les puces (ou tags) les plus répandues sont de type « Mifare Classic ». Cela tombe bien, c’est justement le type de tag sur lesquels nous allons travailler aujourd’hui. Personnellement je les ai rencontrés sur tout un tas d’applications différentes : badge de porte d’immeuble, carte d’accès à un parking, carte d’accès à une chambre d’hôtel, porte monnaie électronique pour la machine à café, ou encore carte de consommation de boissons dans certains bars et boîtes de nuit.

Pourquoi écrire un nouvel article sur la copie de tag RFID ?

Si vous êtes familier du 1er article que j’ai écrit sur le sujet, vous pouvez vous demander ce que vous allez apprendre de plus ici, voici les 2 raisons principales qui vous motiveront :

  • Si dans le 1er article on se contentait de copier les données d’un tag RFID à l’autre, aujourd’hui on va voir comment modifier l’identifiant du TAG (le fameux UID ou Unique ID) qui est gravé en usine, non modifiable et inviolable… enfin presque
  • Dans le premier article, il fallait installer linux sur une machine, avant d’installer ensuite les outils de manipulation des tags RFID. Une manoeuvre un peu compliquée pour les plus novices. Aujourd’hui je vous montre comment créer en 3 clics une clé USB sur laquelle vous pourrez démarrer votre ordinateur. Vous arriverez ainsi sur un bureau temporaire contenant tous les outils qui vous seront nécessaires, sans que cela n’altère votre machine.

C’est quoi cette histoire d’UID ?

Les tags RFID sont généralement composés de 2 zones : une zone de stockage de données, généralement ré-inscriptible, et une zone de stockage de l’identifiant du tag. Le fameux UID. L’UID est un identifiant unique au monde (il n’existe donc pas 2 tags avec le même UID). Il est gravé en usine au moment de la fabrication du tag et se trouve sur une partie du tag qui n’est pas ré-inscriptible. On ne peut donc pas le modifier.

A titre d’information, les tags Mifare Classic 1K (les plus répandus) contiennent 64 blocs de données. L’UID est stockée sur le premier bloc (souvent appelé dans la litterature « block 0 ») et les 63 suivants sont dédiés au stockage de données.

Dans ce cas comment dupliquer un UID ?

Si on ne peut pas modifier l’UID stocké sur ce fameux bloc 0, comment avoir 2 cartes avec le même identifiant ? C’est là que nos amis les chinois arrivent à la rescousse :)

Depuis quelques années, on a vu arriver sur le marché des tags mifare avec une petite particularité : légèrement modifiés, ils possèdent un bloc 0 réinscriptible. On peut donc modifier l’UID sur ces tags (et uniquement ceux-là !). La première fois que j’ai réussi à mettre la main sur un tag de ce type, c’était en 2014, et j’estimais avoir fait une bonne affaire en dépensant environ 20 dollars pour ce tag. En 2017, les prix ont été divisés par 10 et mettent donc ce type de tag à la portée de tous les curieux !

Où trouver ces tags chinois avec UID modifiable ?

Évidemment, ces tags sont moins évidents à dénicher mais pas de panique, j’ai tout prévu :) Vous pouvez les commander sur la Boutique de l’Atelier du Geek sous forme de badges, sous forme de cartes, sous forme de bracelets ou encore sous forme de stickers, à chaque fois par lot de 5. Les commandes sont en général dans votre boîte aux lettres en moins de 3 jours !

Un mot sur sur la norme VIGIK

VIGIK : ce nom peut sembler barbare, mais c’est la norme créée par La Poste pour standardiser l’accès aux immeubles. On lit donc très souvent le nom de cette norme sur les interphones. C’est donc VIGIK qui permet à votre facteur, mais aussi aux pompiers, policiers et autres services d’urgence d’ouvrir n’importe quelle porte d’immeuble avec un badge unique. Si je vous en parle aujourd’hui c’est que je reçois beaucoup de questions à ce sujet, car nombreuses sont les personnes qui se rêvent la possession d’un tel badge (et oui, ces badges ne sont ni plus ni moins que des tags RFID Mifare).

Malheureusement, ce n’est pas si simple. S’il est tout à fait possible de dupliquer le badge de votre ami le facteur, la norme est faite de telle sorte que pour que le badge reste valide il faut qu’il soit « rechargé » toutes les 48h. En d’autre terme, si par je ne sais quel hasard, vous arriviez à copier un de ces passes VIGIK, il ne fonctionnerait que pendant quelques heures avant de devenir complètement inutile.

Est-ce que ça veut dire que je ne peux pas dupliquer mon badge d’accès d’immeuble si je lis « VIGIK » sur l’interphone ?

Puisque ça ne fonctionne pas pour le badge du facteur, on pourrait se dire que ça ne fonctionnera pas davantage pour les résidents… Mais en fait si ça fonctionne. Les badges résidents n’ont pas besoin d’être rechargés comme ceux des facteurs, par conséquent si vous en dupliquez un cela fonctionnera et vous donnera les mêmes accès que le badge original.

Motivés à tenter l’expérience ? Il est temps de passer aux choses sérieuses :)

Cloner un tag mifare

Matériel nécessaire

Etape 1 : Création de la clé USB de démarrage

Pour ne pas avoir à installer de Linux sur le disque dur, il faut créer une clé USB de démarrage. Le principe est simple : lors de son lancement, le PC démarrera le système d’exploitation présent sur la clé USB comme s’il s’agissait de son propre disque dur. Cela nous permettra d’obtenir un système linux complet pour notre session de travail sur les tags RFID. A l’extinction de l’ordinateur, il suffira de retirer cette clé USB pour que la machine retrouve son fonctionnement normal.

J’ai choisi de travailler avec la distribution linux « Kali ». Cette distribution, orientée sécurité, contient de nombreux outils dont les fameux « NFC Tools » qui nous seront utiles aujourd’hui. Il faut commencer par télécharger kali (version 64 bits live) ici https://www.kali.org/downloads/. Ce tuto a été réalisé avec la version 2017.1 qui est sortie voilà quelques jours au moment où j’écris ces lignes.

Edit du 29/03/2020 : Ce tuto marche parfaitement jusqu’à la version de Kali 2019.3. Si vous souhaitez utiliser une version plus récente il faudra entrer quelques commandes supplémentaires que je vous ai préparé et surtout bénéficier d’une connexion internet.

Une fois le fichier ISO récupéré, il va falloir le transférer sur la clé. Pour cela j’utilise comme à mon habitude le logiciel RUFUS qui est très simple. Une fois RUFUS téléchargé et installé, il suffit de sélectionner la clé USB sur laquelle installer Kali, et de lui indiquer l’endroit où votre fichier ISO de kali est situé. Chez moi cela donne quelque chose comme ça :

L’écran de RUFUS, prêt à créer la clé USB de démarrage avec Kali.

Cliquez ensuite sur le bouton Démarrer pour lancer l’opération.

Notez que si vous souhaitez gagner du temps, vous pouvez également trouver des clés USB pré-configurées avec Kali sur la Boutique de l’Atelier du Geek.

Etape 2 : Lancement du système et préparation de l’environnement

Une fois votre clé préparée, éteignez l’ordinateur que vous souhaitez utiliser, branchez la clé et démarrez sur la clé USB. Attention pour sélectionner un périphérique de démarrage, sur certains ordinateur il faut appuyer sur une touche particulière. Sur le mien par exemple, il s’agit de la touche Echap, mais j’ai déjà croisé des ordinateurs où il fallait utiliser la touche F2, F8, F10, F11 ou Suppr par exemple…

Après quelques instants nécessaires au chargement du système, vous devriez atterrir sur un bureau vierge. On y est presque.

Le bureau de Kali au démarrage

Par défaut, le clavier est configuré en QWERTY, ce qui n’est pas très pratique si votre ordinateur est équipé comme le mien d’un clavier AZERTY. Pour rétablir cela, il suffit de lancer le terminal via l’icône suivante :

L’icône du terminal se trouve sur la barre de gauche.

Une fenêtre d’invite de commande va s’ouvrir, et il faudra saisir à l’intérieur la commande suivante : setxkbmap fr (ce qui nécessitera sur votre clavier d’appuyer sur les touches setxb,qp fr). Cette fenêtre de terminal va nous servir dans toutes les manipulations suivantes, vous pouvez donc la garder ouverte.

La commande doit être tapée dans le terminal, ce sera la même chose pour toutes les autres commandes de ce tuto.

Si vous utilisez une version récente de Kali Linux

Si  vous souhaitez utiliser une version de Kali 2020 ou supérieure, vous devez vous connecter à internet à ce moment et exécuter quelques commandes supplémentaires. En effet, depuis la version 2020 de kali, vous n’êtes plus identifié comme un super-utilisateur et surtout, les NFC Tools utilisés dans cet article ne sont plus présents par défaut, il va donc falloir les réinstaller ! Pour remédier à tout cela, entrez les commandes suivantes. 

kali@kali:~$ sudo su
root@kali:/home/kali# apt-get update
root@kali:/home/kali# apt-get upgrade -y
root@kali:/home/kali# apt-get install libnfc-bin mfoc -y

Configuration du système

Maintenant que le clavier est en français, il va falloir configurer le système pour que les NFC Tools puissent interagir correctement avec votre lecteur RFID. Pour ce faire, commencez par branchez votre lecteur RFID (si ça n’est pas déjà fait). Kali va alors charger automatiquement en arrière plan des modules qui vont perturber les NFC Tools. Pour décharger ces modules, toujours dans votre fenêtre du terminal, entrez les commandes suivantes.

root@kali:~# modprobe -r pn533_usb
root@kali:~# modprobe -r pn533
On dsactive avec ces 2 commandes les modules standard de linux qui perturberaient les NFC Tools

L’environnement est désormais fin prêt pour notre petite expérience, on va pouvoir entrer dans le vif du sujet.

Etape 3 : Vérifier le bon fonctionnement du lecteur

Pour être sûr que le lecteur fonctionne correctement avec les NFC Tools, il suffit de lancer la commande suivante et de passer un tag RFID devant le lecteur.

root@kali:~# nfc-list

Si tout est bien configuré, le lecteur devrait vous afficher quelques informations sur le tag, dont le fameux UID, comme dans la capture ci-dessous. Ici mon UID, ce fameux numéro unique est le ea b5 8f 4b. Si vous essayez maintenant avec votre puce RFID chinoise, vous devriez obtenir un numéro d’UID différent, ce qui est tout à fait normal.

L’UID est visible avec la commande nfc-list, sur la ligne « UID ». Ici la puce à copier à un UID avec la valeur suivante : eab58f4b.

Si jamais vous obtenez un message d’erreur ou si rien ne s’affiche plusieurs possibilités :
Votre tag n’est pas un tag RFID compatible avec votre lecteur
Il y a eu une erreur lors de l’étape 2, recommencez donc à cette étape en vérifiant méticuleusement vos commandes.

Etape 4 : Extraire les clés de chiffrement de la puce RFID chinoise dans un fichier

Cette étape au nom un peu barbare ne devrait vous prendre que quelques secondes. Son principe ? Pour pouvoir écrire sur une puce RFID, il faut en posséder les clés de chiffrement. Une sorte de mot de passe qui permet d’encoder et de décoder les informations de la puce. Ces clés de chiffrements vont être stockées avec le contenu de la clé, dans un fichier. Ce fichier nous servira lors de l’étape finale pour copier les données de la puce originale sur la puce chinoise.

Pour lancer l’extraction des clés de chiffrement, placez votre puce sur le lecteur et saisissez dans un terminal la commande suivante.

root@kali:~# mfoc -P 500 -O carte-vierge.dmp

Les clés de chiffrement seront stockées dans le fichier « carte-vierge.dmp ».

La commande mfoc permet de copier le contenu d’une puce dans un fichier. Cette commande va notamment se charger de trouver les différentes clés de chiffrement qui empêchent normalement de lire le contenu de la puce RFID.

Etape 5 : Copiez le contenu de la puce RFID d’origine dans un fichier

Maintenant que les clés de chiffrement de la puce chinoise sont extraites, il va falloir faire de même avec la puce originale. Cette opération va copier les clés de chiffrement et le contenu de la puce d’origine dans un fichier. Ce fichier contiendra toutes les données de la puce, ainsi que son UID. C’est en quelques sorte une « sauvegarde » de votre puce RFID. N’hésitez pas à la conserver en lieu sûr, ainsi si vous perdez votre puce RFID vous pourrez en créer de nouvelles à l’identique à partir de ce fichier de sauvegarde.

Pour ce faire, placez la puce originale sur votre lecteur, et entrez la commande suivante :

root@kali:~# mfoc -P 500 -O carte-originale.dmp

Vous l’aurez surement compris, cette commande va créer un fichier « carte-originale.dmp » c’est le fameux fichier de sauvegarde de votre puce originale.

A nouveau on a recourt à la commande mfoc, toujours pour les mêmes raisons que dans l’étape précédente. Avec la puce originale c’est généralement plus long car les clés de chiffrements sont rarement celles d’origine, et la commande mfoc doit donc exploiter une faille des puces mifare pour réussir à obtenir les clés de chiffrement manquantes.

Etape 6 : Ecrire le contenu de la puce originale sur la puce chinoise

On arrive au bout ! Vous n’êtes plus qu’à une dernière commande de la victoire ! Maintenant que l’on possède une copie du contenu de la puce originale, ainsi que les clés de chiffrement de la puce chinoise, nous allons pouvoir transférer le contenu et l’UID de la puce originale sur la puce chinoise.

Pour se faire, et toujours dans le terminal, saisissez la commande suivante.

root@kali:~# nfc-mfclassic W a carte-originale.dmp carte-vierge.dmp
On touche au but avec la dernière commande du tuto. On va ici demander à la commande mfc-classic d’écrire le cntenu de la puce originale sur la puce chinoise vierge, UIS compris.

L’opération devrait prendre 1 grosse seconde avant d’aboutir sur un message de succès. Si vous êtes attentifs, vous remarquerez que la seule différence par rapport au précédent article est le fait que le « W » est écrit en capital. ça n’est pas une erreur, cela demande au lecteur de transférer le contenu de la puce ainsi que le bloc 0 qui contient l’UID. En cas de succès, un message devrait vous confirmer l’écriture de 64 secteurs sur 64 (dans le précédent article, on n’en copiait que 63 car il manquait le fameux bloc 0).

Vous pouvez vérifier le succès de l’opération en répétant l’étape 3 avec votre puce chinoise. Si tout a correctement fonctionné, la commande nfc-list appliquée à votre puce chinoise vous affichera un UID identique à celui de votre puce originale.

Et voilà, vous venez de contourner l’incontournable :)

En conclusion

Avec quelques dizaine d’euros de matériel et une poignée de minutes, vous aurez pu dupliquer à la perfection une puce RFID officielle. Aucun lecteur ne pourra faire la différence entre la copie et l’originale. Vous comprenez désormais que la sécurité des systèmes basés sur ce type de puce est toute relative. Comme d’habitude, vous êtes seuls responsables de l’usage que vous faites de ces connaissances. Si vous avez des questions, ou souhaitez tout simplement partager vos expériences sur le sujet, n’hésitez pas à vous exprimer dans les commentaires ! Enfin, si vous cherchez à vous équiper tout en soutenant le blog, n’hésitez pas à faire un tour dans la boutique de l’Atelier du Geek pour y trouver votre bonheur !

Dupliquer son badge d’immeuble avec un smartphone c’est facile

Par Alex

S’il y a quelques années, très peu de personnes avaient entendu parler de technologies comme le NFC et le RFID, il en est désormais tout à fait autrement ! La plupart des nouveaux smartphones milieu et haut de gamme intègrent désormais des puces NFC ce qui rend possible la lecture et l’écriture de badges et cartes sans contact, à commencer par la majorité des badges d’immeuble ! Beaucoup d’entre vous me contactent en me posant la même question : est-il possible de faire soi-même un double de son badge d’immeuble à l’aide d’un simple smartphone ? Et bien la réponse est oui, mais pas n’importe comment !

Edit du 27/03/2020 : je profite du confinement pour mettre à jour cet article. Au menu, quelques infos supplémentaires et un mot sur les systèmes anti-copies qui peuvent vous empêcher de mener à bien cette opération.

Une manipulation réservée à certains smartphones Android

Bien que les nouveaux iPhones aient une puce qui matériellement est capable de lire et écrire sur des badges à 13,56Mhz, je n’ai pas trouvé d’applications permettant de réaliser cette manœuvre. Sous Android par contre il est plus facile de trouver son bonheur : les smartphones équipés d’une puce NFC sont nombreux et il existe plusieurs applications pour cet usage, dont une gratuite assez répandue : Mifare Classic Tool, c’est d’elle que nous parlerons aujourd’hui !

Seuls les badges fonctionnant à 13,56Mhz sont copiables avec un smartphone

En effet, il existe plusieurs types de badges d’ouverture sans contact. L’immense majorité est en 13,56Mhz, mais on trouve aussi quelques badges qui fonctionnent à 125Khz. Les puces équipant les téléphones ne permettant que des échanges sur la bande de fréquence de 13,56Mhz, seuls les badges correspondant pourront être lus… et donc copiés. Si votre portier d’immeuble arbore un petit logo Vigik, il y a de grande chance que votre badge soit à la bonne fréquence !

Pourquoi on ne peut pas utiliser des badges avec UID modifiables « classiques »

Si vous suivez ce blog depuis quelques temps, vous avez peut-être déjà entendu parler de badges RFID qui ont une particularité, celle d’avoir leur identifiant unique (UID) modifiable. Cette particularité est nécessaire pour pouvoir réaliser un « clone parfait » de la puce RFID, en dupliquant son contenu mais aussi son identifiant qui est censé être unique au monde. J’ai utilisé de telles puces pendant des années. Ces puces de première génération fonctionnent à merveille avec un lecteur NFC externe comme le ACR122U, mais on ne peut pas modifier leur identifiant unique depuis un smartphone. En effet, la modification de l’UID nécessite des instructions particulières qui ne sont nativement pas possible sous Android. Je pensais donc que la réalisation d’un « clone parfait » d’un badge d’immeuble n’était possible que via un ordinateur. J’avais tort !

C’était sans compter sur les efforts de sociétés asiatiques qui ont donc créé un nouveau type de badges avec UID modifiables (on parle de badges de deuxième génération). Ces badges ont les mêmes caractéristiques que ceux de première génération, mais permettent également de modifier l’UID via des instructions standards, ce qui les rend pleinement utilisables avec un smartphone Android ! Ces badges sont nettement plus difficiles à trouver, mais sachez que j’en ai quelques uns en stock sur la boutique !

De quoi avez-vous besoin pour dupliquer votre badge d’immeuble ?

C’est pour moi la meilleure partie 🙂 En fait si vous avez déjà un smartphone sous Android compatible NFC, vous n’avez besoin de rien d’autre ! Evidemment il vous faudra des badges vierges adéquats, mais vous pouvez déjà diagnostiquer si votre badge est au bon format sans dépenser le moindre euro !

Donc si on récapitule, pour mener l’opération de bout en bout, il vous faudra :

Comment copier votre badge d’immeuble avec votre smartphone pas à pas

Etape 1 : Créer une sauvegarde (dump) de votre badge d’origine

Le but de cette étape est de transférer le contenu du badge vers un fichier de sauvegarde, un « dump » en anglais. Cela permettra de créer ensuite autant de copies que vous le souhaitez ! Cette étape est cruciale et peut déjà vous permettre de savoir si votre badge est copiable facilement.

Vérifiez que le NFC est activé sur votre appareil (Paramètres > Réseaux > NFC)

Ouvrez l’app Mifare Classic Tool, vous arrivez face à l’écran d’accueil que voici :

L’écran d’accueil de l’application MCT. Ici c’est la partie lecture (Read Tag) qui nous intéresse

Cliquer sur READ TAG, ce qui va vous afficher l’écran de sélection des clés à utiliser :


L’écran de sélection des clés. Le plus sûr est de sélectionner les 2 fichiers de clés.

Cochez les cases extended-std.keys et std.keys

Coller le badge sur l’arrière, un message va apparaître brièvement sur le bas de l’écran avec l’identifiant (UID) du tag détecté

Cliquer sur START MAPPING AND READ TAG. L’application va alors tenter une à une les différentes clés disponibles pour décoder chacun des secteurs qui composent le badge.

Il y a en tout 16 secteurs, sur la majorité des badges d’immeuble (ils renferment des puces de la famille des Mifare Classic 1K la plupart du temps). Il faut compter de quelques secondes à une dizaine de minutes pour que l’application MCT décode tous les secteurs et parvienne à un extraire les données.

Si vous voyez cet écran, c’est bon signe, c’est que l’application MCT a pu décoder le contenu de votre badge ! Félicitations :)

Si tous les secteurs sont lisibles, bravo, vous avez fait le plus dur. Je vous conseille alors d’enregistrer le dump en cliquant sur l’icône en forme de disquette en haut de l’écran, et de choisir un nom parlant. Dans notre exemple, je l’ai appelé badge-original. Ce fichier est la seule chose dont vous aurez besoin pour créer autant de copies de votre badge que nécessaire. Aussi je vous conseille de le stocker en lieu sûr, cela pourra vous être utile en cas de perte de votre badge d’origine par exemple.

En cas d’échec

Si jamais vous avez un écran où plusieurs secteurs sont affichés avec des tirets ou des X rouges, c’est que l’application ne possède pas les clés pour les lire.  Tout n’est pas perdu mais vous ne pourrez probablement pas aller plus loin avec votre smartphone. Il faudra dans ce cas passer par une méthode un peu plus évoluée où vous aurez besoin d’utilitaires comme mfoc ou mfcuk pour trouver les clés manquantes. N’hésitez pas à relire cet article qui vous mettra sur la piste :)

Etape 2 : Transférer le contenu de votre sauvegarde vers un badge vierge

Comme annoncé en introduction, il va vous falloir pour cette étape des badges un peu spéciaux. Il s’agit de badges RFID contenant également 16 secteurs comme notre badge d’origine, mais avec une petite particularité : le secteur 0, habituellement accessible uniquement en lecture, doit également être accessible en écriture à l’aide d’instructions que votre smartphone peut gérer. Je reconnais qu’ils peuvent être un peu compliqués à dénicher, mais vous  trouverez ces badges compatibles smartphone sur la boutique, testés et approuvés !

Toujours depuis l’application MCT, il va falloir se rendre dans la section WRITE TAG disponible sur l’écran d’accueil de l’application Mifare Classic Tool en haut à droite :

L’écran d’accueil de l’application MCT. maintenant c’est la partie écriture (Write Tag) dont on va avoir besoin

Quatre possibilités s’offrent alors à vous, mais c’est la deuxième qui vous intéresse : Write Dump (Clone)

L’écran permettant de transférer le contenu d’un fichier vers un badge vierge

A partir de ce moment, il va falloir scrupuleusement suivre les instructions :

  • Commencer par cocher la case Show Options ce qui va rendre accessible deux nouvelles case à cocher : Use these Access Conditions for all sectors et Advanced: Enable writing to the manufacturer block
  • Cocher également ces deux nouvelles cases. La première case permettra de réécrire sur le badge plus tard (au risque d’avoir quelques différences avec le badge d’origine). La seconde case est capitale : elle va autoriser l’application à écrire le fameux secteur 0 (aussi appelé « Block 0 » ou « Manufacturer Block« ). Notez que si vous souhaitez un badge 100% identique au risque de ne pas pouvoir le réécrire, vous pouvez vous contenter de cocher uniquement la seconde case.
  • Cliquer ensuite sur le bouton SELECT DUMP ce qui va afficher la liste de toutes les sauvegardes de badges disponibles sur votre téléphone.
Liste des dumps disponibles sur le téléphone
  • Sélectionner badge-original si vous l’avez bien nommé comme moi.
  • Un nouvel écran apparaît vous demandant de sélectionner les secteurs que vous voulez écraser en utilisant ceux du dump. Tout est coché par défaut… et c’est bien comme ça.
Ecran de sélection des secteurs à transférer sur le badge vierge
  • Placer à ce moment le badge vierge contre l’arrière de votre smartphone. Un petit message va apparaître en surimpression avec l’UID de votre badge vierge.
  • Cliquer sur OK, ce qui va lancer le processus d’écriture. L’opération ne prend que quelques secondes.

L’application va ensuite revenir à son écran de démarrage. Il m’arrive parfois d’avoir un message d’erreur qui s’affiche, sans que cela ne pose réellement de problème sur les données que contiennent le badge. Si vous rencontrez une erreur, re-faite tout simplement la manipulation, cela suffit la plupart du temps.

Félicitations, à ce moment là vous être normalement en possession d’une copie parfaite de votre badge d’immeuble ! Notez que si vous souhaitez faire d’autres exemplaires du même badge, il suffit de répéter l’étape 2 autant de fois que nécessaire. Vous comprenez donc que conserver le dump de votre badge d’origine est vital pour ne jamais être bloqué à l’avenir :)

Comment vérifier que la copie est parfaite ?

Evidemment vous allez me dire, le plus simple est de l’essayer ! Ce n’est pas faux mais ce n’est pas toujours possible ! Sachez que MCT intègre d’autres outils bien pratiques quand on travaille sur les puces RFID. Par exemple, si vous faites désormais une sauvegarde de votre clone de badge (en déroulant l’étape 1 avec votre clone), vous obtiendrez un nouveau dump (ici je l’ai appelé badge-copie). Et bien dans la section Tools de l’application Mifare Classic Tool, vous pourrez trouver un utilitaire appelé Diff Tool qui vous permettra de comparer les deux sauvegardes/dumps comme vous le voyez ci-dessous. Secteur par secteur, l’application vous montre si la copie et l’original sont identiques.

Voici la liste des outils disponibles dans l’application MCT pour manipuler les dumps. L’outil « Diff Tool » en 4ème position est très utile pour comparer 2 dumps.
Le résultat de la comparaison entre 2 dumps : secteur par secteur, ligne par ligne, l’outil nous indique les correspondances et les différences (s’il y en a). Ici on est bon, tout est identique !

Un mot sur les systèmes « anti-copie »

Parfois, certains d’entre-vous me rapportent que la copie ne fonctionne pas, voire pire, que suite à son utilisation votre badge d’origine a été désactivé. Cela est généralement dû à la présence d’un système anti-copie sur le badge. Je ne connais que 2 marques qui pratiquent cela, mais voici un moyen simple de détecter si vous êtes concernés.

  1. Vous réalisez l’étape 1 de ce tutoriel, en enregistrant la sauvegarde du badge (par exemple en l’appelant « badge-original-1« 
  2. Vous ouvrez votre porte d’immeuble en utilisant le badge
  3. Vous réalisez de nouveau l’étape 1, en enregistrant la sauvegarde du badge avec un nom différent (ex : « badge-original-2« )
  4. Vous comparez avec l’utilitaire « Diff tool » de MCT vos 2 sauvegardes. S’il y a des différences, votre badge est équipé d’un système anti-copie et il n’est probablement pas copiable sans faire appel à votre syndic.

Et si vous avez un doute, n’hésitez pas à me demander, j’essaierai de vous éclairer de mon mieux…. Mais gardez en tête que quoi qu-il arrive, vous êtes responsable de vos actions.

Pour aller plus loin

Avec ce nouvel article, j’espère avoir rendu encore plus accessible ce domaine des badges et puces RFID qui me passionne. Ce ne sera vraisemblablement pas le dernier et l’intérêt que vous manifestez chaque jour via les autres articles sur le sujet et la boutique en dit long sur votre soif de connaissances !

Cet article s’adresse avant tout aux amateurs, mais si vous êtes professionnels et avez besoin de dupliquer et gérer des badges en quantité, sachez qu’il existe des solutions pour vous !

N’hésitez pas à poser vos questions en bas de l’article, et surtout dites moi ce que vous souhaitez que j’aborde comme sujet autour de cette thématique ! Comme toujours j’essaie d’y répondre dès que je peux, et je vous encourage vivement à scanner tout ce qui se trouve autour de vous !

ACR122U – Résoudre l’erreur « Unable to set alternate setting on USB interface »

Par Alex

(ou comment je vous ai préparé la meilleure clé USB pour travailler sur les puces RFID)

Hello, aujourd’hui je poste un article qui n’intéressera pas tout le monde mais devrait bien aider les concernés. Si vous utilisez un lecteur NFC/RFID modèle ACR122U et que vous essayez de l’utiliser avec la suite LibNFC des NFC Tools, vous avez peut-être rencontré l’erreur suivante : Unable to set alternate setting on USB interface (Connection timed out).

J’ai au début pensé à un problème matériel, mais si vous essayez le lecteur avec d’autres applications, vous remarquerez qu’il fonctionne correctement. Le problème semble donc bien lié à libnfc. En tombant sur cette erreur il y a plusieurs mois, je me suis senti un peu seul et j’ai ouvert un ticket sur le forum de libnfc. Mais Internet étant un endroit rempli de personnes qui vous veulent du bien, voici une synthèse de ce que de brillants esprits ont trouvé, et un petit coup de pouce de ma part pour ceux qui se sentent un peu dépassés par tout ça :)

L’origine du problème

Seuls certains lecteurs RFID ACR122U-A9 semblent provoquer le problème. Cela serait dû à un petit composant électronique qui diffère d’un lot à l’autre. Est-ce que ce sont les plus récents ? Je ne pense pas car j’en ai reçu plusieurs dizaines directement  « sortis de l’usine » de la part du fabricant ACS et aucun n’a le souci. Les unités « à problème » venaient pour ma part d’un revendeur qui ne m’a pas été d’une grande aide quand j’ai été confronté à ce souci. Depuis cette nouvelle collaboration, je n’ai pas eu à déplorer un seul ACR122U affecté par l’erreur « Unable to set alternate setting on USB Interface » et je considérais ce souci comme appartenant au passé. Il y a eu un peu de mouvement sur le sujet ces dernières semaines, alors même si ça ne concerne pas les clients de la Boutique, je me suis dit que ce serait un juste « retour des choses » que d’apporter à mon tour une petite contribution à l’Internet ;)

La version courte

L’erreur Unable to set alternate setting on USB interface (Connection timed out) est provoquée par la librairie libnfc lorsqu’elle essaie d’invoquer une fonctionnalité matérielle du ACR122U qui n’est pas disponible sur toutes les unités. A quoi sert cette fonctionnalité ? Je l’ignore, mais ce que je sais c’est qu’elle n’est pas indispensable pour l’utilisation que j’en ai (l’analyse et la copie de puces RFID et NFC). Un développeur a proposé ces derniers jours une solution qui a l’air de tenir la route. Il est très probable que les responsables de libnfc adoptent ce correctif dans la librairie libnfc à l’avenir. Ce qui signifie qu’à moyen terme, libnfc ne provoquera plus l’erreur Unable to set alternate setting on USB interface (Connection timed out). Donc si tu n’es pas pressé, tu peux juste mettre en pause ton projet NFC/RFID et y revenir dans 6 mois / 1 an pour que cela fonctionne. Si par contre tu n’as pas envie d’attendre, tu devrais continuer la lecture de cet article.

Reconnaître les lecteurs NFC RFID ACR122U « à problème » ?

On commence par la base : tous les lecteurs n’ont pas le problème mais je n’ai pas su trouver de différence ni physique ni logicielle pour les distinguer à part exécuter la commande nfc-list et constater le problème …

En terme de numéro de série, je vois que les lecteurs « sains » sont immatriculés ACR122U-A9 RR171-4* et que ceux à problème sont identifiés ACR122U-A9 RR171-2*. Je ne sais pas si on peut réellement se baser dessus, si vous avez le soucis n’hésitez pas à nous donner vos numéros de série en commentaire !

Si votre lecteur est affecté par la faille que pouvez-vous faire (à part le remplacer évidemment) ? C’est tout le sujet de cet article

Les solutions si votre lecteur ACR122U souffre de l’erreur « Unable to set alternate setting on USB interface ».

Comme je vous le disais un peu plus haut, un développeur a proposé un patch pour le code source de libnfc pour ne plus rencontrer cette erreur. La bonne nouvelle, c’est que la solution est disponible pour tout le monde juste ici. La moins bonne nouvelle, c’est que pour en profiter il faut télécharger ce code source modifié, le recompiler et l’installer sur ton système pour pouvoir l’utiliser.

Alors je sais que ça fait beaucoup de mots clés barbares d’un coup, et que ça peut faire peur, mais vraiment, avec ce tuto et une bonne tasse de café, je suis sûr que tu peux le faire :) Afin de maximiser les chances de réussites de tout le monde, je suis parti d’une version récente de Kali sur laquelle il n’y a eu aucune modification préalable faite : la version 2019.3 “large”. Donc si tu pars de cette version et que tu suis le tuto ci-dessous, tout devrait bien se passer. Si tu ne t’en sors pas où que cela te paraît trop compliqué, j’ai une ultime solution pour toi au bas de l’article 🙂

Compiler libnfc avec le patch qui va bien pour se débarrasser de l’erreur Unable to set alternate setting on USB interface.

On part du principe que vous avez créé votre clé USB Kali comme expliqué dans ce tuto précédent.

Edit du 30/03/2020 : Si vous utilisez Kali dans une version 2020 ou supérieure, vous n’êtes plus identifiés automatiquement en super-utilisateur au démarrage de la clé. Avant de pouvoir suivre ce tutoriel, commencez par entrer la commande suivante

kali@kali:~$ sudo su

Etape 1 : Passer le clavier en français et désactiver les modules parasites

root@kali:~# setxkbmap fr
root@kali:~# nano /etc/modprobe.d/blacklist-libnfc.conf

Coller à l’intérieur les 3 lignes suivantes :

blacklist nfc
blacklist pn533
blacklist pn533_usb

Ctrl+O pour valider l’écriture, ctrl + X

Etape 2 : Se connecter à internet mettre à jour le système et installer les paquets nécessaires à la compilation

root@kali:~# apt-get update
root@kali:~# apt-get install git binutils make csh g++ sed gawk autoconf automake autotools-dev libglib2.0-dev libnfc-dev liblzma-dev libnfc-bin libtool

Un message de confirmation vous demandera de valider l’installation de ces paquets additionnels. Acceptez en tapant Y puis entrée.

Etape 3 : Télécharger le code source de libnfc modifier et lancer la compilation

root@kali:~# git clone https://github.com/jpwidera/libnfc.git
root@kali:~# cd libnfc/
root@kali:~/libnfc# autoreconf -is
root@kali:~/libnfc# ./configure --prefix=/usr --sysconfdir=/etc
root@kali:~/libnfc# make

Etape 4 : Installer les nouveaux binaires fraîchement compilés

root@kali:~/libnfc# make install
root@kali:~/libnfc# cd /usr/lib
root@kali:/usr/lib# cp -p libnfc.* x86_64-linux-gnu/

Voilà, à partir de ce moment, vous ne devriez plus rencontrer l’erreur Unable to set alternate setting on USB interface (Connection timed out) qui vous a amené ici ! Si vous utilisez une clé USB « Live », vous devrez recommencer la procédure à chaque fois, ce qui est plutôt fastidieux je vous l’accorde. Si par contre vous disposez d’une clé USB « avec persistance » (comme celles disponibles sur la Boutique), vous n’avez à faire cette manipulation qu’une fois en mode persistant et vous retrouverez votre version libnfc modifiée au prochain démarrage en mode persistant (et la version libnfc livrée d’origine avec Kali sera toujours disponible si vous démarrez en mode « Live »).

Je n’arrive pas à compiler libNFC, comment m’en sortir ?

J’aurais aussi pu intituler cette partie “comment avoir la meilleure suite d’outils NFC/RFID compatible avec tous les ACR122U du marché”.

Je te l’avais dis, j’ai une ultime solution pour toi ! J’ai profité du fait que les clés USB de la Boutique aient cette fameuse “persistance” pour les modifier et inclure :

  • une version modifiée de libnfc pour éviter l’erreur Unable to set alternate setting on USB interface (Connection timed out)
  • une version récente des NFC-Tools qui rend l’utilitaire nfc-mfclassic compatible avec les puces de génération 2 (celles habituellement réservées à la manipulation sur smartphone)
  • une version modifiée de mfoc pour inclure le mode “hardnested” pour venir à bout des badges les mieux protégés
  • un dictionnaire des clés les plus communes pour chiffrer les badges d’immeubles et autres badges/cartes communément répandu
  • et d’autres petites attentions :)

J’ai finalisé l’installation d’une petite série de clés USB qui est vente sur la boutique depuis quelques temps.

La clé Kali « custom » de l Atelier du Geek

Pour conclure cet article

Voilà, bien que je ne maîtrise pas encore 100% des détails liés à ce problème, j’espère que ce résumé t’aura éclairé et tiré du pétrin si tu rencontres cette fichue erreur Unable to set alternate setting on USB interface (Connection timed out). Pour ma part cela aura été l’occasion de peaufiner ma suite d’outils en matière de RFID/NFC pour gagner un temps de dingue ! Si j’ai du nouveau, je mettrai à jour cet article ! D’ici là n’hésitez pas à me dire en commentaire si cela a marché pour vous, et je vous dis à bientôt,  probablement pour vous parler d’un nouvel appareil avec lequel je m’amuse bien en ce moment !

The History of Pong | Code the Classics

Par Alex Bate

One topic explored in Code the Classics from Raspberry Pi Press is the origin story and success of Pong, one of the most prominent games in early video game history.

‘The success of Pong led to the creation of Pong home consoles (and numerous unofficial clones) that could be connected to a television. Versions have also appeared on many home computers.’

Ask anyone to describe a game of table tennis and they’ll invariably tell you the same thing: the sport involves a table split into quarters, a net dividing the two halves, a couple of paddles, and a nice round ping-pong ball to bat back and forth between two players. Take a look at the 1972 video game Pong, however, and you’ll notice some differences. The table, for instance, is simply split in half and it’s viewed side-on, the paddles look like simple lines, and the ball is square. Yet no one – not even now – would have much trouble equating the two.

Back in the early 1970s, this was literally as good as it got. The smattering of low-powered arcade machines of the time were incapable of realistic-looking graphics, so developers had to be creative, hoping imaginative gamers would fill the gaps and buy into whatever they were trying to achieve. It helped enormously that there was a huge appetite for the new, emerging video game industry at that time. Nolan Bushnell was certainly hungry for more – and had he turned his nose up at Spacewar!, a space combat game created by Steve Russell in 1962, then Pong would never even have come about.

“The most important game I played was Spacewar! on a PDP-1 when I was in college,” he says, of the two-player space shooter that was popular among computer scientists and required a $120,000 machine to run. Although the visuals were nothing to write home about, the game was one of the first graphical video games ever made. It pitted two spaceships against each other and its popularity spread, in part, because the makers decided the code could be distributed freely to anyone who wanted it. “It was a great game, fun, challenging, but only playable on a very expensive computer late at night and the wee hours of the morning,” Nolan says. “In my opinion, it was a very important step.”

Nolan was so taken by Spacewar! that he made a version of the game with a colleague, Ted Dabney. Released in 1971, Computer Space allowed gamers to control a rocket in a battle against flying saucers, with the aim being to get more hits than the enemy in a set period of time. To make it attractive to players, it was placed in a series of colourful, space-age, moulded arcade cabinets. Nolan and Ted sold 1500 of them; even though they made just $500 from the venture, it was enough to spur them into continuing. They came up with the idea for Pong and created a company called Atari.

One of their best moves was employing engineer Al Alcorn, who had worked with Nolan at the American electronics company Ampex. Al was asked to create a table tennis game based on a similar title that had been released on the Magnavox Odyssey console, on the pretence that the game would be released by General Electric. In truth, Nolan simply wanted to work out Al’s potential, but he was blown away by what his employee came up with. Addictive and instantly recognisable, Atari realised Pong could be a major hit. The game’s familiarity with players meant it could be picked up and played by just about anyone.

Even so, Nolan had a hard time convincing others. Manufacturers turned the company down, so he visited the manager of a bar called Andy Capp’s in Sunnyvale, California and asked them to take Pong for a week. The manager soon had to call Nolan to tell him the machine had broken: it had become stuffed full of quarters from gamers who loved the game. By 1973, production of the cabinet was in overdrive and 8000 were sold. It led to the creation of a Pong home console which sold more than 150,000 machines. People queued to get their hands on one and Atari was on its way to become a legendary games company.

For Nolan, it was justification for his perseverance and belief. Suddenly, the man who had become interested in electronics at school, where he would spend time creating devices and connecting bulbs and batteries, was being talked of as a key player in the fledgling video game industry. But what did Nolan, Ted, Al, and the rest of the Atari team do to make the game so special? “We made it a good, solid, fun game to play,” says Nolan. “And we made it simple, easy, and quickly understood. Keeping things simple is more difficult to do than building something complex. You can’t dress up bad gameplay with good graphics.”

Making Pong

On the face of it, Pong didn’t look like much. Each side had a paddle that could be moved directly up and down using the controller, and the ball would be hit from one side to the other. The score was kept at the top of the screen and the idea was to force the opposing player to miss. It meant the game program needed to determine how the ball was hit and where the ball would go from that point. And that’s the crux of Pong’s success: the game encouraged people to keep playing and learning in the hope of attaining the skills to become a master.

When creating Pong, then, the designers had a few things in mind. One of the most important parts of the game was the movement of the paddles. This involved a simple, vertical rectangle that went up and down. One of the benefits Atari had when it created Pong was that it controlled not just the software but the hardware too. By building the cabinet, it was able to determine how those paddles should be moved. “The most important thing if you want to get the gameplay right is to use a knob to move the paddle,” advises Nolan. “No one has done a good Pong using touchscreens or a joystick.”

Look at a Pong cabinet close up – there are plenty of YouTube videos which show the game in action on the original machine – and you will see what Nolan means. You’ll notice that players turned a knob anticlockwise to move the paddle down, and clockwise to move it up. Far from being confusing, it felt intuitive.

Movement of the ball

With the paddles moving, Atari’s developers were able to look at the movement of the ball. At its most basic, if the ball continued to make contact with the paddles, it would constantly move back and forth. If it did not make contact, then it would continue moving in the direction it had embarked upon and leave the screen. At this stage, a new ball was introduced in the centre of the screen and the advantage was given to the player who had just chalked up a point. If you watch footage of the original Pong, you will see that the new ball was aimed at the player who had just let the ball go past. There was a chance he or she would miss again.

To avoid defeat, players had to be quite nifty on the controls and stay alert. Watching the ball go back and forth at great speed could be quite mesmerising as it left a blurred trail across the cathode ray tube display. There was no need to waste computing power by animating the ball because the main attention was focused on what would happen when it collided with the paddle. It had to behave as you’d expect. “The game did not exist without collisions of the ball to the paddle,” says Nolan.

Al realised that the ball needed to behave differently depending on where it hit the paddle. When playing a real game of tennis, if the ball hits the centre of the racket, it will behave differently from a ball that hits the edge. Certainly, the ball is not going to be travelling in a simple, straight path back and forth as you hit it; it is always likely to go off at an angle. This, though, is the trickiest part of making Pong “The ball should bounce up from an upper collision with more obtuse angles as the edge of the paddle is approached,” Nolan says. “This balances the risk of missing with the fact that an obtuse angle is harder to return.” This is what Pong is all about: making sure you hit the ball with the paddle, but in a manner that makes it difficult for the opposing player to return it. “A player wants the ball to be just out of reach for the opponent or be hard for him or her to predict.”

Read on…

This post is part of a much longer deep dive into the history of Pong in Code the Classics, our 224-page hardback book that not only tells the stories of some of the seminal video games of the 1970s and 1980s, but also shows you how to use Python and Pygame Zero to create your own games inspired by them, following examples programmed by Raspberry Pi founder Eben Upton.

In conjunction with today’s blog post, we’re offering £1 off Code the Classics when you order your copy between now and midnight Wednesday 26 Feb 2020 from the Raspberry Pi Press online store. Simply follow this link or enter the discount code PONG at checkout to get your copy for only £11, with free shipping in the UK.

Code the Classics is also available as a free download, although the physical book is rather delightful, so we really do recommend purchasing it.

The post The History of Pong | Code the Classics appeared first on Raspberry Pi.

Create Boing!, our Python tribute to Pong

Par Alex Bate

Following on from yesterday’s introduction to Pong, we’re sharing Boing!, the Python-based tribute to Pong created by Eben Upton exclusively for Code the Classics. Read on to get a detailed look at the code for Boing!

You can find the download link for the Boing! code in the Code the Classics book, available now in a variety of formats. Be sure to stick with today’s blog post until the end, for a special Code the Classics offer.

From Pong to Boing!

To show how a game like Pong can be coded, we’ve created Boing! using Pygame Zero, a beginner-friendly tool for making games in Python. It’s a good starting point for learning how games work – it takes place on a single screen without any scrolling, there are only three moving objects in the game (two bats and a ball), and the artificial intelligence for the computer player can be very simple – or even non-existent, if you’re happy for the game to be multiplayer only. In this case, we have both single-player and two-player modes.

The code can be divided into three parts. First, there’s the initial startup code. We import from other Python modules so we can use their code from ours. Then we check to make sure that the player has sufficiently up-to-date versions of Python and Pygame Zero. We set the WIDTH and HEIGHT variables, which are used by Pygame Zero when creating the game window. We also create two small helper functions which are used by the code.

The next section is the largest. We create four classes: Impact, Ball, Bat, and Game. The first three classes inherit from Pygame Zero’s Actor class, which amongst other things keeps track of an object’s location in the game world, and takes care of loading and displaying sprites. Bat and Ball define the behaviour of the corresponding objects in the game, while Impact is used for an animation which is displayed briefly whenever the ball bounces off something. The Game class’s job is to create and keep track of the key game objects, such as the two bats and the ball.

Further down, we find the update and draw functions. Pygame Zero calls these each frame, and aims to maintain a frame rate of 60 frames per second. Gameplay logic, such as updating the position of an object or working out if a point has been scored, should go in update, while in draw we tell each of the Actor objects to draw itself, as well as displaying backgrounds, text, and suchlike.

Our update and draw functions make use of two global variables: state and game. At any given moment, the game can be in one of three states: the main menu, playing the game, or the game-over screen. The update and draw functions read the state variable and run only the code relevant to the current state. So if state is currently State.MENU, for example, update checks to see if the SPACE bar or the up/down arrows are pressed and updates the menu accordingly, and draw displays the menu on the screen. The technical term for this kind of system is ‘finite state machine’.

The Game class’s job is to create and keep track of the key game objects

The game variable references an instance of the Game class as described above. The __init__ (constructor) method of Game optionally receives a parameter named controls. When we create a new Game object for the main menu, we don’t provide this parameter and so the game will therefore run in attract mode – in other words, while you’re on the main menu, you’ll see two computer-controlled players playing against each other in the background. When the player chooses to start a new game, we replace the existing Game instance with a new one, initialising it with information about the controls to be used for each player – if the controls for the second player are not specified, this indicates that the player has chosen a single-player game, so the second will be computer-controlled.

Two types of movement

In Boing!, the Bat and Ball classes inherit from Pygame Zero’s Actor class, which provides a number of ways to specify an object’s position. In this game, as well as games in later chapters, we’re setting positions using the x and y attributes, which by default specify where the centre of the sprite will be on the screen. Of course, we can’t just set an object’s position at the start and be done with it – if we want it to move as the game progresses, we need to update its position each frame. In the case of a Bat, movement is very simple. Each frame, we check to see if the relevant player (which could be a human or the computer) wants to move – if they do, we either subtract or add 4 from the bat’s Y coordinate, depending on whether they want to move up or down. We also ensure that the bat does not go off the top or bottom of the screen. So, not only are we only moving along a single axis, our Y coordinate will always be an integer (i.e. a whole number). For many games, this kind of simple movement is sufficient. Even in games where an object can move along both the X and Y axes, we can often think of the movement along each axis as being separate. For example, in the next chapter’s game, Cavern, the player might be pressing the right arrow key and therefore moving along the X axis at 4 pixels per frame, while also moving along the Y axis at 10 pixels per frame due to gravity. The movement along each axis is independent of the other.

Able to move at any angle, the ball needs to move at the same speed regardless of its direction

For the Ball, things get a bit more complicated. Not only can it move at any angle, it also needs to move at the same speed regardless of its direction. Imagine the ball moving at one pixel per frame to the right. Now imagine trying to make it move at a 45° angle from that by making it move one pixel right and one pixel up per frame. That’s a longer distance, so it would be moving faster overall. That’s not great, and that’s before we’ve even started to think about movement in any possible direction.

The solution is to make use of vector mathematics and trigonometry. In the context of a 2D game, a vector is simply a pair of numbers: X and Y. There are many ways in which vectors can be used, but most commonly they represent positions or directions.

You’ll notice that the Ball class has a pair of attributes, dx and dy. Together these form a vector representing the direction in which the ball is heading. If dx and dy are 1 and 0.5, then each time the ball moves, it’ll move by one pixel on the X axis and a half a pixel on the Y axis. What does it mean to move half a pixel? When a sprite is drawn, Pygame Zero will round its position to the nearest pixel. So the end result is that our sprite will move down the screen by one pixel every other frame, and one pixel to the right every frame (Figure 1).

We still need to make sure that our object moves at a consistent speed regardless of its direction. What we need to do is ensure that our direction vector is always a ‘unit vector’ – a vector which represents a distance of one (in this case, one means one pixel, but in some games it will represent a different distance, such as one metre). Near the top of the code you’ll notice a function named normalised. This takes a pair of numbers representing a vector, uses Python’s math.hypot function to calculate the length of that vector, and then divides both the X and Y components of the vector by that length, resulting in a vector which points in the same direction but has a length of one (Figure 2).

Vector maths is a big field, and we’ve only scratched the surface here. You can find many tutorials online, and we also recommend checking out the Vector2 class in Pygame (the library on top of which Pygame Zero is built).

Try Boing!

Update Raspbian to try Boing! and other Code the Classics games on your Raspberry Pi.

The full BOING! tutorial, including challenges, further explanations, and a link to the downloadable code can be found in Code the Classics, the latest book from Raspberry Pi Press.

We’re offering £1 off Code the Classics if you order it before midnight tomorrow from the Raspberry Pi Press online store. Visit the store now, or use the discount code PONG at checkout if you make a purchase before midnight tomorrow.

As always, Code the Classics is available as a free PDF from the Wireframe website, but we highly recommend purchasing the physical book, as it’s rather lovely to look at and would make a great gift for any gaming and/or coding enthusiast.

The post Create Boing!, our Python tribute to Pong appeared first on Raspberry Pi.

Build a physical game controller for Infinite Bunner

Par Andrew Gregory

In HackSpace magazine issue 28 we had a look at how to create an ultrasonic controller for a version of Pong called Boing!. This month, we’re going to take a step further forward through video game history and look at the game Frogger. In this classic game, you control a frog as it makes its way across logs, roads, and train tracks, avoiding falling in the water or getting hit.

Infinite Bunner

The tribute to Frogger in the new Code the Classics Volume 1 book is called Infinite Bunner, and works in much the same way, except you control a bunny.

Jump along the logs, dodge the traffic, avoid the trains, and keep your bunny alive for as long as possible

All this hopping got us thinking about a controller. Our initial idea was that since the animals jump, so should the controller. An accelerometer can detect freefall, so it shouldn’t be too hard to convert that into button presses. However, it turns out that computer-controlled frogs and rabbits can jump much, much faster than humans can, and we really struggled to get a working game mechanic, so we compromised a little and worked with ‘flicks’.

The flick controller

The basic idea is that you tilt the controller left or right to move left or right, but you have to flick it up to register a jump (simply holding it upright won’t work).

We’ve used a Circuit Playground Bluefruit as our hardware, but it would work equally well with a Circuit Playground Express. There are two key parts to the software. The first is reading in accelerometer values and use these to know what orientation the board is in, and the second is the board mimicing a USB keyboard and sending keystrokes to any software running on it.

Playing Infinite Bunner

The first step is to get Infinite Bunner working on your machine.

Get your copy of Code the Classics today

You can download the code for all the Code the Classics Volume 1 games here. Click on Clone or Download > Download ZIP. Unzip the download somewhere.

You’ll need Python 3 with Pygame Zero installed. The process for this differs a little between different computers, but there’s a good overview of all the different options on page 186 of Code the Classics.

Subscribe to HackSpace magazine for twelve months and you get a Circuit Playground Express for free! Then you can make your very own Infinite Bunner controller

Once everything’s set up, open a terminal and navigate to the directory you unzipped the code in. Then, inside that, you should find a folder called bunner-master and move into that. You can then run:

python3 bunner.py

Have a few goes playing the game, and you’ll find that you need the left, right, and up arrow keys to play (there is also the down arrow, but we’ve ignored this since we’ve never actually used it in gameplay – if you’re a Frogger/Bunner aficionado, you may wish to implement this as well).

Reading the accelerometer is as easy as importing the appropriate module and running one line:

from adafruit_circuitplayground import cpx, y, z = cp.acceleration

Sending key presses is similarly easy. You can set up a keyboard with the following:

from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
from adafruit_hid.keycode import Keycode

keyboard = Keyboard(usb_hid.devices)

Then send key presses with code such as this:

time.keyboard.press(Keycode.LEFT_ARROW) time.sleep(0.1)
keyboard.release_all()

The only thing left is to slot in our mechanics. The X-axis on the accelerometer can determine if the controller is tilted left or right. The output is between 10 (all the way left) and -10 (all the way right). We chose to threshold it at 7 and -7 to require the user to tilt it most of the way. There’s a little bit of fuzz in the readings, especially as the user flicks the controller up, so having a high threshold helps avoid erroneous readings.

The Y-axis is for jumping. In this case, we require a ‘flap’ where the user first lifts it up (over a threshold of 5), then back down again.

The full code for our controller is:

import time
from adafruit_circuitplayground import cp
import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
from adafruit_hid.keycode import Keycode

keyboard = Keyboard(usb_hid.devices)

jumping = 0
up=False
while True:
    x, y, z = cp.acceleration
    if abs(y) > 5:
        up=True
    if y < 5 and up:
        keyboard.press(Keycode.UP_ARROW)
        time.sleep(0.3)
        keyboard.release_all()
        up=False
    if x < -7 :
        keyboard.press(Keycode.LEFT_ARROW)
        time.sleep(0.1)
        keyboard.release_all()
    if x < 7 : keyboard.press(Keycode.RIGHT_ARROW)
        time.sleep(0.1)
        keyboard.release_all()
        time.sleep(0.1)
    if jumping > 0:
        jumping=jumping-1

It doesn’t take much CircuitPython to convert a microcontroller into a games controller

The final challenge we had was that there’s a bit of wobble when moving the controller around – especially when trying to jump repeatedly and quickly. After fiddling with thresholds for a while, we found that there’s a much simpler solution: increase the weight of the controller. The easiest way to do this is to place it inside a book. If you’ve ever held a copy of Code the Classics, you’ll know that it’s a fairly weighty tome. Just place the board inside and close the book around it, and all the jitter disappears.

That’s all there is to the controller. You can use it to play the game, just as you would any joypad. Start the game as usual, then start flapping the book around to get hopping.

HackSpace magazine is out now

The latest issue of HackSpace magazine is out today and can be purchased from the Raspberry Pi Press online store. You can also download a copy if you want to see what all the fuss is about.

Code the Classics is available from Raspberry Pi Press as well, and comes with free UK shipping. And here’s a lovely video about Code the Classics artist Dan Malone and the gorgeous artwork he created for the book:

Code the Classics: Artist Dan Malone

No Description

The post Build a physical game controller for Infinite Bunner appeared first on Raspberry Pi.

DOSBox Pure for RetroArch aims to simplify classic MS-DOS gaming

Par Jim Salter

YouTube user Psyraven—who is apparently Bernard Schilling himself—created this video as an introductory demo for DOSBox Pure.

Recently, indie developer Bernard Schilling published a new fork of the DOSBox classic-gaming emulator. If you're not familiar with DOSBox, it's a way to play classic MS-DOS games from the 1980s and 1990s on a modern Windows, Mac, or Linux PC. DOSBox Pure is an attempt to simplify and eliminate some of the donkeywork involved in actually loading and playing games in DOSBox itself.

DOSBox Pure isn’t a standalone app

For those among us who aren't already intimately familiar with retrogaming—even those of us who lived through the period when those games were new—it isn't necessarily the most welcoming scene to get into. Although DOSBox Pure is specifically trying to alleviate that, it falls afoul of the same nest of expectations of what "everybody already knows," and I found it rather frustrating digging all the way to the bottom of "what is and how can I make it work."

The very first thing you'll need to know is that DOSBox Pure itself runs underneath the broader RetroArch application. RetroArch, in its own words, is "a frontend for emulators, game engines, and media players." DOSBox Pure is a "core" for RetroArch—meaning, when properly installed, it serves as one of the engines that RetroArch can use to run an older game.

Read 20 remaining paragraphs | Comments

Un YouTubeur transforme son vieil iPod en station d’écoute Spotify

Par Amandine Jonniaux

Écouter ses musiques préférées sur son iPod est un loisir que les moins de vingt ans ne connaissent sans doute pas. Lancé en 2001, le lecteur musical d’Apple avait connu un véritable succès mondial, notamment grâce à son modèle star, l’iPod Classic. Disparu en 2009, le terminal est rapidement devenu obsolète avec le développement des smartphones, qui combinent aujourd’hui de nombreuses fonctionnalités de divertissement, et ont l’avantage de pouvoir se connecter à Internet pour écouter nos playlists préférées sur Spotify ou YouTube Music. Pourtant, l’iPod en a encore sous la pédale. C’est du moins ce qu’a tenté de prouver le YouTubeur Guy Dupont, en transformant son vieil iPod Classic de 2004 offert par sa belle-mère 17 ans plus tôt, en véritable station musicale moderne.

Baptisé sPot, cet iPod amélioré n’a plus grand-chose du modèle original. Guy Dupont l’a en effet modifié pour l’alimenter d’un Raspberry Pi Zero W à 10$, capable d’être rechargé en micro-USB. En ajoutant quelques composants supplémentaires dénichés sur Adafruit, l’appareil est désormais capable de se connecter au Wi-Fi pour diffuser de la musique depuis Spotify grâce au logiciel Raspotify. Équipé d’une nouvelle batterie de 1000 mAh, d’un retour haptique, d’un nouvel écran LCD couleur et d’une compatibilité Bluetooth, le sPot est également capable de se connecter à n’importe quelle enceinte compatible, ou à des écouteurs sans-fil. Pour parfaire son expérience audio, le YouTubeur a également codé l’interface de son sPot pour lui permettre de naviguer dans ses playlists avec la roue tactile de l’appareil. Le code source a d’ailleurs été mis en ligne sur GitHub pour ceux qui voudraient s’essayer à la tâche.

Apple iPod touch (32 Go) -...
104 Commentaires
Apple iPod touch (32 Go) -...
  • Écran Retina de 4 pouces
  • Vos musiques, jeux et apps AR préférés au creux de votre poche
  • La puce A10 Fusion pour des performances jusqu’à deux fois plus rapides et des graphismes...
  • FaceTime en groupe avec vos proches
249,99 EUR
Vérifier le prix

Un YouTubeur transforme son vieil iPod en station d’écoute Spotify

Burning Crusade Classic leaks ahead of BlizzCon

Par Sam Machkovech
Promotional image for World of Warcraft.

Enlarge / That's quite the game-announcement leak there, Blizzard. (credit: Blizzard)

Ahead of this weekend's BlizzCon game-announcement frenzy, two of Blizzard's secrets have sneaked out in the form of a leak. Both revolve around World of Warcraft: one for the latest Shadowlands expansion, and another for the World of Warcraft Classic server option.

In the latter case, 2007's hugely popular WoW expansion pack, The Burning Crusade, will be bolted onto the WoW Classic option inside the Blizzard Launcher starting sometime in "2021." The news comes from an apparent leak of official BlizzCon press release materials, all formatted with official images and descriptions of what's to come, as found on Blizzard's official servers by users at Reddit's WoW community.

As with 2019's official WoW vanilla launch, The Burning Crusade will return without any new or special features on top of what originally came with the game. You may recall that this expansion pack included a trickle of content drops while Blizzard maintained it before selling Wrath of the Lich King in 2008. Meanwhile, Blizzard's leaked document claims that the original version's update cadence will return: "Content from the original game will roll out in phases, at a cadence paced for the WoW Classic community. Prepare for the opening of the Black Temple, gear up to confront the gods of Zul'Aman, and gather your allies to face the fury of the Sunwell."

Read 3 remaining paragraphs | Comments

Hier — 10 avril 2021Informatique & geek

Diablo II Resurrected impressions: Unholy cow, man

Par Sam Machkovech
Diablo II Resurrected impressions: Unholy cow, man

Enlarge (credit: Blizzard / Sam Machkovech)

Diablo II: Resurrected is slated to launch on PC and consoles "later this year," but in the meantime, the remaster is far enough along that its handlers launched an early "technical alpha" demo over this weekend. (There's a teensy, tiny chance you can still get in if you sign up right now.) I was invited for the single-player test's first wave—and took the opportunity to stream my initial gameplay via Twitch.

Should you watch that three-hour session, you'll see my largely positive reaction at first blush. (Once some initial online-check stupidity cleared up, at least.) Afterwards, I took a moment to breathe, have a snack, and install the game on other systems in order to do some more fully fledged testing.

Even outside that first-look afterglow, of seeing D2:R running beautifully on a modern PC, the results thus far—of an admittedly unfinished preview version—have charmed me even further than my first session might have led you to believe. The "Blizzard Classic" team is currently walking on a long road into hell, and that road just might be paved with redemption.

Read 22 remaining paragraphs | Comments

❌