<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mduquesn</id>
		<title>Wiki de Projets IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mduquesn"/>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Mduquesn"/>
		<updated>2026-05-15T00:27:39Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80359</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80359"/>
				<updated>2020-01-06T13:33:05Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*Harware&lt;br /&gt;
**Choix des composants principaux : microprocesseur, mémoire&lt;br /&gt;
**alimentation&lt;br /&gt;
**routage&lt;br /&gt;
**liste des composants&lt;br /&gt;
**PCB&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**modifier le programme du microprocesseur pour faire apparaître notre carte comme un périphérique USB spécifique&lt;br /&gt;
**rédiger le programme d'acquisition des touches du clavier par le microprocesseur&lt;br /&gt;
**permettre au PC de lire l'état des touches&lt;br /&gt;
&lt;br /&gt;
*Autre&lt;br /&gt;
**état de l'art pour le Keygrabber&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*- Expression plus précise de notre feuille de route.&lt;br /&gt;
*- Entretien avec les professeurs&lt;br /&gt;
*- Etude de l'état de l'art des Keygrabber&lt;br /&gt;
&lt;br /&gt;
[1] Le Keygrabber ou Keylogger est un outil permettant de détecter et enregistrer l'enfoncement des touches d'un clavier. Il se classifie en deux catégories. Le Keylogger software est un programme s'exécutant sur l'ordinateur de l'hôte. Il nécessite donc d'être installé, contrairement au Keylogger hardware qui est purement matériel et ne dépend pas d'applications.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous nous intéressons ici à ceux hardware. Parmi eux, il existe ceux dits actifs et ceux dits passifs. Le Keylogger actif est placé en série entre l'ordinateur et le clavier. En plus de récupérer l'appui des touches, il doit donc relayer les communications bi-directionnelles sans perte de débit. Il est soit alimenté par le bus de l'interface clavier-ordinateur, soit auto-alimenté.&amp;lt;br&amp;gt;&lt;br /&gt;
Quant à lui, le Keylogger passif est placé en parallèle du bus de communication et ne fait qu'intercepter l'information utile. Il est auto-alimenté.&lt;br /&gt;
&lt;br /&gt;
Notre Keygrabber est donc assimilable à un Keygrabber hardware actif.&lt;br /&gt;
Un tel Keylogger se présente généralement sous la forme d'un périphérique avec deux ports USB, un mâle et une femelle. Le port mâle est donc connecté au PC alors que le clavier est branché au port femelle. La longueur de l'appareil dépend de ses caractéristiques techniques. Il existe aussi des Keylogger permettant la récupération des données via Wifi. La page web suivante donne un aperçu de ce qu'il se fait. &amp;lt;br&amp;gt;&lt;br /&gt;
http://airdrivewifi.com/?page=keyloggers &amp;lt;br&amp;gt;&lt;br /&gt;
Nous observons aussi sur ce même site qu'il existe également un Keylogger sous forme PCB à souder entre le clavier et l'ordinateur. Cela permet une plus grande discrétion car ce PCB est caché sous la coque du clavier et rien n'apparaît.&lt;br /&gt;
&lt;br /&gt;
Notre Keylogger diffère encore de ces derniers. En effet, nous remplaçons directement la carte du clavier. Il y aura donc un unique microprocesseur sur la chaîne de communication. Nous devrons alors traiter des données brutes, venant directement du clavier, et non pas venant d'un microprocesseur gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
* Parmi trois claviers, nous avons choisi celui avec une taille de PCB la plus grande pour être sûr d'avoir la place d'y insérer notre futur PCB.&lt;br /&gt;
* Nous l'avons ouvert et avons étudié sur son fonctionnement global. Les touches du clavier sont reliées à un mappage et à chaque touche est associé un code brut nommé scancode. Chaque clavier à un scancode qui lui est propre. Ce scancode est donc traité par le microprocesseur qui retourne en via l'USB un keycode  universel pour chaque pays.&lt;br /&gt;
&lt;br /&gt;
* Notre clavier se compose d'un mappage de touche composé de 26 pins. Le PCB a une taille de 2,5x13 cm.&lt;br /&gt;
Nous nous demandons alors si les mappages des claviers sont universels afin d'éviter de devoir tester toutes les touches pour comprendre le mappage réalisé.&lt;br /&gt;
&lt;br /&gt;
* Nous avons finalement commencé à réfléchir aux principaux composants nécessaires pour notre PCB : microprocesseur, mémoire Flash, port USB, élément de brochage du mappage au PCB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*A partir de cette séance, nous avons travaillé sur le choix des composants.&lt;br /&gt;
Nous avons donc commencé par réflechir au composant indispensable au notre circuit. Dans un premier temps l'alimentation USB fournira du 5.0V. Une mémoire flash (ou carte SD) est alimentée par du 3.3V. Il nous faut donc un convertisseur de tension 5.0V vers 3.3V.&lt;br /&gt;
Pour le port USB il nous faudra aussi une horloge cadencée à 16 MHz.&lt;br /&gt;
*Le microcontrôleur ATmega16u2 ne semble pas le mieux adapté à notre usage, car il dispose de trop peu de ports (24) alors que notre clavier seul en demande déjà 26.&lt;br /&gt;
Le nombre de ports est aussi trop limité pour les modèles ATmega32u2,16u4 et 32u4.&lt;br /&gt;
Nous avons alors pensé à utiliser des multiplexeurs et démultiplexeurs, mais cela ajoutera un coût et une complexité supplémentaire au projet.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
* Nous nous remettons en question car nous avons manqué de méthode dans la recherche et l'analyse de notre besoin.&lt;br /&gt;
Concernant le microprocesseur, nous sommes partis de ce que nous connaissions (les modèles ATmega) et allions adapter notre projet à ces composants là. Nous avons décidé de mieux analyser les critères de notre besoin.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le microprocesseur, il s'agit d'une compatibilité avec un port USB, avec une mémoire Flash externe. Il doit posséder suffisamment de ports utilisables pour les 26 broches du mappage du clavier et la connexion avec la mémoire Flash. On nous avait conseillé l'utilisation de la bibliothèque LUFA pour gérer le protocole USB : il doit donc être compatible avec cette bibliothèque. Si besoin, nous pourrons chercher d'autres critères de discrimination.&lt;br /&gt;
Pour établir une liste, il s'est avéré pertinent de sélectionner les microcontrôleurs compatibles directement sur le site de LUFA. Les modèles sont les ATmega, les AT90USB, les AT32UC3 et les ATXMEGA.&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont ainsi tous compatibles pour l'USB et ont tous une architecture AVR. Le critère le plus discriminant est maintenant le nombre de ports disponibles pour l'utilisation souhaitée.&lt;br /&gt;
&lt;br /&gt;
*Chaque clavier a en fait son propre mappage.&lt;br /&gt;
Au cours de la séance, nous utilisons une breadboard accompagnée de quelques DEL et d'une carte Arduino afin de déterminer quelles touches correspond à quelles entrées et sorties du mappage. Pour cela, on injecte un courant sur une des broches et on observe sur quelle broche du mappage il est véhiculé lors de l'appui d'une touche. On répète l'opération en pressant chacune des touches et en changeant la broche d'entrée du courant. On peut ainsi créer le scancode de notre clavier.&lt;br /&gt;
Nous avons obtenue le mappage suivant : (mappage non finalisé par manque de temps)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Scan_code.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
A l'aide du site de LUFA et des documentations techniques des différents microcontrôleurs, nous pouvons restreindre notre choix parmi ceux du tableau ci-dessous.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; style=&amp;quot;width:40%;&amp;quot;&lt;br /&gt;
|+ Tableau&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Série&lt;br /&gt;
! scope=col | Modèle&lt;br /&gt;
! scope=col | Nombre de pins utiles&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT32&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B064&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0128&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0256&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0512&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT90USB&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB646&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB647&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1286&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1287&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
ATXMEGA&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA16A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
34&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA32A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
34&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
34&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
34&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Nous utiliserons comme mémoire une mémoire de type flash série car elle nécessite moins de broche. Mais en contrepartie il nous faudra sur notre micro-contrôleur deux SPI, un pour la liaison USB et l'autre pour celle avec la carte mémoire . &lt;br /&gt;
&lt;br /&gt;
*Notre choix de micro-contrôleur se porte sur l'ATXMEGA16A4U.&lt;br /&gt;
Il dispose en effet de deux SPI (un sur le port C et l'autre sur le port D ) et il gère les MOSI (Master Out Slave In) MISO (Master In Slave Out) pour la communication avec la mémoire et l'USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Il a aussi 34 broches I/O et il s’alimente avec une tension comprise entre 1.6 et 3.6 V , donc on pourra programmer la micro-contrôleur en alimentant directement en 3.3 v.&lt;br /&gt;
*Il nous reste donc plus que le choix de la mémoire mais l'on sait que cette mémoire devra avoir une interface de type SPI, non-volatile, travaillant sous une tension de 3.3V et dont la fréquence de travail est inférieure ou égale à 33MHz.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Il nous reste à réaliser les plan du PCB, pour cela nous allons nous aider des plans suivants. Il s'agit d'un exemple de PCB dans lequel une carte SD est connecté à un ATmeaga.&amp;lt;br&amp;gt;&lt;br /&gt;
La référence est : [https://www.abcelectronique.com/annuaire/montages/microcontrolleurs-atmel.php] &amp;lt;br&amp;gt;&lt;br /&gt;
[[Fichier:Atmega-cartesd-pcb.jpg]]&lt;br /&gt;
&lt;br /&gt;
*Les principaux éléments retenus sont donc &amp;lt;br&amp;gt;&lt;br /&gt;
le microcontrôleur ATXMEGA16A4U (32 PORTs I/O , dons 2 SPI USB et MOSI , fréquence 33Mhz) &amp;lt;br&amp;gt;&lt;br /&gt;
et la mémoire MX25R6435FM2IL0 (type flash , taille 8 Mbits , fréquence 33Mhz , communication SPI).&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
=Bibliographie=&lt;br /&gt;
&lt;br /&gt;
[1] Thèse : Saptarshi Mallick, Physical Layer Detection of Hardware Keyloggers (2014), Logan, Utah : UTAH STATE UNIVERSITY&lt;br /&gt;
http://index-of.es/System-Hacking/Keyloggers/54172d3c0dcc9b71943aa1d4c28fffa65f86.pdf&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80204</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80204"/>
				<updated>2020-01-03T17:30:02Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*Harware&lt;br /&gt;
**Choix des composants principaux : microprocesseur, mémoire&lt;br /&gt;
**alimentation&lt;br /&gt;
**routage&lt;br /&gt;
**liste des composants&lt;br /&gt;
**PCB&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**modifier le programme du microprocesseur pour faire apparaître notre carte comme un périphérique USB spécifique&lt;br /&gt;
**rédiger le programme d'acquisition des touches du clavier par le microprocesseur&lt;br /&gt;
**permettre au PC de lire l'état des touches&lt;br /&gt;
&lt;br /&gt;
*Autre&lt;br /&gt;
**état de l'art pour le Keygrabber&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*- Expression plus précise de notre feuille de route.&lt;br /&gt;
*- Entretien avec les professeurs&lt;br /&gt;
*- Etude de l'état de l'art des Keygrabber&lt;br /&gt;
&lt;br /&gt;
[1] Le Keygrabber ou Keylogger est un outil permettant de détecter et enregistrer l'enfoncement des touches d'un clavier. Il se classifie en deux catégories. Le Keylogger software est un programme s'exécutant sur l'ordinateur de l'hôte. Il nécessite donc d'être installé, contrairement au Keylogger hardware qui est purement matériel et ne dépend pas d'applications.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous nous intéressons ici à ceux hardware. Parmi eux, il existe ceux dits actifs et ceux dits passifs. Le Keylogger actif est placé en série entre l'ordinateur et le clavier. En plus de récupérer l'appui des touches, il doit donc relayer les communications bi-directionnelles sans perte de débit. Il est soit alimenté par le bus de l'interface clavier-ordinateur, soit auto-alimenté.&amp;lt;br&amp;gt;&lt;br /&gt;
Quant à lui, le Keylogger passif est placé en parallèle du bus de communication et ne fait qu'intercepter l'information utile. Il est auto-alimenté.&lt;br /&gt;
&lt;br /&gt;
Notre Keygrabber est donc assimilable à un Keygrabber hardware actif.&lt;br /&gt;
Un tel Keylogger se présente généralement sous la forme d'un périphérique avec deux ports USB, un mâle et une femelle. Le port mâle est donc connecté au PC alors que le clavier est branché au port femelle. La longueur de l'appareil dépend de ses caractéristiques techniques. Il existe aussi des Keylogger permettant la récupération des données via Wifi. La page web suivante donne un aperçu de ce qu'il se fait. &amp;lt;br&amp;gt;&lt;br /&gt;
http://airdrivewifi.com/?page=keyloggers &amp;lt;br&amp;gt;&lt;br /&gt;
Nous observons aussi sur ce même site qu'il existe également un Keylogger sous forme PCB à souder entre le clavier et l'ordinateur. Cela permet une plus grande discrétion car ce PCB est caché sous la coque du clavier et rien n'apparaît.&lt;br /&gt;
&lt;br /&gt;
Notre Keylogger diffère encore de ces derniers. En effet, nous remplaçons directement la carte du clavier. Il y aura donc un unique microprocesseur sur la chaîne de communication. Nous devrons alors traiter des données brutes, venant directement du clavier, et non pas venant d'un microprocesseur gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
* Parmi trois claviers, nous avons choisi celui avec une taille de PCB la plus grande pour être sûr d'avoir la place d'y insérer notre futur PCB.&lt;br /&gt;
* Nous l'avons ouvert et avons étudié sur son fonctionnement global. Les touches du clavier sont reliées à un mappage et à chaque touche est associé un code brut nommé scancode. Chaque clavier à un scancode qui lui est propre. Ce scancode est donc traité par le microprocesseur qui retourne en via l'USB un keycode  universel pour chaque pays.&lt;br /&gt;
&lt;br /&gt;
* Notre clavier se compose d'un mappage de touche composé de 26 pins. Le PCB a une taille de 2,5x13 cm.&lt;br /&gt;
Nous nous demandons alors si les mappages des claviers sont universels afin d'éviter de devoir tester toutes les touches pour comprendre le mappage réalisé.&lt;br /&gt;
&lt;br /&gt;
* Nous avons finalement commencé à réfléchir aux principaux composants nécessaires pour notre PCB : microprocesseur, mémoire Flash, port USB, élément de brochage du mappage au PCB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*A partir de cette séance, nous avons travaillé sur le choix des composants.&lt;br /&gt;
Nous avons donc commencé par réflechir au composant indispensable au notre circuit. Dans un premier temps l'alimentation USB fournira du 5.0V , et une mémoire flash (ou carte SD) est alimenté par du 3.3V .Il nous faut donc un convertisseur de tension 5.0V vers 3.3V.&lt;br /&gt;
Pour le port USB il nous faudra aussi une horloge cadencée à 16 MHz.&lt;br /&gt;
*Le microcontrôleur ATmega16u2 ne semble pas le mieux adapté à notre usage, car il dispose de trop peu de ports (24) alors que notre clavier seul en demande déjà 26.&lt;br /&gt;
Le nombre de ports est aussi trop limité pour les modèles ATmega32u2,16u4 et 32u4.&lt;br /&gt;
Nous avons alors pensé à utiliser des multiplexeurs et démultiplexeurs, mais cela ajoutera un coût et une complexité supplémentaire au projet.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
* Nous nous remettons en question car nous avons manqué de méthode dans la recherche et l'analyse de notre besoin.&lt;br /&gt;
Concernant le microprocesseur, nous sommes partis de ce que nous connaissions (les modèles ATmega) et allions adapter notre projet à ces composants là. Nous avons décidé de mieux analyser les critères de notre besoin.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le microprocesseur, il s'agit d'une compatibilité avec un port USB, avec une mémoire Flash externe. Il doit posséder suffisamment de ports utilisables pour les 26 broches du mappage du clavier et la connexion avec la mémoire Flash. On nous avait conseillé l'utilisation de la bibliothèque LUFA pour gérer le protocole USB : il doit donc être compatible avec cette bibliothèque. Si besoin, nous pourrons chercher d'autres critères de discrimination.&lt;br /&gt;
Pour établir une liste, il s'est avéré pertinent de sélectionner les microcontrôleurs compatibles directement sur le site de LUFA. Les modèles sont les ATmega, les AT90USB, les AT32UC3 et les ATXMEGA.&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont ainsi tous compatibles pour l'USB et ont tous une architecture AVR. Le critère le plus discriminant est maintenant le nombre de ports disponibles pour l'utilisation souhaitée.&lt;br /&gt;
&lt;br /&gt;
*Chaque clavier a en fait son propre mappage.&lt;br /&gt;
Au cours de la séance, nous utilisons une breadboard accompagnée de quelques DEL et d'une carte Arduino afin de déterminer quelles touches correspond à quelles entrées et sorties du mappage. Pour cela, on injecte un courant sur une des broches et on observe sur quelle broche du mappage il est véhiculé lors de l'appui d'une touche. On répète l'opération en pressant chacune des touches et en changeant la broche d'entrée du courant. On peut ainsi créer le scancode de notre clavier.&lt;br /&gt;
Nous avons obtenue le mappage suivant : (mappage non finalisé par manque de temps)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Scan_code.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
A l'aide du site de LUFA et des documentations techniques des différents microcontrôleurs, nous pouvons restreindre notre choix parmi ceux du tableau ci-dessous.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; style=&amp;quot;width:40%;&amp;quot;&lt;br /&gt;
|+ Tableau&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Série&lt;br /&gt;
! scope=col | Modèle&lt;br /&gt;
! scope=col | Nombre de pins utilisables&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT32&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B064&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0128&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0256&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0512&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT90USB&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB646&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB647&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1286&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1287&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
ATXMEGA&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA16A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA32A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Nous utiliseront comme mémoire une mémoire de type flash série car elle nécessite moins de broche.Mais en contre partie il nous faudra sur notre micro-contrôleur 2 SPIs,L'un pour la liaison USB et l'autre pour celle avec la carte mémoire . &lt;br /&gt;
&lt;br /&gt;
*Notre choix de micro-contrôleur c'est donc portée sur ATXMEGA16A4U.&lt;br /&gt;
Car il dispose de 2 SPIs (un sur le port C et l'autre sur le port D ) et gère le mosi et l'usb.&lt;br /&gt;
Il a aussi 34 PORTs I/O et il s’alimente avec une tension comprise entre 1.6 et 3.6 V , donc on pourra programmer la micro-contrôleur en alimentant directement en 3.3 v.&lt;br /&gt;
*Il nous reste donc plus que le choix de la mémoire mais l'on sait que cette mémoire devra avoir une interface de type SPI , non-volatile , travaillant sous une tension de 3.3V et dons la fréquence de travaille est inférieur ou égal à 33MHz.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Avec tout cela de réalisé il nous reste plus qu'à réaliser les plan du PCB , pour cela nous allons nous aider des plans suivants :&lt;br /&gt;
[[Fichier:Atmega-cartesd-pcb.jpg]]&lt;br /&gt;
*exemple de pcb afin de connecter un atmega à une carte SD (tiré du site [https://www.abcelectronique.com/annuaire/montages/microcontrolleurs-atmel.php])&lt;br /&gt;
*Les éléments les plus importants t(s retenue sont donc:&lt;br /&gt;
*Micro-contrôleur : ATXMEGA16A4U (32 PORTs I/O , dons 2 SPI USB et MOSI , fréquence 33Mhz)&lt;br /&gt;
*Mémoire : MX25R8035FM1IL0 (type flash , taille 8 Mbits , fréquence 33Mhz , communication SPI)&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
=Bibliographie=&lt;br /&gt;
&lt;br /&gt;
[1] Thèse : Saptarshi Mallick, Physical Layer Detection of Hardware Keyloggers (2014), Logan, Utah : UTAH STATE UNIVERSITY&lt;br /&gt;
http://index-of.es/System-Hacking/Keyloggers/54172d3c0dcc9b71943aa1d4c28fffa65f86.pdf&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80203</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80203"/>
				<updated>2020-01-03T17:20:16Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*Harware&lt;br /&gt;
**Choix des composants principaux : microprocesseur, mémoire&lt;br /&gt;
**alimentation&lt;br /&gt;
**routage&lt;br /&gt;
**liste des composants&lt;br /&gt;
**PCB&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**modifier le programme du microprocesseur pour faire apparaître notre carte comme un périphérique USB spécifique&lt;br /&gt;
**rédiger le programme d'acquisition des touches du clavier par le microprocesseur&lt;br /&gt;
**permettre au PC de lire l'état des touches&lt;br /&gt;
&lt;br /&gt;
*Autre&lt;br /&gt;
**état de l'art pour le Keygrabber&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*- Expression plus précise de notre feuille de route.&lt;br /&gt;
*- Entretien avec les professeurs&lt;br /&gt;
*- Etude de l'état de l'art des Keygrabber&lt;br /&gt;
&lt;br /&gt;
[1] Le Keygrabber ou Keylogger est un outil permettant de détecter et enregistrer l'enfoncement des touches d'un clavier. Il se classifie en deux catégories. Le Keylogger software est un programme s'exécutant sur l'ordinateur de l'hôte. Il nécessite donc d'être installé, contrairement au Keylogger hardware qui est purement matériel et ne dépend pas d'applications.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous nous intéressons ici à ceux hardware. Parmi eux, il existe ceux dits actifs et ceux dits passifs. Le Keylogger actif est placé en série entre l'ordinateur et le clavier. En plus de récupérer l'appui des touches, il doit donc relayer les communications bi-directionnelles sans perte de débit. Il est soit alimenté par le bus de l'interface clavier-ordinateur, soit auto-alimenté.&amp;lt;br&amp;gt;&lt;br /&gt;
Quant à lui, le Keylogger passif est placé en parallèle du bus de communication et ne fait qu'intercepter l'information utile. Il est auto-alimenté.&lt;br /&gt;
&lt;br /&gt;
Notre Keygrabber est donc assimilable à un Keygrabber hardware actif.&lt;br /&gt;
Un tel Keylogger se présente généralement sous la forme d'un périphérique avec deux ports USB, un mâle et une femelle. Le port mâle est donc connecté au PC alors que le clavier est branché au port femelle. La longueur de l'appareil dépend de ses caractéristiques techniques. Il existe aussi des Keylogger permettant la récupération des données via Wifi. La page web suivante donne un aperçu de ce qu'il se fait. &amp;lt;br&amp;gt;&lt;br /&gt;
http://airdrivewifi.com/?page=keyloggers &amp;lt;br&amp;gt;&lt;br /&gt;
Nous observons aussi sur ce même site qu'il existe également un Keylogger sous forme PCB à souder entre le clavier et l'ordinateur. Cela permet une plus grande discrétion car ce PCB est caché sous la coque du clavier et rien n'apparaît.&lt;br /&gt;
&lt;br /&gt;
Notre Keylogger diffère encore de ces derniers. En effet, nous remplaçons directement la carte du clavier. Il y aura donc un unique microprocesseur sur la chaîne de communication. Nous devrons alors traiter des données brutes, venant directement du clavier, et non pas venant d'un microprocesseur gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
* Parmi trois claviers, nous avons choisi celui avec une taille de PCB la plus grande pour être sûr d'avoir la place d'y insérer notre futur PCB.&lt;br /&gt;
* Nous l'avons ouvert et avons étudié sur son fonctionnement global. Les touches du clavier sont reliées à un mappage et à chaque touche est associé un code brut nommé scancode. Chaque clavier à un scancode qui lui est propre. Ce scancode est donc traité par le microprocesseur qui retourne en via l'USB un keycode  universel pour chaque pays.&lt;br /&gt;
&lt;br /&gt;
* Notre clavier se compose d'un mappage de touche composé de 26 pins. Le PCB a une taille de 2,5x13 cm.&lt;br /&gt;
Nous nous demandons alors si les mappages des claviers sont universels afin d'éviter de devoir tester toutes les touches pour comprendre le mappage réalisé.&lt;br /&gt;
&lt;br /&gt;
* Nous avons finalement commencé à réfléchir aux principaux composants nécessaires pour notre PCB : microprocesseur, mémoire Flash, port USB, élément de brochage du mappage au PCB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*A partir de cette séance, nous avons travaillé sur le choix des composants.&lt;br /&gt;
Nous avons donc commencé par réflechir au composant indispensable au notre circuit. Dans un premier temps l'alimentation USB fournira du 5.0V , et une mémoire flash (ou carte SD) est alimenté par du 3.3V .Il nous faut donc un convertisseur de tension 5.0V vers 3.3V.&lt;br /&gt;
Pour le port USB il nous faudra aussi une horloge cadencée à 16 MHz.&lt;br /&gt;
*Le microcontrôleur ATmega16u2 ne semble pas le mieux adapté à notre usage, car il dispose de trop peu de ports (24) alors que notre clavier seul en demande déjà 26.&lt;br /&gt;
Le nombre de ports est aussi trop limité pour les modèles ATmega32u2,16u4 et 32u4.&lt;br /&gt;
Nous avons alors pensé à utiliser des multiplexeurs et démultiplexeurs, mais cela ajoutera un coût et une complexité supplémentaire au projet.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
* Nous nous remettons en question car nous avons manqué de méthode dans la recherche et l'analyse de notre besoin.&lt;br /&gt;
Concernant le microprocesseur, nous sommes partis de ce que nous connaissions (les modèles ATmega) et allions adapter notre projet à ces composants là. Nous avons décidé de mieux analyser les critères de notre besoin.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le microprocesseur, il s'agit d'une compatibilité avec un port USB, avec une mémoire Flash externe. Il doit posséder suffisamment de ports utilisables pour les 26 broches du mappage du clavier et la connexion avec la mémoire Flash. On nous avait conseillé l'utilisation de la bibliothèque LUFA pour gérer le protocole USB : il doit donc être compatible avec cette bibliothèque. Si besoin, nous pourrons chercher d'autres critères de discrimination.&lt;br /&gt;
Pour établir une liste, il s'est avéré pertinent de sélectionner les microcontrôleurs compatibles directement sur le site de LUFA. Les modèles sont les ATmega, les AT90USB, les AT32UC3 et les ATXMEGA.&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont ainsi tous compatibles pour l'USB et ont tous une architecture AVR. Le critère le plus discriminant est maintenant le nombre de ports disponibles pour l'utilisation souhaitée.&lt;br /&gt;
&lt;br /&gt;
*Chaque clavier a en fait son propre mappage.&lt;br /&gt;
Au cours de la séance, nous utilisons une breadboard accompagnée de quelques DEL et d'une carte Arduino afin de déterminer quelles touches correspond à quelles entrées et sorties du mappage. Pour cela, on injecte un courant sur une des broches et on observe sur quelle broche du mappage il est véhiculé lors de l'appui d'une touche. On répète l'opération en pressant chacune des touches et en changeant la broche d'entrée du courant. On peut ainsi créer le scancode de notre clavier.&lt;br /&gt;
Nous avons obtenue le mappage suivant : (mappage non finalisé par manque de temps)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Scan_code.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
A l'aide du site de LUFA et des documentations techniques des différents microcontrôleurs, nous pouvons restreindre notre choix parmi ceux du tableau ci-dessous.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; style=&amp;quot;width:40%;&amp;quot;&lt;br /&gt;
|+ Tableau&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Série&lt;br /&gt;
! scope=col | Modèle&lt;br /&gt;
! scope=col | Nombre de pins utilisables&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT32&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B064&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0128&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0256&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0512&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT90USB&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB646&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB647&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1286&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1287&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
ATXMEGA&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA16A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA32A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Nous utiliseront comme mémoire une mémoire de type flash série car elle nécessite moins de broche.Mais en contre partie il nous faudra sur notre micro-contrôleur 2 SPIs,L'un pour la liaison USB et l'autre pour celle avec la carte mémoire . &lt;br /&gt;
&lt;br /&gt;
*Notre choix de micro-contrôleur c'est donc portée sur ATXMEGA16A4U.&lt;br /&gt;
Car il dispose de 2 SPIs (un sur le port C et l'autre sur le port D ) et gère le mosi et l'usb.&lt;br /&gt;
Il a aussi 34 PORTs I/O et il s’alimente avec une tension comprise entre 1.6 et 3.6 V , donc on pourra programmer la micro-contrôleur en alimentant directement en 3.3 v.&lt;br /&gt;
*Il nous reste donc plus que le choix de la mémoire mais l'on sait que cette mémoire devra avoir une interface de type SPI , non-volatile , travaillant sous une tension de 3.3V et dons la fréquence de travaille est inférieur ou égal à 33MHz.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Avec tout cela de réalisé il nous reste plus qu'à réaliser les plan du PCB , pour cela nous allons nous aider des plans suivants :&lt;br /&gt;
[[Fichier:Atmega-cartesd-pcb.jpg]]&lt;br /&gt;
*exemple de pcb afin de connécter un atmega à une carte SD (tiré du site [https://www.abcelectronique.com/annuaire/montages/microcontrolleurs-atmel.php])&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
=Bibliographie=&lt;br /&gt;
&lt;br /&gt;
[1] Thèse : Saptarshi Mallick, Physical Layer Detection of Hardware Keyloggers (2014), Logan, Utah : UTAH STATE UNIVERSITY&lt;br /&gt;
http://index-of.es/System-Hacking/Keyloggers/54172d3c0dcc9b71943aa1d4c28fffa65f86.pdf&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80202</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80202"/>
				<updated>2020-01-03T17:15:53Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*Harware&lt;br /&gt;
**Choix des composants principaux : microprocesseur, mémoire&lt;br /&gt;
**alimentation&lt;br /&gt;
**routage&lt;br /&gt;
**liste des composants&lt;br /&gt;
**PCB&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**modifier le programme du microprocesseur pour faire apparaître notre carte comme un périphérique USB spécifique&lt;br /&gt;
**rédiger le programme d'acquisition des touches du clavier par le microprocesseur&lt;br /&gt;
**permettre au PC de lire l'état des touches&lt;br /&gt;
&lt;br /&gt;
*Autre&lt;br /&gt;
**état de l'art pour le Keygrabber&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*- Expression plus précise de notre feuille de route.&lt;br /&gt;
*- Entretien avec les professeurs&lt;br /&gt;
*- Etude de l'état de l'art des Keygrabber&lt;br /&gt;
&lt;br /&gt;
[1] Le Keygrabber ou Keylogger est un outil permettant de détecter et enregistrer l'enfoncement des touches d'un clavier. Il se classifie en deux catégories. Le Keylogger software est un programme s'exécutant sur l'ordinateur de l'hôte. Il nécessite donc d'être installé, contrairement au Keylogger hardware qui est purement matériel et ne dépend pas d'applications.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous nous intéressons ici à ceux hardware. Parmi eux, il existe ceux dits actifs et ceux dits passifs. Le Keylogger actif est placé en série entre l'ordinateur et le clavier. En plus de récupérer l'appui des touches, il doit donc relayer les communications bi-directionnelles sans perte de débit. Il est soit alimenté par le bus de l'interface clavier-ordinateur, soit auto-alimenté.&amp;lt;br&amp;gt;&lt;br /&gt;
Quant à lui, le Keylogger passif est placé en parallèle du bus de communication et ne fait qu'intercepter l'information utile. Il est auto-alimenté.&lt;br /&gt;
&lt;br /&gt;
Notre Keygrabber est donc assimilable à un Keygrabber hardware actif.&lt;br /&gt;
Un tel Keylogger se présente généralement sous la forme d'un périphérique avec deux ports USB, un mâle et une femelle. Le port mâle est donc connecté au PC alors que le clavier est branché au port femelle. La longueur de l'appareil dépend de ses caractéristiques techniques. Il existe aussi des Keylogger permettant la récupération des données via Wifi. La page web suivante donne un aperçu de ce qu'il se fait. &amp;lt;br&amp;gt;&lt;br /&gt;
http://airdrivewifi.com/?page=keyloggers &amp;lt;br&amp;gt;&lt;br /&gt;
Nous observons aussi sur ce même site qu'il existe également un Keylogger sous forme PCB à souder entre le clavier et l'ordinateur. Cela permet une plus grande discrétion car ce PCB est caché sous la coque du clavier et rien n'apparaît.&lt;br /&gt;
&lt;br /&gt;
Notre Keylogger diffère encore de ces derniers. En effet, nous remplaçons directement la carte du clavier. Il y aura donc un unique microprocesseur sur la chaîne de communication. Nous devrons alors traiter des données brutes, venant directement du clavier, et non pas venant d'un microprocesseur gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
* Parmi trois claviers, nous avons choisi celui avec une taille de PCB la plus grande pour être sûr d'avoir la place d'y insérer notre futur PCB.&lt;br /&gt;
* Nous l'avons ouvert et avons étudié sur son fonctionnement global. Les touches du clavier sont reliées à un mappage et à chaque touche est associé un code brut nommé scancode. Chaque clavier à un scancode qui lui est propre. Ce scancode est donc traité par le microprocesseur qui retourne en via l'USB un keycode  universel pour chaque pays.&lt;br /&gt;
&lt;br /&gt;
* Notre clavier se compose d'un mappage de touche composé de 26 pins. Le PCB a une taille de 2,5x13 cm.&lt;br /&gt;
Nous nous demandons alors si les mappages des claviers sont universels afin d'éviter de devoir tester toutes les touches pour comprendre le mappage réalisé.&lt;br /&gt;
&lt;br /&gt;
* Nous avons finalement commencé à réfléchir aux principaux composants nécessaires pour notre PCB : microprocesseur, mémoire Flash, port USB, élément de brochage du mappage au PCB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*A partir de cette séance, nous avons travaillé sur le choix des composants.&lt;br /&gt;
Nous avons donc commencé par réflechir au composant indispensable au notre circuit. Dans un premier temps l'alimentation USB fournira du 5.0V , et une mémoire flash (ou carte SD) est alimenté par du 3.3V .Il nous faut donc un convertisseur de tension 5.0V vers 3.3V.&lt;br /&gt;
Pour le port USB il nous faudra aussi une horloge cadencée à 16 MHz.&lt;br /&gt;
*Le microcontrôleur ATmega16u2 ne semble pas le mieux adapté à notre usage, car il dispose de trop peu de ports (24) alors que notre clavier seul en demande déjà 26.&lt;br /&gt;
Le nombre de ports est aussi trop limité pour les modèles ATmega32u2,16u4 et 32u4.&lt;br /&gt;
Nous avons alors pensé à utiliser des multiplexeurs et démultiplexeurs, mais cela ajoutera un coût et une complexité supplémentaire au projet.&lt;br /&gt;
*Nous avons en outre commencé le schéma du PCB avec notamment de quoi réduire la tension d'alimentation de la mémoire de 5V à 3.3V.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
* Nous nous remettons en question car nous avons manqué de méthode dans la recherche et l'analyse de notre besoin.&lt;br /&gt;
Concernant le microprocesseur, nous sommes partis de ce que nous connaissions (les modèles ATmega) et allions adapter notre projet à ces composants là. Nous avons décidé de mieux analyser les critères de notre besoin.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le microprocesseur, il s'agit d'une compatibilité avec un port USB, avec une mémoire Flash externe. Il doit posséder suffisamment de ports utilisables pour les 26 broches du mappage du clavier et la connexion avec la mémoire Flash. On nous avait conseillé l'utilisation de la bibliothèque LUFA pour gérer le protocole USB : il doit donc être compatible avec cette bibliothèque. Si besoin, nous pourrons chercher d'autres critères de discrimination.&lt;br /&gt;
Pour établir une liste, il s'est avéré pertinent de sélectionner les microcontrôleurs compatibles directement sur le site de LUFA. Les modèles sont les ATmega, les AT90USB, les AT32UC3 et les ATXMEGA.&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont ainsi tous compatibles pour l'USB et ont tous une architecture AVR. Le critère le plus discriminant est maintenant le nombre de ports disponibles pour l'utilisation souhaitée.&lt;br /&gt;
&lt;br /&gt;
*Chaque clavier a en fait son propre mappage.&lt;br /&gt;
Au cours de la séance, nous utilisons une breadboard accompagnée de quelques DEL et d'une carte Arduino afin de déterminer quelles touches correspond à quelles entrées et sorties du mappage. Pour cela, on injecte un courant sur une des broches et on observe sur quelle broche du mappage il est véhiculé lors de l'appui d'une touche. On répète l'opération en pressant chacune des touches et en changeant la broche d'entrée du courant. On peut ainsi créer le scancode de notre clavier.&lt;br /&gt;
Nous avons obtenue le mappage suivant : (mappage non finalisé par manque de temps)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Scan_code.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
A l'aide du site de LUFA et des documentations techniques des différents microcontrôleurs, nous pouvons restreindre notre choix parmi ceux du tableau ci-dessous.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; style=&amp;quot;width:40%;&amp;quot;&lt;br /&gt;
|+ Tableau&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Série&lt;br /&gt;
! scope=col | Modèle&lt;br /&gt;
! scope=col | Nombre de pins utilisables&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT32&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B064&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0128&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0256&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0512&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT90USB&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB646&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB647&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1286&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1287&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
ATXMEGA&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA16A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA32A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Nous utiliseront comme mémoire une mémoire de type flash série car elle nécessite moins de broche.Mais en contre partie il nous faudra sur notre micro-contrôleur 2 SPIs,L'un pour la liaison USB et l'autre pour celle avec la carte mémoire . &lt;br /&gt;
&lt;br /&gt;
*Notre choix de micro-contrôleur c'est donc portée sur ATXMEGA16A4U.&lt;br /&gt;
Car il dispose de 2 SPIs (un sur le port C et l'autre sur le port D ) et gère le mosi et l'usb.&lt;br /&gt;
Il a aussi 34 PORTs I/O et il s’alimente avec une tension comprise entre 1.6 et 3.6 V , donc on pourra programmer la micro-contrôleur en alimentant directement en 3.3 v.&lt;br /&gt;
*Il nous reste donc plus que le choix de la mémoire mais l'on sait que cette mémoire devra avoir une interface de type SPI , non-volatile , travaillant sous une tension de 3.3V et dons la fréquence de travaille est inférieur ou égal à 33MHz.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Avec tout cela de réalisé il nous reste plus qu'à réaliser les plan du PCB , pour cela nous allons nous aider des plans suivants :&lt;br /&gt;
[[Fichier:Atmega-cartesd-pcb.jpg]]&lt;br /&gt;
*exemple de pcb afin de connécter un atmega à une carte SD (tiré du site [https://www.abcelectronique.com/annuaire/montages/microcontrolleurs-atmel.php])&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
=Bibliographie=&lt;br /&gt;
&lt;br /&gt;
[1] Thèse : Saptarshi Mallick, Physical Layer Detection of Hardware Keyloggers (2014), Logan, Utah : UTAH STATE UNIVERSITY&lt;br /&gt;
http://index-of.es/System-Hacking/Keyloggers/54172d3c0dcc9b71943aa1d4c28fffa65f86.pdf&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80201</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80201"/>
				<updated>2020-01-03T17:15:11Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*Harware&lt;br /&gt;
**Choix des composants principaux : microprocesseur, mémoire&lt;br /&gt;
**alimentation&lt;br /&gt;
**routage&lt;br /&gt;
**liste des composants&lt;br /&gt;
**PCB&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**modifier le programme du microprocesseur pour faire apparaître notre carte comme un périphérique USB spécifique&lt;br /&gt;
**rédiger le programme d'acquisition des touches du clavier par le microprocesseur&lt;br /&gt;
**permettre au PC de lire l'état des touches&lt;br /&gt;
&lt;br /&gt;
*Autre&lt;br /&gt;
**état de l'art pour le Keygrabber&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*- Expression plus précise de notre feuille de route.&lt;br /&gt;
*- Entretien avec les professeurs&lt;br /&gt;
*- Etude de l'état de l'art des Keygrabber&lt;br /&gt;
&lt;br /&gt;
[1] Le Keygrabber ou Keylogger est un outil permettant de détecter et enregistrer l'enfoncement des touches d'un clavier. Il se classifie en deux catégories. Le Keylogger software est un programme s'exécutant sur l'ordinateur de l'hôte. Il nécessite donc d'être installé, contrairement au Keylogger hardware qui est purement matériel et ne dépend pas d'applications.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous nous intéressons ici à ceux hardware. Parmi eux, il existe ceux dits actifs et ceux dits passifs. Le Keylogger actif est placé en série entre l'ordinateur et le clavier. En plus de récupérer l'appui des touches, il doit donc relayer les communications bi-directionnelles sans perte de débit. Il est soit alimenté par le bus de l'interface clavier-ordinateur, soit auto-alimenté.&amp;lt;br&amp;gt;&lt;br /&gt;
Quant à lui, le Keylogger passif est placé en parallèle du bus de communication et ne fait qu'intercepter l'information utile. Il est auto-alimenté.&lt;br /&gt;
&lt;br /&gt;
Notre Keygrabber est donc assimilable à un Keygrabber hardware actif.&lt;br /&gt;
Un tel Keylogger se présente généralement sous la forme d'un périphérique avec deux ports USB, un mâle et une femelle. Le port mâle est donc connecté au PC alors que le clavier est branché au port femelle. La longueur de l'appareil dépend de ses caractéristiques techniques. Il existe aussi des Keylogger permettant la récupération des données via Wifi. La page web suivante donne un aperçu de ce qu'il se fait. &amp;lt;br&amp;gt;&lt;br /&gt;
http://airdrivewifi.com/?page=keyloggers &amp;lt;br&amp;gt;&lt;br /&gt;
Nous observons aussi sur ce même site qu'il existe également un Keylogger sous forme PCB à souder entre le clavier et l'ordinateur. Cela permet une plus grande discrétion car ce PCB est caché sous la coque du clavier et rien n'apparaît.&lt;br /&gt;
&lt;br /&gt;
Notre Keylogger diffère encore de ces derniers. En effet, nous remplaçons directement la carte du clavier. Il y aura donc un unique microprocesseur sur la chaîne de communication. Nous devrons alors traiter des données brutes, venant directement du clavier, et non pas venant d'un microprocesseur gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
* Parmi trois claviers, nous avons choisi celui avec une taille de PCB la plus grande pour être sûr d'avoir la place d'y insérer notre futur PCB.&lt;br /&gt;
* Nous l'avons ouvert et avons étudié sur son fonctionnement global. Les touches du clavier sont reliées à un mappage et à chaque touche est associé un code brut nommé scancode. Chaque clavier à un scancode qui lui est propre. Ce scancode est donc traité par le microprocesseur qui retourne en via l'USB un keycode  universel pour chaque pays.&lt;br /&gt;
&lt;br /&gt;
* Notre clavier se compose d'un mappage de touche composé de 26 pins. Le PCB a une taille de 2,5x13 cm.&lt;br /&gt;
Nous nous demandons alors si les mappages des claviers sont universels afin d'éviter de devoir tester toutes les touches pour comprendre le mappage réalisé.&lt;br /&gt;
&lt;br /&gt;
* Nous avons finalement commencé à réfléchir aux principaux composants nécessaires pour notre PCB : microprocesseur, mémoire Flash, port USB, élément de brochage du mappage au PCB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*A partir de cette séance, nous avons travaillé sur le choix des composants.&lt;br /&gt;
Nous avons donc commencé par réflechir au composant indispensable au notre circuit. Dans un premier temps l'alimentation USB fournira du 5.0V , et une mémoire flash (ou carte SD) est alimenté par du 3.3V .Il nous faut donc un convertisseur de tension 5.0V vers 3.3V.&lt;br /&gt;
Pour le port USB il nous faudra aussi une horloge cadencée à 16 MHz.&lt;br /&gt;
*Le microcontrôleur ATmega16u2 ne semble pas le mieux adapté à notre usage, car il dispose de trop peu de ports (24) alors que notre clavier seul en demande déjà 26.&lt;br /&gt;
Le nombre de ports est aussi trop limité pour les modèles ATmega32u2,16u4 et 32u4.&lt;br /&gt;
Nous avons alors pensé à utiliser des multiplexeurs et démultiplexeurs, mais cela ajoutera un coût et une complexité supplémentaire au projet.&lt;br /&gt;
*Nous avons en outre commencé le schéma du PCB avec notamment de quoi réduire la tension d'alimentation de la mémoire de 5V à 3.3V.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
* Nous nous remettons en question car nous avons manqué de méthode dans la recherche et l'analyse de notre besoin.&lt;br /&gt;
Concernant le microprocesseur, nous sommes partis de ce que nous connaissions (les modèles ATmega) et allions adapter notre projet à ces composants là. Nous avons décidé de mieux analyser les critères de notre besoin.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le microprocesseur, il s'agit d'une compatibilité avec un port USB, avec une mémoire Flash externe. Il doit posséder suffisamment de ports utilisables pour les 26 broches du mappage du clavier et la connexion avec la mémoire Flash. On nous avait conseillé l'utilisation de la bibliothèque LUFA pour gérer le protocole USB : il doit donc être compatible avec cette bibliothèque. Si besoin, nous pourrons chercher d'autres critères de discrimination.&lt;br /&gt;
Pour établir une liste, il s'est avéré pertinent de sélectionner les microcontrôleurs compatibles directement sur le site de LUFA. Les modèles sont les ATmega, les AT90USB, les AT32UC3 et les ATXMEGA.&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont ainsi tous compatibles pour l'USB et ont tous une architecture AVR. Le critère le plus discriminant est maintenant le nombre de ports disponibles pour l'utilisation souhaitée.&lt;br /&gt;
&lt;br /&gt;
*Chaque clavier a en fait son propre mappage.&lt;br /&gt;
Au cours de la séance, nous utilisons une breadboard accompagnée de quelques DEL et d'une carte Arduino afin de déterminer quelles touches correspond à quelles entrées et sorties du mappage. Pour cela, on injecte un courant sur une des broches et on observe sur quelle broche du mappage il est véhiculé lors de l'appui d'une touche. On répète l'opération en pressant chacune des touches et en changeant la broche d'entrée du courant. On peut ainsi créer le scancode de notre clavier.&lt;br /&gt;
Nous avons obtenue le mappage suivant : (mappage non finalisé par manque de temps)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Scan_code.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
A l'aide du site de LUFA et des documentations techniques des différents microcontrôleurs, nous pouvons restreindre notre choix parmi ceux du tableau ci-dessous.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; style=&amp;quot;width:40%;&amp;quot;&lt;br /&gt;
|+ Tableau&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Série&lt;br /&gt;
! scope=col | Modèle&lt;br /&gt;
! scope=col | Nombre de pins utilisables&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT32&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B064&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0128&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0256&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0512&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT90USB&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB646&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB647&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1286&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1287&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
ATXMEGA&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA16A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA32A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Nous utiliseront comme mémoire une mémoire de type flash série car elle nécessite moins de broche.Mais en contre partie il nous faudra sur notre micro-contrôleur 2 SPIs,L'un pour la liaison USB et l'autre pour celle avec la carte mémoire . &lt;br /&gt;
&lt;br /&gt;
*Notre choix de micro-contrôleur c'est donc portée sur ATXMEGA16A4U.&lt;br /&gt;
Car il dispose de 2 SPIs (un sur le port C et l'autre sur le port D ) et gère le mosi et l'usb.&lt;br /&gt;
Il a aussi 34 PORTs I/O et il s’alimente avec une tension comprise entre 1.6 et 3.6 V , donc on pourra programmer la micro-contrôleur en alimentant directement en 3.3 v.&lt;br /&gt;
*Il nous reste donc plus que le choix de la mémoire mais l'on sait que cette mémoire devra avoir une interface de type SPI , non-volatile , travaillant sous une tension de 3.3V et dons la fréquence de travaille est inférieur ou égal à 33MHz.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Avec tout cela de réalisé il nous reste plus qu'à réaliser les plan du PCB , pour cela nous allons nous aider des plans suivants :&lt;br /&gt;
[[Fichier:Atmega-cartesd-pcb.jpg]]&lt;br /&gt;
exemple de pcb afin de connécter un atmega à une carte SD (tiré du site [https://www.abcelectronique.com/annuaire/montages/microcontrolleurs-atmel.php])&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
=Bibliographie=&lt;br /&gt;
&lt;br /&gt;
[1] Thèse : Saptarshi Mallick, Physical Layer Detection of Hardware Keyloggers (2014), Logan, Utah : UTAH STATE UNIVERSITY&lt;br /&gt;
http://index-of.es/System-Hacking/Keyloggers/54172d3c0dcc9b71943aa1d4c28fffa65f86.pdf&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80194</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80194"/>
				<updated>2020-01-03T14:39:54Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*Harware&lt;br /&gt;
**Choix des composants principaux : microprocesseur, mémoire&lt;br /&gt;
**alimentation&lt;br /&gt;
**routage&lt;br /&gt;
**liste des composants&lt;br /&gt;
**PCB&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**modifier le programme du microprocesseur pour faire apparaître notre carte comme un périphérique USB spécifique&lt;br /&gt;
**rédiger le programme d'acquisition des touches du clavier par le microprocesseur&lt;br /&gt;
**permettre au PC de lire l'état des touches&lt;br /&gt;
&lt;br /&gt;
*Autre&lt;br /&gt;
**état de l'art pour le Keygrabber&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*- Expression plus précise de notre feuille de route.&lt;br /&gt;
*- Entretien avec les professeurs&lt;br /&gt;
*- Etude de l'état de l'art des Keygrabber&lt;br /&gt;
&lt;br /&gt;
[1] Le Keygrabber ou Keylogger est un outil permettant de détecter et enregistrer l'enfoncement des touches d'un clavier. Il se classifie en deux catégories. Le Keylogger software est un programme s'exécutant sur l'ordinateur de l'hôte. Il nécessite donc d'être installé, contrairement au Keylogger hardware qui est purement matériel et ne dépend pas d'applications.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous nous intéressons ici à ceux hardware. Parmi eux, il existe ceux dits actifs et ceux dits passifs. Le Keylogger actif est placé en série entre l'ordinateur et le clavier. En plus de récupérer l'appui des touches, il doit donc relayer les communications bi-directionnelles sans perte de débit. Il est soit alimenté par le bus de l'interface clavier-ordinateur, soit auto-alimenté.&amp;lt;br&amp;gt;&lt;br /&gt;
Quant à lui, le Keylogger passif est placé en parallèle du bus de communication et ne fait qu'intercepter l'information utile. Il est auto-alimenté.&lt;br /&gt;
&lt;br /&gt;
Notre Keygrabber est donc assimilable à un Keygrabber hardware actif.&lt;br /&gt;
Un tel Keylogger se présente généralement sous la forme d'un périphérique avec deux ports USB, un mâle et une femelle. Le port mâle est donc connecté au PC alors que le clavier est branché au port femelle. La longueur de l'appareil dépend de ses caractéristiques techniques. Il existe aussi des Keylogger permettant la récupération des données via Wifi. La page web suivante donne un aperçu de ce qu'il se fait. &amp;lt;br&amp;gt;&lt;br /&gt;
http://airdrivewifi.com/?page=keyloggers &amp;lt;br&amp;gt;&lt;br /&gt;
Nous observons aussi sur ce même site qu'il existe également un Keylogger sous forme PCB à souder entre le clavier et l'ordinateur. Cela permet une plus grande discrétion car ce PCB est caché sous la coque du clavier et rien n'apparaît.&lt;br /&gt;
&lt;br /&gt;
Notre Keylogger diffère encore de ces derniers. En effet, nous remplaçons directement la carte du clavier. Il y aura donc un unique microprocesseur sur la chaîne de communication. Nous devrons alors traiter des données brutes, venant directement du clavier, et non pas venant d'un microprocesseur gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
* Parmi trois claviers, nous avons choisi celui avec une taille de PCB la plus grande pour être sûr d'avoir la place d'y insérer notre futur PCB.&lt;br /&gt;
* Nous l'avons ouvert et avons étudié sur son fonctionnement global. Les touches du clavier sont reliées à un mappage et à chaque touche est associé un code brut nommé scancode. Chaque clavier à un scancode qui lui est propre. Ce scancode est donc traité par le microprocesseur qui retourne en via l'USB un keycode  universel pour chaque pays.&lt;br /&gt;
&lt;br /&gt;
* Notre clavier se compose d'un mappage de touche composé de 26 pins. Le PCB a une taille de 2,5x13 cm.&lt;br /&gt;
Nous nous demandons alors si les mappages des claviers sont universels afin d'éviter de devoir tester toutes les touches pour comprendre le mappage réalisé.&lt;br /&gt;
&lt;br /&gt;
* Nous avons finalement commencé à réfléchir aux principaux composants nécessaires pour notre PCB : microprocesseur, mémoire Flash, port USB, élément de brochage du mappage au PCB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*A partir de cette séance, nous avons travaillé sur le choix des composants.&lt;br /&gt;
Nous avons donc commencé par réflechir au composant indispensable au notre circuit. Dans un premier temps l'alimentation USB fournira du 5.0V , et une mémoire flash (ou carte SD) est alimenté par du 3.3V .Il nous faut donc un convertisseur de tension 5.0V vers 3.3V.&lt;br /&gt;
Pour le port USB il nous faudra aussi une horloge cadencée à 16 MHz.&lt;br /&gt;
*Le microcontrôleur ATmega16u2 ne semble pas le mieux adapté à notre usage, car il dispose de trop peu de ports (24) alors que notre clavier seul en demande déjà 26.&lt;br /&gt;
Le nombre de ports est aussi trop limité pour les modèles ATmega32u2,16u4 et 32u4.&lt;br /&gt;
Nous avons alors pensé à utiliser des multiplexeurs et démultiplexeurs, mais cela ajoutera un coût et une complexité supplémentaire au projet.&lt;br /&gt;
*Nous avons en outre commencé le schéma du PCB avec notamment de quoi réduire la tension d'alimentation de la mémoire de 5V à 3.3V.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
* Nous nous remettons en question car nous avons manqué de méthode dans la recherche et l'analyse de notre besoin.&lt;br /&gt;
Concernant le microprocesseur, nous sommes partis de ce que nous connaissions (les modèles ATmega) et allions adapter notre projet à ces composants là. Nous avons décidé de mieux analyser les critères de notre besoin.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le microprocesseur, il s'agit d'une compatibilité avec un port USB, avec une mémoire Flash externe. Il doit posséder suffisamment de ports utilisables pour les 26 broches du mappage du clavier et la connexion avec la mémoire Flash. On nous avait conseillé l'utilisation de la bibliothèque LUFA pour gérer le protocole USB : il doit donc être compatible avec cette bibliothèque. Si besoin, nous pourrons chercher d'autres critères de discrimination.&lt;br /&gt;
Pour établir une liste, il s'est avéré pertinent de sélectionner les microcontrôleurs compatibles directement sur le site de LUFA. Les modèles sont les ATmega, les AT90USB, les AT32UC3 et les ATXMEGA.&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont ainsi tous compatibles pour l'USB et ont tous une architecture AVR. Le critère le plus discriminant est maintenant le nombre de ports disponibles pour l'utilisation souhaitée.&lt;br /&gt;
&lt;br /&gt;
*Chaque clavier a en fait son propre mappage.&lt;br /&gt;
Au cours de la séance, nous utilisons une breadboard accompagnée de quelques DEL et d'une carte Arduino afin de déterminer quelles touches correspond à quelles entrées et sorties du mappage. Pour cela, on injecte un courant sur une des broches et on observe sur quelle broche du mappage il est véhiculé lors de l'appui d'une touche. On répète l'opération en pressant chacune des touches et en changeant la broche d'entrée du courant. On peut ainsi créer le scancode de notre clavier.&lt;br /&gt;
Nous avons obtenue le mappage suivant : (mappage non finalisé par manque de temps)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Scan_code.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
A l'aide du site de LUFA et des documentations techniques des différents microcontrôleurs, nous pouvons restreindre notre choix parmi ceux du tableau ci-dessous.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; style=&amp;quot;width:40%;&amp;quot;&lt;br /&gt;
|+ Tableau&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Série&lt;br /&gt;
! scope=col | Modèle&lt;br /&gt;
! scope=col | Nombre de pins utilisables&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT32&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B064&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0128&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0256&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0512&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT90USB&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB646&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB647&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1286&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1287&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
ATXMEGA&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA16A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA32A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Nous utiliseront comme mémoire une mémoire de type flash série car elle nécessite moins de broche.Mais en contre partie il nous faudra sur notre micro-contrôleur 2 SPIs,L'un pour la liaison USB et l'autre pour celle avec la carte mémoire . &lt;br /&gt;
&lt;br /&gt;
*Notre choix de micro-contrôleur c'est donc portée sur ATXMEGA16A4U.&lt;br /&gt;
Car il dispose de 2 SPIs (un sur le port C et l'autre sur le port D ) et gère le mosi et l'usb.&lt;br /&gt;
Il a aussi 34 PORTs I/O et il s’alimente avec une tension comprise entre 1.6 et 3.6 V , donc on pourra programmer la micro-contrôleur en alimentant directement en 3.3 v.&lt;br /&gt;
*Il nous reste donc plus que le choix de la mémoire mais l'on sait que cette mémoire devra avoir une interface de type SPI , non-volatile , travaillant sous une tension de 3.3V et dons la fréquence de travaille est inférieur ou égal à 33MHz.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Avec tout cela de réalisé il nous reste plus qu'à réaliser les plan du PCB , pour cela nous allons nous aider des plans suivants :&lt;br /&gt;
[[Fichier:Atmega-cartesd-pcb.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
=Bibliographie=&lt;br /&gt;
&lt;br /&gt;
[1] Thèse : Saptarshi Mallick, Physical Layer Detection of Hardware Keyloggers (2014), Logan, Utah : UTAH STATE UNIVERSITY&lt;br /&gt;
http://index-of.es/System-Hacking/Keyloggers/54172d3c0dcc9b71943aa1d4c28fffa65f86.pdf&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Atmega-cartesd-pcb.jpg&amp;diff=80193</id>
		<title>Fichier:Atmega-cartesd-pcb.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Atmega-cartesd-pcb.jpg&amp;diff=80193"/>
				<updated>2020-01-03T14:39:22Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : image venant du site :
https://www.abcelectronique.com/annuaire/montages/microcontrolleurs-atmel.php
qui nous montre les branchement à réaliser pour relier une carte atmega avec une carte sd.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;image venant du site :&lt;br /&gt;
https://www.abcelectronique.com/annuaire/montages/microcontrolleurs-atmel.php&lt;br /&gt;
qui nous montre les branchement à réaliser pour relier une carte atmega avec une carte sd.&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80192</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80192"/>
				<updated>2020-01-03T14:35:46Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*Harware&lt;br /&gt;
**Choix des composants principaux : microprocesseur, mémoire&lt;br /&gt;
**alimentation&lt;br /&gt;
**routage&lt;br /&gt;
**liste des composants&lt;br /&gt;
**PCB&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**modifier le programme du microprocesseur pour faire apparaître notre carte comme un périphérique USB spécifique&lt;br /&gt;
**rédiger le programme d'acquisition des touches du clavier par le microprocesseur&lt;br /&gt;
**permettre au PC de lire l'état des touches&lt;br /&gt;
&lt;br /&gt;
*Autre&lt;br /&gt;
**état de l'art pour le Keygrabber&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*- Expression plus précise de notre feuille de route.&lt;br /&gt;
*- Entretien avec les professeurs&lt;br /&gt;
*- Etude de l'état de l'art des Keygrabber&lt;br /&gt;
&lt;br /&gt;
[1] Le Keygrabber ou Keylogger est un outil permettant de détecter et enregistrer l'enfoncement des touches d'un clavier. Il se classifie en deux catégories. Le Keylogger software est un programme s'exécutant sur l'ordinateur de l'hôte. Il nécessite donc d'être installé, contrairement au Keylogger hardware qui est purement matériel et ne dépend pas d'applications.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous nous intéressons ici à ceux hardware. Parmi eux, il existe ceux dits actifs et ceux dits passifs. Le Keylogger actif est placé en série entre l'ordinateur et le clavier. En plus de récupérer l'appui des touches, il doit donc relayer les communications bi-directionnelles sans perte de débit. Il est soit alimenté par le bus de l'interface clavier-ordinateur, soit auto-alimenté.&amp;lt;br&amp;gt;&lt;br /&gt;
Quant à lui, le Keylogger passif est placé en parallèle du bus de communication et ne fait qu'intercepter l'information utile. Il est auto-alimenté.&lt;br /&gt;
&lt;br /&gt;
Notre Keygrabber est donc assimilable à un Keygrabber hardware actif.&lt;br /&gt;
Un tel Keylogger se présente généralement sous la forme d'un périphérique avec deux ports USB, un mâle et une femelle. Le port mâle est donc connecté au PC alors que le clavier est branché au port femelle. La longueur de l'appareil dépend de ses caractéristiques techniques. Il existe aussi des Keylogger permettant la récupération des données via Wifi. La page web suivante donne un aperçu de ce qu'il se fait. &amp;lt;br&amp;gt;&lt;br /&gt;
http://airdrivewifi.com/?page=keyloggers &amp;lt;br&amp;gt;&lt;br /&gt;
Nous observons aussi sur ce même site qu'il existe également un Keylogger sous forme PCB à souder entre le clavier et l'ordinateur. Cela permet une plus grande discrétion car ce PCB est caché sous la coque du clavier et rien n'apparaît.&lt;br /&gt;
&lt;br /&gt;
Notre Keylogger diffère encore de ces derniers. En effet, nous remplaçons directement la carte du clavier. Il y aura donc un unique microprocesseur sur la chaîne de communication. Nous devrons alors traiter des données brutes, venant directement du clavier, et non pas venant d'un microprocesseur gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
* Parmi trois claviers, nous avons choisi celui avec une taille de PCB la plus grande pour être sûr d'avoir la place d'y insérer notre futur PCB.&lt;br /&gt;
* Nous l'avons ouvert et avons étudié sur son fonctionnement global. Les touches du clavier sont reliées à un mappage et à chaque touche est associé un code brut nommé scancode. Chaque clavier à un scancode qui lui est propre. Ce scancode est donc traité par le microprocesseur qui retourne en via l'USB un keycode  universel pour chaque pays.&lt;br /&gt;
&lt;br /&gt;
* Notre clavier se compose d'un mappage de touche composé de 26 pins. Le PCB a une taille de 2,5x13 cm.&lt;br /&gt;
Nous nous demandons alors si les mappages des claviers sont universels afin d'éviter de devoir tester toutes les touches pour comprendre le mappage réalisé.&lt;br /&gt;
&lt;br /&gt;
* Nous avons finalement commencé à réfléchir aux principaux composants nécessaires pour notre PCB : microprocesseur, mémoire Flash, port USB, élément de brochage du mappage au PCB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*A partir de cette séance, nous avons travaillé sur le choix des composants.&lt;br /&gt;
Nous avons donc commencé par réflechir au composant indispensable au notre circuit. Dans un premier temps l'alimentation USB fournira du 5.0V , et une mémoire flash (ou carte SD) est alimenté par du 3.3V .Il nous faut donc un convertisseur de tension 5.0V vers 3.3V.&lt;br /&gt;
Pour le port USB il nous faudra aussi une horloge cadencée à 16 MHz.&lt;br /&gt;
*Le microcontrôleur ATmega16u2 ne semble pas le mieux adapté à notre usage, car il dispose de trop peu de ports (24) alors que notre clavier seul en demande déjà 26.&lt;br /&gt;
Le nombre de ports est aussi trop limité pour les modèles ATmega32u2,16u4 et 32u4.&lt;br /&gt;
Nous avons alors pensé à utiliser des multiplexeurs et démultiplexeurs, mais cela ajoutera un coût et une complexité supplémentaire au projet.&lt;br /&gt;
*Nous avons en outre commencé le schéma du PCB avec notamment de quoi réduire la tension d'alimentation de la mémoire de 5V à 3.3V.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
* Nous nous remettons en question car nous avons manqué de méthode dans la recherche et l'analyse de notre besoin.&lt;br /&gt;
Concernant le microprocesseur, nous sommes partis de ce que nous connaissions (les modèles ATmega) et allions adapter notre projet à ces composants là. Nous avons décidé de mieux analyser les critères de notre besoin.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le microprocesseur, il s'agit d'une compatibilité avec un port USB, avec une mémoire Flash externe. Il doit posséder suffisamment de ports utilisables pour les 26 broches du mappage du clavier et la connexion avec la mémoire Flash. On nous avait conseillé l'utilisation de la bibliothèque LUFA pour gérer le protocole USB : il doit donc être compatible avec cette bibliothèque. Si besoin, nous pourrons chercher d'autres critères de discrimination.&lt;br /&gt;
Pour établir une liste, il s'est avéré pertinent de sélectionner les microcontrôleurs compatibles directement sur le site de LUFA. Les modèles sont les ATmega, les AT90USB, les AT32UC3 et les ATXMEGA.&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont ainsi tous compatibles pour l'USB et ont tous une architecture AVR. Le critère le plus discriminant est maintenant le nombre de ports disponibles pour l'utilisation souhaitée.&lt;br /&gt;
&lt;br /&gt;
*Chaque clavier a en fait son propre mappage.&lt;br /&gt;
Au cours de la séance, nous utilisons une breadboard accompagnée de quelques DEL et d'une carte Arduino afin de déterminer quelles touches correspond à quelles entrées et sorties du mappage. Pour cela, on injecte un courant sur une des broches et on observe sur quelle broche du mappage il est véhiculé lors de l'appui d'une touche. On répète l'opération en pressant chacune des touches et en changeant la broche d'entrée du courant. On peut ainsi créer le scancode de notre clavier.&lt;br /&gt;
Nous avons obtenue le mappage suivant : (mappage non finalisé par manque de temps)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Scan_code.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
A l'aide du site de LUFA et des documentations techniques des différents microcontrôleurs, nous pouvons restreindre notre choix parmi ceux du tableau ci-dessous.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; style=&amp;quot;width:40%;&amp;quot;&lt;br /&gt;
|+ Tableau&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Série&lt;br /&gt;
! scope=col | Modèle&lt;br /&gt;
! scope=col | Nombre de pins utilisables&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT32&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B064&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0128&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0256&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0512&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT90USB&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB646&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB647&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1286&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1287&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
ATXMEGA&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA16A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA32A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Nous utiliseront comme mémoire une mémoire de type flash série car elle nécessite moins de broche.Mais en contre partie il nous faudra sur notre micro-contrôleur 2 SPIs,L'un pour la liaison USB et l'autre pour celle avec la carte mémoire . &lt;br /&gt;
&lt;br /&gt;
*Notre choix de micro-contrôleur c'est donc portée sur ATXMEGA16A4U.&lt;br /&gt;
Car il dispose de 2 SPIs (un sur le port C et l'autre sur le port D ) et gère le mosi et l'usb.&lt;br /&gt;
Il a aussi 34 PORTs I/O et il s’alimente avec une tension comprise entre 1.6 et 3.6 V , donc on pourra programmer la micro-contrôleur en alimentant directement en 3.3 v.&lt;br /&gt;
*Il nous reste donc plus que le choix de la mémoire mais l'on sait que cette mémoire devra avoir une interface de type SPI , non-volatile , travaillant sous une tension de 3.3V et dons la fréquence de travaille est inférieur ou égal à 33MHz.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
*Avec tout cela de réalisé il nous reste plus qu'à réaliser les plan du PCB , pour cela nous allons nous aider des plans suivants :&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
=Bibliographie=&lt;br /&gt;
&lt;br /&gt;
[1] Thèse : Saptarshi Mallick, Physical Layer Detection of Hardware Keyloggers (2014), Logan, Utah : UTAH STATE UNIVERSITY&lt;br /&gt;
http://index-of.es/System-Hacking/Keyloggers/54172d3c0dcc9b71943aa1d4c28fffa65f86.pdf&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80191</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80191"/>
				<updated>2020-01-03T14:33:11Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*Harware&lt;br /&gt;
**Choix des composants principaux : microprocesseur, mémoire&lt;br /&gt;
**alimentation&lt;br /&gt;
**routage&lt;br /&gt;
**liste des composants&lt;br /&gt;
**PCB&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**modifier le programme du microprocesseur pour faire apparaître notre carte comme un périphérique USB spécifique&lt;br /&gt;
**rédiger le programme d'acquisition des touches du clavier par le microprocesseur&lt;br /&gt;
**permettre au PC de lire l'état des touches&lt;br /&gt;
&lt;br /&gt;
*Autre&lt;br /&gt;
**état de l'art pour le Keygrabber&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*- Expression plus précise de notre feuille de route.&lt;br /&gt;
*- Entretien avec les professeurs&lt;br /&gt;
*- Etude de l'état de l'art des Keygrabber&lt;br /&gt;
&lt;br /&gt;
[1] Le Keygrabber ou Keylogger est un outil permettant de détecter et enregistrer l'enfoncement des touches d'un clavier. Il se classifie en deux catégories. Le Keylogger software est un programme s'exécutant sur l'ordinateur de l'hôte. Il nécessite donc d'être installé, contrairement au Keylogger hardware qui est purement matériel et ne dépend pas d'applications.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous nous intéressons ici à ceux hardware. Parmi eux, il existe ceux dits actifs et ceux dits passifs. Le Keylogger actif est placé en série entre l'ordinateur et le clavier. En plus de récupérer l'appui des touches, il doit donc relayer les communications bi-directionnelles sans perte de débit. Il est soit alimenté par le bus de l'interface clavier-ordinateur, soit auto-alimenté.&amp;lt;br&amp;gt;&lt;br /&gt;
Quant à lui, le Keylogger passif est placé en parallèle du bus de communication et ne fait qu'intercepter l'information utile. Il est auto-alimenté.&lt;br /&gt;
&lt;br /&gt;
Notre Keygrabber est donc assimilable à un Keygrabber hardware actif.&lt;br /&gt;
Un tel Keylogger se présente généralement sous la forme d'un périphérique avec deux ports USB, un mâle et une femelle. Le port mâle est donc connecté au PC alors que le clavier est branché au port femelle. La longueur de l'appareil dépend de ses caractéristiques techniques. Il existe aussi des Keylogger permettant la récupération des données via Wifi. La page web suivante donne un aperçu de ce qu'il se fait. &amp;lt;br&amp;gt;&lt;br /&gt;
http://airdrivewifi.com/?page=keyloggers &amp;lt;br&amp;gt;&lt;br /&gt;
Nous observons aussi sur ce même site qu'il existe également un Keylogger sous forme PCB à souder entre le clavier et l'ordinateur. Cela permet une plus grande discrétion car ce PCB est caché sous la coque du clavier et rien n'apparaît.&lt;br /&gt;
&lt;br /&gt;
Notre Keylogger diffère encore de ces derniers. En effet, nous remplaçons directement la carte du clavier. Il y aura donc un unique microprocesseur sur la chaîne de communication. Nous devrons alors traiter des données brutes, venant directement du clavier, et non pas venant d'un microprocesseur gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
* Parmi trois claviers, nous avons choisi celui avec une taille de PCB la plus grande pour être sûr d'avoir la place d'y insérer notre futur PCB.&lt;br /&gt;
* Nous l'avons ouvert et avons étudié sur son fonctionnement global. Les touches du clavier sont reliées à un mappage et à chaque touche est associé un code brut nommé scancode. Chaque clavier à un scancode qui lui est propre. Ce scancode est donc traité par le microprocesseur qui retourne en via l'USB un keycode  universel pour chaque pays.&lt;br /&gt;
&lt;br /&gt;
* Notre clavier se compose d'un mappage de touche composé de 26 pins. Le PCB a une taille de 2,5x13 cm.&lt;br /&gt;
Nous nous demandons alors si les mappages des claviers sont universels afin d'éviter de devoir tester toutes les touches pour comprendre le mappage réalisé.&lt;br /&gt;
&lt;br /&gt;
* Nous avons finalement commencé à réfléchir aux principaux composants nécessaires pour notre PCB : microprocesseur, mémoire Flash, port USB, élément de brochage du mappage au PCB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*A partir de cette séance, nous avons travaillé sur le choix des composants.&lt;br /&gt;
Nous avons donc commencé par réflechir au composant indispensable au notre circuit. Dans un premier temps l'alimentation USB fournira du 5.0V , et une mémoire flash (ou carte SD) est alimenté par du 3.3V .Il nous faut donc un convertisseur de tension 5.0V vers 3.3V.&lt;br /&gt;
Pour le port USB il nous faudra aussi une horloge cadencée à 16 MHz.&lt;br /&gt;
*Le microcontrôleur ATmega16u2 ne semble pas le mieux adapté à notre usage, car il dispose de trop peu de ports (24) alors que notre clavier seul en demande déjà 26.&lt;br /&gt;
Le nombre de ports est aussi trop limité pour les modèles ATmega32u2,16u4 et 32u4.&lt;br /&gt;
Nous avons alors pensé à utiliser des multiplexeurs et démultiplexeurs, mais cela ajoutera un coût et une complexité supplémentaire au projet.&lt;br /&gt;
*Nous avons en outre commencé le schéma du PCB avec notamment de quoi réduire la tension d'alimentation de la mémoire de 5V à 3.3V.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
* Nous nous remettons en question car nous avons manqué de méthode dans la recherche et l'analyse de notre besoin.&lt;br /&gt;
Concernant le microprocesseur, nous sommes partis de ce que nous connaissions (les modèles ATmega) et allions adapter notre projet à ces composants là. Nous avons décidé de mieux analyser les critères de notre besoin.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le microprocesseur, il s'agit d'une compatibilité avec un port USB, avec une mémoire Flash externe. Il doit posséder suffisamment de ports utilisables pour les 26 broches du mappage du clavier et la connexion avec la mémoire Flash. On nous avait conseillé l'utilisation de la bibliothèque LUFA pour gérer le protocole USB : il doit donc être compatible avec cette bibliothèque. Si besoin, nous pourrons chercher d'autres critères de discrimination.&lt;br /&gt;
Pour établir une liste, il s'est avéré pertinent de sélectionner les microcontrôleurs compatibles directement sur le site de LUFA. Les modèles sont les ATmega, les AT90USB, les AT32UC3 et les ATXMEGA.&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont ainsi tous compatibles pour l'USB et ont tous une architecture AVR. Le critère le plus discriminant est maintenant le nombre de ports disponibles pour l'utilisation souhaitée.&lt;br /&gt;
&lt;br /&gt;
*Chaque clavier a en fait son propre mappage.&lt;br /&gt;
Au cours de la séance, nous utilisons une breadboard accompagnée de quelques DEL et d'une carte Arduino afin de déterminer quelles touches correspond à quelles entrées et sorties du mappage. Pour cela, on injecte un courant sur une des broches et on observe sur quelle broche du mappage il est véhiculé lors de l'appui d'une touche. On répète l'opération en pressant chacune des touches et en changeant la broche d'entrée du courant. On peut ainsi créer le scancode de notre clavier.&lt;br /&gt;
Nous avons obtenue le mappage suivant : (mappage non finalisé par manque de temps)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Scan_code.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
A l'aide du site de LUFA et des documentations techniques des différents microcontrôleurs, nous pouvons restreindre notre choix parmi ceux du tableau ci-dessous.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; style=&amp;quot;width:40%;&amp;quot;&lt;br /&gt;
|+ Tableau&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Série&lt;br /&gt;
! scope=col | Modèle&lt;br /&gt;
! scope=col | Nombre de pins utilisables&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT32&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B064&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0128&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0256&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0512&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT90USB&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB646&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB647&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1286&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1287&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
ATXMEGA&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA16A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA32A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Nous utiliseront comme mémoire une mémoire de type flash série car elle nécessite moins de broche.Mais en contre partie il nous faudra sur notre micro-contrôleur 2 SPIs,L'un pour la liaison USB et l'autre pour celle avec la carte mémoire . &lt;br /&gt;
&lt;br /&gt;
*Notre choix de micro-contrôleur c'est donc portée sur ATXMEGA16A4U.&lt;br /&gt;
Car il dispose de 2 SPIs (un sur le port C et l'autre sur le port D ) et gère le mosi et l'usb.&lt;br /&gt;
Il a aussi 34 PORTs I/O et il s’alimente avec une tension comprise entre 1.6 et 3.6 V , donc on pourra programmer la micro-contrôleur en alimentant directement en 3.3 v.&lt;br /&gt;
*Il nous reste donc plus que le choix de la mémoire mais l'on sait que cette mémoire devra avoir une interface de type SPI , non-volatile , travaillant sous une tension de 3.3V et dons la fréquence de travaille est inférieur ou égal à 33MHz.&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
=Bibliographie=&lt;br /&gt;
&lt;br /&gt;
[1] Thèse : Saptarshi Mallick, Physical Layer Detection of Hardware Keyloggers (2014), Logan, Utah : UTAH STATE UNIVERSITY&lt;br /&gt;
http://index-of.es/System-Hacking/Keyloggers/54172d3c0dcc9b71943aa1d4c28fffa65f86.pdf&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80190</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80190"/>
				<updated>2020-01-03T14:10:46Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*Harware&lt;br /&gt;
**Choix des composants principaux : microprocesseur, mémoire&lt;br /&gt;
**alimentation&lt;br /&gt;
**routage&lt;br /&gt;
**liste des composants&lt;br /&gt;
**PCB&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**modifier le programme du microprocesseur pour faire apparaître notre carte comme un périphérique USB spécifique&lt;br /&gt;
**rédiger le programme d'acquisition des touches du clavier par le microprocesseur&lt;br /&gt;
**permettre au PC de lire l'état des touches&lt;br /&gt;
&lt;br /&gt;
*Autre&lt;br /&gt;
**état de l'art pour le Keygrabber&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*- Expression plus précise de notre feuille de route.&lt;br /&gt;
*- Entretien avec les professeurs&lt;br /&gt;
*- Etude de l'état de l'art des Keygrabber&lt;br /&gt;
&lt;br /&gt;
[1] Le Keygrabber ou Keylogger est un outil permettant de détecter et enregistrer l'enfoncement des touches d'un clavier. Il se classifie en deux catégories. Le Keylogger software est un programme s'exécutant sur l'ordinateur de l'hôte. Il nécessite donc d'être installé, contrairement au Keylogger hardware qui est purement matériel et ne dépend pas d'applications.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous nous intéressons ici à ceux hardware. Parmi eux, il existe ceux dits actifs et ceux dits passifs. Le Keylogger actif est placé en série entre l'ordinateur et le clavier. En plus de récupérer l'appui des touches, il doit donc relayer les communications bi-directionnelles sans perte de débit. Il est soit alimenté par le bus de l'interface clavier-ordinateur, soit auto-alimenté.&amp;lt;br&amp;gt;&lt;br /&gt;
Quant à lui, le Keylogger passif est placé en parallèle du bus de communication et ne fait qu'intercepter l'information utile. Il est auto-alimenté.&lt;br /&gt;
&lt;br /&gt;
Notre Keygrabber est donc assimilable à un Keygrabber hardware actif.&lt;br /&gt;
Un tel Keylogger se présente généralement sous la forme d'un périphérique avec deux ports USB, un mâle et une femelle. Le port mâle est donc connecté au PC alors que le clavier est branché au port femelle. La longueur de l'appareil dépend de ses caractéristiques techniques. Il existe aussi des Keylogger permettant la récupération des données via Wifi. La page web suivante donne un aperçu de ce qu'il se fait. &amp;lt;br&amp;gt;&lt;br /&gt;
http://airdrivewifi.com/?page=keyloggers &amp;lt;br&amp;gt;&lt;br /&gt;
Nous observons aussi sur ce même site qu'il existe également un Keylogger sous forme PCB à souder entre le clavier et l'ordinateur. Cela permet une plus grande discrétion car ce PCB est caché sous la coque du clavier et rien n'apparaît.&lt;br /&gt;
&lt;br /&gt;
Notre Keylogger diffère encore de ces derniers. En effet, nous remplaçons directement la carte du clavier. Il y aura donc un unique microprocesseur sur la chaîne de communication. Nous devrons alors traiter des données brutes, venant directement du clavier, et non pas venant d'un microprocesseur gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
* Parmi trois claviers, nous avons choisi celui avec une taille de PCB la plus grande pour être sûr d'avoir la place d'y insérer notre futur PCB.&lt;br /&gt;
* Nous l'avons ouvert et avons étudié sur son fonctionnement global. Les touches du clavier sont reliées à un mappage et à chaque touche est associé un code brut nommé scancode. Chaque clavier à un scancode qui lui est propre. Ce scancode est donc traité par le microprocesseur qui retourne en via l'USB un keycode  universel pour chaque pays.&lt;br /&gt;
&lt;br /&gt;
* Notre clavier se compose d'un mappage de touche composé de 26 pins. Le PCB a une taille de 2,5x13 cm.&lt;br /&gt;
Nous nous demandons alors si les mappages des claviers sont universels afin d'éviter de devoir tester toutes les touches pour comprendre le mappage réalisé.&lt;br /&gt;
&lt;br /&gt;
* Nous avons finalement commencé à réfléchir aux principaux composants nécessaires pour notre PCB : microprocesseur, mémoire Flash, port USB, élément de brochage du mappage au PCB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*A partir de cette séance, nous avons travaillé sur le choix des composants.&lt;br /&gt;
Nous avons donc commencé par réflechir au composant indispensable au notre circuit. Dans un premier temps l'alimentation USB fournira du 5.0V , et une mémoire flash (ou carte SD) est alimenté par du 3.3V .Il nous faut donc un convertisseur de tension 5.0V vers 3.3V.&lt;br /&gt;
Pour le port USB il nous faudra aussi une horloge cadencée à 16 MHz.&lt;br /&gt;
*Le microcontrôleur ATmega16u2 ne semble pas le mieux adapté à notre usage, car il dispose de trop peu de ports (24) alors que notre clavier seul en demande déjà 26.&lt;br /&gt;
Le nombre de ports est aussi trop limité pour les modèles ATmega32u2,16u4 et 32u4.&lt;br /&gt;
Nous avons alors pensé à utiliser des multiplexeurs et démultiplexeurs, mais cela ajoutera un coût et une complexité supplémentaire au projet.&lt;br /&gt;
*Nous avons en outre commencé le schéma du PCB avec notamment de quoi réduire la tension d'alimentation de la mémoire de 5V à 3.3V.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
* Nous nous remettons en question car nous avons manqué de méthode dans la recherche et l'analyse de notre besoin.&lt;br /&gt;
Concernant le microprocesseur, nous sommes partis de ce que nous connaissions (les modèles ATmega) et allions adapter notre projet à ces composants là. Nous avons décidé de mieux analyser les critères de notre besoin.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le microprocesseur, il s'agit d'une compatibilité avec un port USB, avec une mémoire Flash externe. Il doit posséder suffisamment de ports utilisables pour les 26 broches du mappage du clavier et la connexion avec la mémoire Flash. On nous avait conseillé l'utilisation de la bibliothèque LUFA pour gérer le protocole USB : il doit donc être compatible avec cette bibliothèque. Si besoin, nous pourrons chercher d'autres critères de discrimination.&lt;br /&gt;
Pour établir une liste, il s'est avéré pertinent de sélectionner les microcontrôleurs compatibles directement sur le site de LUFA. Les modèles sont les ATmega, les AT90USB, les AT32UC3 et les ATXMEGA.&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont ainsi tous compatibles pour l'USB et ont tous une architecture AVR. Le critère le plus discriminant est maintenant le nombre de ports disponibles pour l'utilisation souhaitée.&lt;br /&gt;
&lt;br /&gt;
*Chaque clavier a en fait son propre mappage.&lt;br /&gt;
Au cours de la séance, nous utilisons une breadboard accompagnée de quelques DEL et d'une carte Arduino afin de déterminer quelles touches correspond à quelles entrées et sorties du mappage. Pour cela, on injecte un courant sur une des broches et on observe sur quelle broche du mappage il est véhiculé lors de l'appui d'une touche. On répète l'opération en pressant chacune des touches et en changeant la broche d'entrée du courant. On peut ainsi créer le scancode de notre clavier.&lt;br /&gt;
Nous avons obtenue le mappage suivant : (mappage non finalisé par manque de temps)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Scan_code.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
A l'aide du site de LUFA et des documentations techniques des différents microcontrôleurs, nous pouvons restreindre notre choix parmi ceux du tableau ci-dessous.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; style=&amp;quot;width:40%;&amp;quot;&lt;br /&gt;
|+ Tableau&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Série&lt;br /&gt;
! scope=col | Modèle&lt;br /&gt;
! scope=col | Nombre de pins utilisables&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT32&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B064&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0128&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0256&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0512&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT90USB&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB646&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB647&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1286&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1287&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
ATXMEGA&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA16A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA32A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
=Bibliographie=&lt;br /&gt;
&lt;br /&gt;
[1] Thèse : Saptarshi Mallick, Physical Layer Detection of Hardware Keyloggers (2014), Logan, Utah : UTAH STATE UNIVERSITY&lt;br /&gt;
http://index-of.es/System-Hacking/Keyloggers/54172d3c0dcc9b71943aa1d4c28fffa65f86.pdf&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80084</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=80084"/>
				<updated>2019-12-31T16:37:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
 Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*Harware&lt;br /&gt;
**Choix des composants principaux : microprocesseur, mémoire&lt;br /&gt;
**alimentation&lt;br /&gt;
**routage&lt;br /&gt;
**liste des composants&lt;br /&gt;
**PCB&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*Software&lt;br /&gt;
**modifier le programme du microprocesseur pour faire apparaître notre carte comme un périphérique USB spécifique&lt;br /&gt;
**rédiger le programme d'acquisition des touches du clavier par le microprocesseur&lt;br /&gt;
**permettre au PC de lire l'état des touches&lt;br /&gt;
&lt;br /&gt;
*Autre&lt;br /&gt;
**état de l'art pour le Keygrabber&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*- Expression plus précise de notre feuille de route.&lt;br /&gt;
*- Entretien avec les professeurs&lt;br /&gt;
*- Etude de l'état de l'art des Keygrabber&lt;br /&gt;
&lt;br /&gt;
[1] Le Keygrabber ou Keylogger est un outil permettant de détecter et enregistrer l'enfoncement des touches d'un clavier. Il se classifie en deux catégories. Le Keylogger software est un programme s'exécutant sur l'ordinateur de l'hôte. Il nécessite donc d'être installé, contrairement au Keylogger hardware qui est purement matériel et ne dépend pas d'applications.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous nous intéressons ici à ceux hardware. Parmi eux, il existe ceux dits actifs et ceux dits passifs. Le Keylogger actif est placé en série entre l'ordinateur et le clavier. En plus de récupérer l'appui des touches, il doit donc relayer les communications bi-directionnelles sans perte de débit. Il est soit alimenté par le bus de l'interface clavier-ordinateur, soit auto-alimenté.&amp;lt;br&amp;gt;&lt;br /&gt;
Quant à lui, le Keylogger passif est placé en parallèle du bus de communication et ne fait qu'intercepter l'information utile. Il est auto-alimenté.&lt;br /&gt;
&lt;br /&gt;
Notre Keygrabber est donc assimilable à un Keygrabber hardware actif.&lt;br /&gt;
Un tel Keylogger se présente généralement sous la forme d'un périphérique avec deux ports USB, un mâle et une femelle. Le port mâle est donc connecté au PC alors que le clavier est branché au port femelle. La longueur de l'appareil dépend de ses caractéristiques techniques. Il existe aussi des Keylogger permettant la récupération des données via Wifi. La page web suivante donne un aperçu de ce qu'il se fait. &amp;lt;br&amp;gt;&lt;br /&gt;
http://airdrivewifi.com/?page=keyloggers &amp;lt;br&amp;gt;&lt;br /&gt;
Nous observons aussi sur ce même site qu'il existe également un Keylogger sous forme PCB à souder entre le clavier et l'ordinateur. Cela permet une plus grande discrétion car ce PCB est caché sous la coque du clavier et rien n'apparaît.&lt;br /&gt;
&lt;br /&gt;
Notre Keylogger diffère encore de ces derniers. En effet, nous remplaçons directement la carte du clavier. Il y aura donc un unique microprocesseur sur la chaîne de communication. Nous devrons alors traiter des données brutes, venant directement du clavier, et non pas venant d'un microprocesseur gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
* Parmi trois claviers, nous avons choisi celui avec une taille de PCB la plus grande pour être sûr d'avoir la place d'y insérer notre futur PCB.&lt;br /&gt;
* Nous l'avons ouvert et avons étudié sur son fonctionnement global. Les touches du clavier sont reliées à un mappage et à chaque touche est associé un code brut nommé scancode. Chaque clavier à un scancode qui lui est propre. Ce scancode est donc traité par le microprocesseur qui retourne en via l'USB un keycode  universel pour chaque pays.&lt;br /&gt;
&lt;br /&gt;
* Notre clavier se compose d'un mappage de touche composé de 26 pins. Le PCB a une taille de 2,5x13 cm.&lt;br /&gt;
Nous nous demandons alors si les mappages des claviers sont universels afin d'éviter de devoir tester toutes les touches pour comprendre le mappage réalisé.&lt;br /&gt;
&lt;br /&gt;
* Nous avons finalement commencé à réfléchir aux principaux composants nécessaires pour notre PCB : microprocesseur, mémoire Flash, port USB, élément de brochage du mappage au PCB.&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*A partir de cette séance, nous avons travaillé sur le choix des composants.&lt;br /&gt;
Nous avons lu les datasheet afin de connaitre les composants secondaires actifs et passifs nécessaires.&lt;br /&gt;
*Le microcontrôleur ATmega16u2 ne semble pas le mieux adapté à notre usage, car il dispose de trop peu de ports (24) alors que notre clavier seul en demande déjà 26.&lt;br /&gt;
Le nombre de ports est aussi trop limité pour les modèles ATmega32u2,16u4 et 32u4.&lt;br /&gt;
Nous avons alors pensé à utiliser des multiplexeurs et démultiplexeurs, mais cela ajoutera un coût et une complexité supplémentaire au projet.&lt;br /&gt;
*Nous avons en outre commencé le schéma du PCB avec notamment de quoi réduire la tension d'alimentation de la mémoire de 5V à 3.3V.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
* Nous nous remettons en question car nous avons manqué de méthode dans la recherche et l'analyse de notre besoin.&lt;br /&gt;
Concernant le microprocesseur, nous sommes partis de ce que nous connaissions (les modèles ATmega) et allions adapter notre projet à ces composants là. Nous avons décidé de mieux analyser les critères de notre besoin.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le microprocesseur, il s'agit d'une compatibilité avec un port USB, avec une mémoire Flash externe. Il doit posséder suffisamment de ports utilisables pour les 26 broches du mappage du clavier et la connexion avec la mémoire Flash. On nous avait conseillé l'utilisation de la bibliothèque LUFA pour gérer le protocole USB : il doit donc être compatible avec cette bibliothèque. Si besoin, nous pourrons chercher d'autres critères de discrimination.&lt;br /&gt;
Pour établir une liste, il s'est avéré pertinent de sélectionner les microcontrôleurs compatibles directement sur le site de LUFA. Les modèles sont les ATmega, les AT90USB, les AT32UC3 et les ATXMEGA.&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont ainsi tous compatibles pour l'USB et ont tous une architecture AVR. Le critère le plus discriminant est maintenant le nombre de ports disponibles pour l'utilisation souhaitée.&lt;br /&gt;
&lt;br /&gt;
*Chaque clavier a en fait son propre mappage.&lt;br /&gt;
Au cours de la séance, nous utilisons une breadboard accompagnée de quelques DEL et d'une carte Arduino afin de déterminer quelles touches correspond à quelles entrées et sorties du mappage. Pour cela, on injecte un courant sur une des broches et on observe sur quelle broche du mappage il est véhiculé lors de l'appui d'une touche. On répète l'opération en pressant chacune des touches et en changeant la broche d'entrée du courant. On peut ainsi créer le scancode de notre clavier.&lt;br /&gt;
Nous avons obtenue le mappage suivant : (mappage non finalisé par manque de temps)&lt;br /&gt;
[[Fichier:Scan_code.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
A l'aide du site de LUFA et des documentations techniques des différents microcontrôleurs, nous pouvons restreindre notre choix parmi ceux du tableau ci-dessous.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable centre&amp;quot; style=&amp;quot;width:40%;&amp;quot;&lt;br /&gt;
|+ Tableau&lt;br /&gt;
|-&lt;br /&gt;
! scope=col | Série&lt;br /&gt;
! scope=col | Modèle&lt;br /&gt;
! scope=col | Nombre de pins utilisables&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT32&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B064&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0128&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0256&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT32UC3B0512&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
44&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
AT90USB&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB646&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB647&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1286&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
AT90USB1287&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
46&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:6%;&amp;quot;  rowspan=&amp;quot;4&amp;quot; |&lt;br /&gt;
ATXMEGA&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA16A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA32A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
ATXMEGA64A4U&lt;br /&gt;
| style=&amp;quot;width:10%;&amp;quot; |&lt;br /&gt;
32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
=Bibliographie=&lt;br /&gt;
&lt;br /&gt;
[1] Thèse : Saptarshi Mallick, Physical Layer Detection of Hardware Keyloggers (2014), Logan, Utah : UTAH STATE UNIVERSITY&lt;br /&gt;
http://index-of.es/System-Hacking/Keyloggers/54172d3c0dcc9b71943aa1d4c28fffa65f86.pdf&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Scan_code.jpg&amp;diff=80083</id>
		<title>Fichier:Scan code.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Scan_code.jpg&amp;diff=80083"/>
				<updated>2019-12-31T16:36:44Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : scan code non complet du clavier&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;scan code non complet du clavier&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79718</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79718"/>
				<updated>2019-12-12T17:10:35Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
 Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*harware&lt;br /&gt;
**PCB&lt;br /&gt;
**routage&lt;br /&gt;
**alimentation&lt;br /&gt;
**composants&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*software&lt;br /&gt;
**décrire l'architecture pour utiliser la bibliothèque LUFA&lt;br /&gt;
**rédiger le programme&lt;br /&gt;
&lt;br /&gt;
*autres&lt;br /&gt;
**état de l'art pour le keygrabber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*-expression plus précise de notre feuille de route.&lt;br /&gt;
*-Entretien avec les professeurs&lt;br /&gt;
*-Etude de l'état de l'art autour du keygraber :&lt;br /&gt;
http://www.keelog.com/wireless-keylogger/ &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.keelog.com/diy-hardware-keylogger/&lt;br /&gt;
On sait maintenant que 2 choix s'offre à nous pour la méthode de récupération des donnée.&lt;br /&gt;
La première en 'série' , on envoie les données envoyé par le microcontrôleur usb du clavier vers le keygrabbr puis on en fait une sauvegarde et on et les renvoient.&lt;br /&gt;
La seconde dite en parallèle consiste quand à elle récupérer les donnée passante du clavier et la les enregistrer.&lt;br /&gt;
Les 2 liens au-dessus nous montre l'intégralité du fonctionnement de keygraber en parallèle.&lt;br /&gt;
Notre projet différent encore de des 2 type de keygraber trouvé , car nous allons allons traiter des données brut venant du clavier ,et non pas venant d'un microprocesseur gérant le protocole usb.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Dissection d'un clavier , et étude sur son fonctionnement global.Les touches du clavier sont relié à un mappage.Une touche pressé correspond à un code brut nommé scancode , chaque clavier à un scancode qui lui est propre.Ce scancod est donc traité par le microprocesseur qui lui retourne en usb un keycode qui est lui universel pour chaque pays.&lt;br /&gt;
*Notre clavier se compose d'un mappage de touche composé de 26 pins , taille du PCB 2,5 cm * 13 cm.&lt;br /&gt;
*Problème retenu : &lt;br /&gt;
** problème de mappage des touches (est-ce que ce mappage est universalisé ?)&lt;br /&gt;
*Lecture et prémisse des composants principaux à utiliser&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*choix plus précis des composants qui vont être utilisés et lecture de leurs datasheet afin de connaitre les composants secondaire actif et passif nécessaire.&lt;br /&gt;
*Le microcontrôleur ATmega16u2 ne semble pas le mieux adapté à notre usage , car il dispose de peut de port (24) .Alors que seul notre clavier nous en demande déjà 16.&lt;br /&gt;
Nous avons alors pensé à utiliser des multiplexeur , mais cela ajoutera un coût et une complexité supplémentaire au projet.&lt;br /&gt;
*Nous avons donc commencé le schéma du pcb avec les composants qui seront essentiel (passage de 5v à 3.3v ...).&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Création du scan code de notre clavier à l'aide d'une braidboard et des LED.&lt;br /&gt;
**Création d'un liste de microcontrôleur correspond à nos attentes&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79717</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79717"/>
				<updated>2019-12-12T17:08:52Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
 Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*harware&lt;br /&gt;
**PCB&lt;br /&gt;
**routage&lt;br /&gt;
**alimentation&lt;br /&gt;
**composants&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*software&lt;br /&gt;
**décrire l'architecture pour utiliser la bibliothèque LUFA&lt;br /&gt;
**rédiger le programme&lt;br /&gt;
&lt;br /&gt;
*autres&lt;br /&gt;
**état de l'art pour le keygrabber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*-expression plus précise de notre feuille de route.&lt;br /&gt;
*-Entretien avec les professeurs&lt;br /&gt;
*-Etude de l'état de l'art autour du keygraber :&lt;br /&gt;
http://www.keelog.com/wireless-keylogger/ &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.keelog.com/diy-hardware-keylogger/&lt;br /&gt;
On sait maintenant que 2 choix s'offre à nous pour la méthode de récupération des donnée.&lt;br /&gt;
La première en 'série' , on envoie les données envoyé par le microcontrôleur usb du clavier vers le keygrabbr puis on en fait une sauvegarde et on et les renvoient.&lt;br /&gt;
La seconde dite en parallèle consiste quand à elle récupérer les donnée passante du clavier et la les enregistrer.&lt;br /&gt;
Les 2 liens au-dessus nous montre l'intégralité du fonctionnement de keygraber en parallèle.&lt;br /&gt;
Notre projet différent encore de des 2 type de keygraber trouvé , car nous allons allons traiter des données brut venant du clavier ,et non pas venant d'un microprocesseur gérant le protocole usb.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Dissection d'un clavier , et étude sur son fonctionnement global.Les touches du clavier sont relié à un mappage.Une touche pressé correspond à un code brut nommé scancode , chaque clavier à un scancode qui lui est propre.Ce scancod est donc traité par le microprocesseur qui lui retourne en usb un keycode qui est lui universel pour chaque pays.&lt;br /&gt;
*Notre clavier se compose d'un mappage de touche composé de 26 pins , taille du PCB 2,5 cm * 13 cm.&lt;br /&gt;
*Problème retenu : &lt;br /&gt;
** problème de mappage des touches (est-ce que ce mappage est universalisé ?)&lt;br /&gt;
*Lecture et prémisse des composants principaux à utiliser&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*choix plus précis des composants qui vont être utilisés et lecture de leurs datasheet afin de connaitre les composants secondaire actif et passif nécessaire.&lt;br /&gt;
*Le microcontrôleur ATmega16u2 ne semble pas le mieux adapté à notre usage , car il dispose de peut de port (24) .Alors que seul notre clavier nous en demande déjà 16.&lt;br /&gt;
Nous avons alors pensé à utiliser des multiplexeur , mais cela ajoutera un coût et une complexité supplémentaire au projet.&lt;br /&gt;
*Nous avons donc commencé le schéma du pcb avec les composants qui seront essentiel (passage de 5v à 3.3v ...).&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79715</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79715"/>
				<updated>2019-12-12T17:02:27Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
 Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*harware&lt;br /&gt;
**PCB&lt;br /&gt;
**routage&lt;br /&gt;
**alimentation&lt;br /&gt;
**composants&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*software&lt;br /&gt;
**décrire l'architecture pour utiliser la bibliothèque LUFA&lt;br /&gt;
**rédiger le programme&lt;br /&gt;
&lt;br /&gt;
*autres&lt;br /&gt;
**état de l'art pour le keygrabber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*-expression plus précise de notre feuille de route.&lt;br /&gt;
*-Entretien avec les professeurs&lt;br /&gt;
*-Etude de l'état de l'art autour du keygraber :&lt;br /&gt;
http://www.keelog.com/wireless-keylogger/ &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.keelog.com/diy-hardware-keylogger/&lt;br /&gt;
On sait maintenant que 2 choix s'offre à nous pour la méthode de récupération des donnée.&lt;br /&gt;
La première en 'série' , on envoie les données envoyé par le microcontrôleur usb du clavier vers le keygrabbr puis on en fait une sauvegarde et on et les renvoient.&lt;br /&gt;
La seconde dite en parallèle consiste quand à elle récupérer les donnée passante du clavier et la les enregistrer.&lt;br /&gt;
Les 2 liens au-dessus nous montre l'intégralité du fonctionnement de keygraber en parallèle.&lt;br /&gt;
Notre projet différent encore de des 2 type de keygraber trouvé , car nous allons allons traiter des données brut venant du clavier ,et non pas venant d'un microprocesseur gérant le protocole usb.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Dissection d'un clavier , et étude sur son fonctionnement global.Les touches du clavier sont relié à un mappage.Une touche pressé correspond à un code brut nommé scancode , chaque clavier à un scancode qui lui est propre.Ce scancod est donc traité par le microprocesseur qui lui retourne en usb un keycode qui est lui universel pour chaque pays.&lt;br /&gt;
*Notre clavier se compose d'un mappage de touche composé de 26 pins , taille du PCB 2,5 cm * 13 cm.&lt;br /&gt;
*Problème retenu : &lt;br /&gt;
** problème de mappage des touches (est-ce que ce mappage est universalisé ?)&lt;br /&gt;
*Lecture et prémisse des composants principaux à utiliser&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*choix plus précis des composants qui vont être utilisés et lecture de leurs datasheet afin de connaitre les composants secondaire actif et passif nécessaire.&lt;br /&gt;
*Choix:&lt;br /&gt;
**micro-processeur : ATMEGA32U4&lt;br /&gt;
**carte mémoire : mémoire flash&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79714</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79714"/>
				<updated>2019-12-12T16:59:00Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
 Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*harware&lt;br /&gt;
**PCB&lt;br /&gt;
**routage&lt;br /&gt;
**alimentation&lt;br /&gt;
**composants&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*software&lt;br /&gt;
**décrire l'architecture pour utiliser la bibliothèque LUFA&lt;br /&gt;
**rédiger le programme&lt;br /&gt;
&lt;br /&gt;
*autres&lt;br /&gt;
**état de l'art pour le keygrabber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*-expression plus précise de notre feuille de route.&lt;br /&gt;
*-Entretien avec les professeurs&lt;br /&gt;
*-Etude de l'état de l'art autour du keygraber :&lt;br /&gt;
http://www.keelog.com/wireless-keylogger/ &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.keelog.com/diy-hardware-keylogger/&lt;br /&gt;
On sait maintenant que 2 choix s'offre à nous pour la méthode de récupération des donnée.&lt;br /&gt;
La première en 'série' , on envoie les données envoyé par le microcontrôleur usb du clavier vers le keygrabbr puis on en fait une sauvegarde et on et les renvoient.&lt;br /&gt;
La seconde dite en parallèle consiste quand à elle récupérer les donnée passante du clavier et la les enregistrer.&lt;br /&gt;
Les 2 liens au-dessus nous montre l'intégralité du fonctionnement de keygraber en parallèle.&lt;br /&gt;
Notre projet différent encore de des 2 type de keygraber trouvé , car nous allons allons traiter des données brut venant du clavier ,et non pas venant d'un microprocesseur gérant le protocole usb.&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Dissection d'un clavier , et étude sur son fonctionnement global.Les touches du clavier sont relié à un mappage .&lt;br /&gt;
*Notre clavier se compose d'un mappage de touche composé de 26 pins , taille du PCB 2,5 cm * 13 cm.&lt;br /&gt;
*Problème retenu : &lt;br /&gt;
** problème de mappage des touches (est-ce que ce mappage est universalisé ?)&lt;br /&gt;
*Lecture et prémisse des composants principaux à utiliser&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*choix plus précis des composants qui vont être utilisés et lecture de leurs datasheet afin de connaitre les composants secondaire actif et passif nécessaire.&lt;br /&gt;
*Choix:&lt;br /&gt;
**micro-processeur : ATMEGA32U4&lt;br /&gt;
**carte mémoire : mémoire flash&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79217</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79217"/>
				<updated>2019-11-21T14:50:06Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
 Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*harware&lt;br /&gt;
**PCB&lt;br /&gt;
**routage&lt;br /&gt;
**alimentation&lt;br /&gt;
**composants&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*software&lt;br /&gt;
**décrire l'architecture pour utiliser la bibliothèque LUFA&lt;br /&gt;
**rédiger le programme&lt;br /&gt;
&lt;br /&gt;
*autres&lt;br /&gt;
**état de l'art pour le keygrabber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*-expression plus précise de notre feuille de route.&lt;br /&gt;
*-Entretient avec les professeurs&lt;br /&gt;
*-Etude de l'état de l'art autour du keygraber :&lt;br /&gt;
http://www.keelog.com/wireless-keylogger/&lt;br /&gt;
http://www.keelog.com/diy-hardware-keylogger/&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Dissection d'un clavier , et étude sur son fonctionnement global.Les touches du clavier sont relié à un mappage .&lt;br /&gt;
*Notre clavier se compose d'un mappage de touche composé de 26 pins , taille du pcb 2,5 cm * 13 cm.&lt;br /&gt;
*Problème retenue : &lt;br /&gt;
** problème de mappage des touches (est-ce que ce mappage est universalisé)&lt;br /&gt;
*Lecture et prémisse des composant principaux à utiliser&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*choix plus précis des composants qui vont être utilisés et lecture de leurs datasheet afin de connaitre les composants secondaire actif et passif nécessaire.&lt;br /&gt;
*Choix:&lt;br /&gt;
**micro-processeur : ATMEGA32U4&lt;br /&gt;
**carte mémoire : mémoire flash&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79215</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79215"/>
				<updated>2019-11-21T14:32:38Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
 Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*harware&lt;br /&gt;
**PCB&lt;br /&gt;
**routage&lt;br /&gt;
**alimentation&lt;br /&gt;
**composants&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*software&lt;br /&gt;
**décrire l'architecture pour utiliser la bibliothèque LUFA&lt;br /&gt;
**rédiger le programme&lt;br /&gt;
&lt;br /&gt;
*autres&lt;br /&gt;
**état de l'art pour le keygrabber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*-expression plus précise de notre feuille de route.&lt;br /&gt;
*-Entretient avec les professeurs&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Dissection d'un clavier , et étude sur son fonctionnement global.Les touches du clavier sont relié à un mappage .&lt;br /&gt;
*Notre clavier se compose d'un mappage de touche composé de 26 pins , taille du pcb 2,5 cm * 13 cm.&lt;br /&gt;
*Problème retenue : &lt;br /&gt;
** problème de mappage des touches (est-ce que ce mappage est universalisé)&lt;br /&gt;
*Lecture et prémisse des composant principaux à utiliser&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*choix plus précis des composants qui vont être utilisés et lecture de leurs datasheet afin de connaitre les composants secondaire actif et passif nécessaire.&lt;br /&gt;
*Choix:&lt;br /&gt;
**micro-processeur : ATMEGA32U4&lt;br /&gt;
**carte mémoire : mémoire flash&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79213</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79213"/>
				<updated>2019-11-21T14:07:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
 Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*harware&lt;br /&gt;
**PCB&lt;br /&gt;
**routage&lt;br /&gt;
**alimentation&lt;br /&gt;
**composants&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*software&lt;br /&gt;
**décrire l'architecture pour utiliser la bibliothèque LUFA&lt;br /&gt;
**rédiger le programme&lt;br /&gt;
&lt;br /&gt;
*autres&lt;br /&gt;
**état de l'art pour le keygrabber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*-expression plus précise de notre feuille de route.&lt;br /&gt;
*-Entretient avec les professeurs&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Dissection d'un clavier , et étude sur son fonctionnement global.Les touches du clavier sont relié à un mappage .&lt;br /&gt;
*Notre clavier se compose d'un mappage de touche composé de 26 pins , taille du pcb 2,5 cm * 13 cm.&lt;br /&gt;
*Problème retenue : &lt;br /&gt;
** problème de mappage des touches (est-ce que ce mappage est universalisé)&lt;br /&gt;
*Lecture et prémisse des composant principaux à utiliser&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
*choix plus précis des composants qui vont être utilisés et lecture de leurs datasheet afin de connaitre les composants secondaire actif et passif nécessaire.&lt;br /&gt;
*Choix:&lt;br /&gt;
**micro-processeur : ATMEGA32U2&lt;br /&gt;
**carte mémoire : mémoire flash&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79212</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79212"/>
				<updated>2019-11-21T14:04:13Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
 Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*harware&lt;br /&gt;
**PCB&lt;br /&gt;
**routage&lt;br /&gt;
**alimentation&lt;br /&gt;
**composants&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*software&lt;br /&gt;
**décrire l'architecture pour utiliser la bibliothèque LUFA&lt;br /&gt;
**rédiger le programme&lt;br /&gt;
&lt;br /&gt;
*autres&lt;br /&gt;
**état de l'art pour le keygrabber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*-expression plus précise de notre feuille de route.&lt;br /&gt;
*-Entretient avec les professeurs&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Dissection d'un clavier , et étude sur son fonctionnement global.Les touches du clavier sont relié à un mappage .&lt;br /&gt;
*Notre clavier se compose d'un mappage de touche composé de 26 pins , taille du pcb 2,5 cm * 13 cm.&lt;br /&gt;
*Problème retenue : &lt;br /&gt;
** problème de mappage des touches (est-ce que ce mappage est universalisé)&lt;br /&gt;
*Lecture et prémisse des composant principaux à utiliser&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79211</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79211"/>
				<updated>2019-11-21T13:58:22Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
 Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*harware&lt;br /&gt;
**PCB&lt;br /&gt;
**routage&lt;br /&gt;
**alimentation&lt;br /&gt;
**composants&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*software&lt;br /&gt;
**décrire l'architecture pour utiliser la bibliothèque LUFA&lt;br /&gt;
**rédiger le programme&lt;br /&gt;
&lt;br /&gt;
*autres&lt;br /&gt;
**état de l'art pour le keygrabber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*-expression plus précise de notre feuille de route.&lt;br /&gt;
*-Entretient avec les professeurs&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
*Dissection d'un clavier , et étude sur son fonctionnement global .&lt;br /&gt;
*Notre clavier se compose d'un mappage de touche composé de 26 pins , taille du pcb 2,5 cm * 13 cm.&lt;br /&gt;
*Problème retenue : &lt;br /&gt;
** problème de mappage des touches (est-ce que ce mappage est universalisé)&lt;br /&gt;
&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79210</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79210"/>
				<updated>2019-11-21T13:52:01Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
 Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*harware&lt;br /&gt;
**PCB&lt;br /&gt;
**routage&lt;br /&gt;
**alimentation&lt;br /&gt;
**composants&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*software&lt;br /&gt;
**décrire l'architecture pour utiliser la bibliothèque LUFA&lt;br /&gt;
**rédiger le programme&lt;br /&gt;
&lt;br /&gt;
*autres&lt;br /&gt;
**état de l'art pour le keygrabber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
*-expression plus précise de notre feuille de route.&lt;br /&gt;
*-Entretient avec les professeurs&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79209</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79209"/>
				<updated>2019-11-21T13:51:44Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
 Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*harware&lt;br /&gt;
**PCB&lt;br /&gt;
**routage&lt;br /&gt;
**alimentation&lt;br /&gt;
**composants&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*software&lt;br /&gt;
**décrire l'architecture pour utiliser la bibliothèque LUFA&lt;br /&gt;
**rédiger le programme&lt;br /&gt;
&lt;br /&gt;
*autres&lt;br /&gt;
**état de l'art pour le keygrabber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
-expression plus précise de notre feuille de route.&lt;br /&gt;
*-Entretient avec les professeurs&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79208</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=79208"/>
				<updated>2019-11-21T13:50:50Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/pimasc/include/video-PeripheriqueUSBIMA32018-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|USB Rubber Ducky]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
Liens concernants les concurrents &lt;br /&gt;
*du clavier :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&amp;lt;br&amp;gt;&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*de la clé&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société : hak5&amp;lt;br&amp;gt;&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici des documentations pour Arduino :&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/en/Tutorial/CharacterAnalysis&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les liens suivant concernent la bibliothèque LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introduction à LUFA:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.engineersgarage.com/article/introduction-lufa&lt;br /&gt;
&lt;br /&gt;
Résumé de la bibliothèque LUFA par M. REDON:&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Systeme.IMA4/&lt;br /&gt;
&lt;br /&gt;
Un projet IMA4 : Exemple dans laquelle une carte est reconnue en tant que souris à l'aide de LUFA&amp;lt;br&amp;gt;&lt;br /&gt;
https://projets-ima.plil.fr/mediawiki/index.php/IMA4_2016/2017_ECP3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enfin, les liens suivants permettent une meilleure compréhension du protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protocole USB par Bernard ACQUIER&lt;br /&gt;
http://www.abcelectronique.com/acquier/usb.html&lt;br /&gt;
&lt;br /&gt;
USB : classe HID (Human Interface Device):&lt;br /&gt;
http://www.rennes.supelec.fr/ren/fi/elec/docs/usb/hid.html&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
* Objectif S6 : prototypes en Arduino.&lt;br /&gt;
* Objectif final : ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
* Côté réalisation des prototype&lt;br /&gt;
** Hardware : réaliser un hardware qui permette d'avoir un prototype fonctionnel.&lt;br /&gt;
** Software : réaliser du code qui permette de faire fonctionné comme il se doit le prototype.&lt;br /&gt;
&lt;br /&gt;
* Côté documentation&lt;br /&gt;
** Maîtriser le protocole USB&lt;br /&gt;
** Maîtriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
&lt;br /&gt;
*Protocole USB : Semestres 6 et 7&lt;br /&gt;
*Bibliothèque LUFA (compréhension et configuration) : Semestres 6 à 7&lt;br /&gt;
*Maquettes Arduino : Semestre 6&lt;br /&gt;
*Modélisation des PCB et des coques (clavier et clé) : Semestre 7&lt;br /&gt;
*Rédaction du code : Semestre 7 et 8&lt;br /&gt;
*Montage des périphériques : Semestres 7 et 8&lt;br /&gt;
*Implémentation : Semestre 8&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*Nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposeront d'un dispositif de stockage.&lt;br /&gt;
*Recherche des instructions pour le téléchargement et l'ouverture d'un fichier sous Windows.&lt;br /&gt;
*Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
*Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier. Pour effectuer nos premiers essais avec les cartes Arduino, elle est donc d'une importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Pour implanter la librairie Keyboard.h, il suffit que l'interface Arduino IDE soit à jour.&lt;br /&gt;
*Premiers tests avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
[[Fichier:TypeUSB.png|300px|thumb|right|Description des broches USB]]&lt;br /&gt;
*Premier Accomplissement avec l'Arduino : on a réussi un KeyboardLogOut sur Windows 8.1.&lt;br /&gt;
*Nous poursuivons nos essais dans le but de faire télécharger et exécuter un fichier mp3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Suite des recherches sur LUFA, et recherches en parallèle sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
Le protocole USB (Universal Serial Bus) permet la communication de données entre un hôte et un à plusieurs appareils. Il supporte le plug'n play, c'est-à-dire le branchement quand l'hôte est en marche.&amp;lt;br&amp;gt;&lt;br /&gt;
L'hôte, détectant l'appareil sur le bus, l'interrogera et chargera les pilotes nécessaires à son bon fonctionnement sans l'intervention de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il existe plusieurs vitesses USB : basse (1,5 Mbits/s), pleine (12 Mbits/s) ou haute (480 Mbits/s).&lt;br /&gt;
Un port USB est constitué de quatre broches (voir la figure de droite). Deux d'entre elles sont réservées à l'alimentation électrique du périphérique(une broche 5V et une masse), dans la limite des 0,5 A.&amp;lt;br&amp;gt;&lt;br /&gt;
Les deux autres véhiculent les signaux de données différentiels. La communication est bidirectionnelle mais ne peut avoir lieu simultanément dans les deux sens.&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*Création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreurs notamment sur les caractères '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document Wordpad sur lequel on avait enregistré les commandes à utiliser dans le shell n'avait pas enregistré ces caractères comme des ASCII 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les transactions USB (flux de données) sont composées d'une suite de quatre types de paquets.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets début de trame (SOF) indiquent le commencement d'une nouvelle trame.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets Jetons (Token) définissent le type de transaction, l'adresse du périphérique et de destination et la terminaison désignée.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets DATA optionnels constituent les données utiles.&amp;lt;br&amp;gt;&lt;br /&gt;
**Les paquets d'état valident les transactions et fournissent des moyens de correction d'erreur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les terminaisons (Endpoints en Anglais) sont les émetteurs ou les récepteurs de données. Elles sont situées en fin de chaîne de communication.&amp;lt;br&amp;gt;&lt;br /&gt;
Chaque appareil possède une &amp;quot;terminaison zéro&amp;quot; recevant toutes les commandes et demandes d'état, pendant l'énumération et tant que l'appareil est actif.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
*Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Les descripteurs sont la définition de la communication avec l'appareil USB. Ils informent l'hôte de sa nature, qui l'a réalisé, la version USB supportée, le nombre de configurations et de terminaisons, ainsi que leur type. Il y a cinq types de descripteurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Usbtree.gif|900px|thumb|center|Hiérarchie des descripteurs USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Le descripteur d'appareil précise les identificateurs d'appareils pour charger les pilotes, le nombre de configurations que l'appareil peut avoir. Il n'y a qu'un unique descripteur d'appareil par périphérique USB.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de configurations&amp;lt;br&amp;gt;&lt;br /&gt;
Ils indiquent l'alimentation et la consommation maximale de l'appareil et le nombre d'interfaces.&amp;lt;br&amp;gt;&lt;br /&gt;
Comme différentes alimentations (alimentation de grande puissance, appareil auto-alimenté ou alimenté sur secteur) et modes de transfert sont envisageable, un appareil peut avoir plusieurs configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Lors de l'énumération de l'appareil, l'hôte lit les descripteurs d'appareils et décide de la configuration à adopter. Une seule configuration est validée à la fois.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs d'interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Ils sont en quelque sorte le détail de chaque fonctionnalité de l'appareil, constituée de plusieurs terminaisons. Si un appareil fait casque audio et microphone, chacune de ces fonctionnalités aura son interface. Plusieurs interfaces peuvent être validées simultanément par l'hôte.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Les descripteurs de terminaisons précisent les terminaison autres que la terminaison zéro.&amp;lt;br&amp;gt;&lt;br /&gt;
- Les descripteurs de chaînes sont optionnels et offrent de l'information plus explicite pour l'homme.&lt;br /&gt;
&lt;br /&gt;
Enfin, nous pouvons considérer un sixième descripteur, le &amp;quot;Report Descriptor&amp;quot;, très spécifique à la classe HID (Human Interface Device) grâce auquel chaque périphérique USB peut définir son protocole de transfert.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*Le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a été créé, il utilise le Powershell de Windows afin de télécharger et d'ouvrir un fichier mp3. Le code a été par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passer le clavier en mode anglais sur l'ordinateur).&lt;br /&gt;
*Il y a bien une solution pour connaître l'activité du PC (récupérer les données d'affichage via un VGA ou HDMI), malheureusement cette solution n'est pas compatible avec le fait que notre clé USB doit passer pour un clé USB classique et donc ne se connecter qu'à un port USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Il existe quatre types de transferts pour le protocole USB.&lt;br /&gt;
** Les transferts de commande sont nécessaires à l'installation de l'appareil et sont aussi utilisés pour les opérations de commande et d'état.&lt;br /&gt;
** Les transferts d'interruptions ont lieu suite à une interruption en provenance de l'appareil. En revanche, celui-ci doit patienter que l'hôte l'interroge pour pouvoir s'exprimer.&lt;br /&gt;
** Les transferts isochrones sont continuels et périodiques et limitent le temps de latence pour la communication de données audio ou vidéo.&lt;br /&gt;
** Les transferts en bloc permettent un transfert de grandes quantités de données irrégulières.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
*Pour l’équipe du clavier:&lt;br /&gt;
&lt;br /&gt;
Afin de prendre en main la bibliothèque LUFA, nous essayons de faire reconnaître l'Arduino UNO en tant que stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour satisfaire cet objectif, nous devons au niveau de la bibliothèque :&amp;lt;br&amp;gt;&lt;br /&gt;
- nous appuyer sur un répertoire &amp;quot;Démo&amp;quot; de la classe MassStorage fournit dans celle-ci,&amp;lt;br&amp;gt;&lt;br /&gt;
- modifier le Makefile en renseignant les caractéristiques de la carte et du microprocesseur, puis compiler le tout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour réinitialiser l'ATMega16u2, il faut relier les broches GND et RESET. Arduino sera alors vu comme &amp;quot;Atmel Corp&amp;quot; par l'OS (nous pourrons le vérifier à l'aide de la commande lsusb).&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agira enfin de reprogrammer le microprocesseur avec dfu-programmer et vérifier après déconnexion et reconnexion de l'Arduino que cette dernière est considérée comme une classe stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous nous lançons donc dans cette démarche.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous copions le dossier de démonstration depuis /Demos/Device/Classdriver/MasseStorage et paramétrons le Makefile.&amp;lt;br&amp;gt;&lt;br /&gt;
Le microprocesseur ATMega16u2 est cadencé à 16 MHz et son architecture est AVR8. La carte est une Arduino UNO.&amp;lt;br&amp;gt;&lt;br /&gt;
Un aperçu du Makefile est donné ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Makefile UNO MassStorage.png|800px|thumb|center|Configuration du Makefile]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après compilation nous obtenons de nombreuses erreurs de fichiers incorrects, fonctions implicites et de variables non définies dans le fichier Board/Dataflash.h &amp;lt;br&amp;gt;&lt;br /&gt;
Note : l'origine de ces erreurs sera expliquée plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pour l'équipe clé USB :&lt;br /&gt;
**Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seule solution que nous ayons trouvé pour continuer à utiliser l’Arduino Leonardo est de faire un Switch physique. En effet, l'interface que propose l’Arduino ne correspond pas à nos besoins : nous souhaitons une ouverture &amp;quot;normale&amp;quot; d'un périphérique de stockage, et non l’utilisation de code Arduino pour la gestion de stockage.&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
*Nous avons pu récupérer un adafruit MPR121 qui est un clavier capacitif dans l'objectif de réaliser une maquette du clavier espion.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc travaillé sur le code d'un programme permettant la récupération des touches activées sur celui-ci, via la liaison série.&lt;br /&gt;
Ce code sera réalisé en deux étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
- tout d'abord, avec l'utilisation d'une Arduino UNO afin de voir si nous pouvons détecter les touches et les afficher;&amp;lt;br&amp;gt;&lt;br /&gt;
- puis avec une Arduino LEONARDO pour stocker la valeur de ces touches et les envoyer via des instructions.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous effectuons ce changement de carte car la UNO ne supporte pas la librairie Keyboard utilisée jusqu'à présent et n'est pas non plus compatible avec une carte SD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette semaine, la première étape a été accomplie.&lt;br /&gt;
&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
*Réalisation de la deuxième partie du programme.&lt;br /&gt;
Elle consiste en l'enregistrement des touches activées dans un fichier texte à placer dans la carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut de plus coder l'envoi des instructions pour l'envoi de ces caractères à l'ordinateur (via la touche 'R') ainsi que l'instruction pour vider le fichier (via la touche 'D').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Pourquoi les précédents essais de la compilation de LUFA n'ont-il pas abouti ?.&lt;br /&gt;
Si des fichiers étaient manquants à la compilation, c'était parce que la carte Arduino UNO ne dispose d'aucun dispositif de stockage de masse.&amp;lt;br&amp;gt;&lt;br /&gt;
Par exemple, la carte AT90USBKEY2 d'Atmel, aussi compatible avec LUFA, possède cette fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le dossier de démonstration à l'adresse /Demos/Device/ClassDriver/MassStorage est bien paramétré pour une compilation sans erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
On branche la carte et exécutons la commande lsusb. Elle est d'abord reconnue comme &amp;quot;Atmel Corp. at90usbkey sample firmware (composite device)&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
On réinitialise le microprocesseur en suivant cette démarche: on maintient les boutons RST et HWB, puis on relâche RST et HWB dans cet ordre-ci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous effaçons le programme de l'AT90USB1287,&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 erase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
on le reprogramme.&amp;lt;br&amp;gt;&lt;br /&gt;
 sudo dfu-programmer at90usb1287 flash MassStorage.hex&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
et on exécute un reset.&lt;br /&gt;
 sudo dfu-programmer at90usb1287 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous pouvons observer ci-dessous que la carte est considérée comme stockage de masse (commande lsusb -v).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:USBKEY MassStorage LUFA.png|800px|thumb|center|Détail du port associé à la carte AT90USBKEY]]&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
Voici un lien vers le [https://archives.plil.fr/bjeanlou/USB_devices.git git] de notre projet.&amp;lt;br&amp;gt;&lt;br /&gt;
Vous y trouverez notamment les codes des maquettes.&amp;lt;br&amp;gt;&lt;br /&gt;
Il est possible de visualiser le rapport ici : [[Media:Rapport IMA3.2021 P12.pdf]]&lt;br /&gt;
&lt;br /&gt;
===Remarques de l'oral===&lt;br /&gt;
&lt;br /&gt;
Les remarques qui nous ont été faites sont dans un premier temps sur la forme.&amp;lt;br&amp;gt;&lt;br /&gt;
Le diaporama manquait de visibilité à cause du fond non uni. Le logo central perturbait la lisibilité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le code affiché devrait être plus gros mais il serait préférable d'en afficher que le strict minimum sur les diapositives.&amp;lt;br&amp;gt;&lt;br /&gt;
Pendant la présentation, réduire les détails sur le protocole USB (et autres aspects très techniques) aurait permis moins de monotonie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au niveau technique:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la question de l'utilité de ces périphériques, nous pourrions ajouter l'acquisition de connaissances et de compétences en lien avec le protocole USB à l'aspect du contrôle parental.&amp;lt;br&amp;gt;&lt;br /&gt;
Il aurait été intéressant de rentrer plus en détail sur l'état de l'art et les technologies employées par les concurrents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour la rentrée prochaine, nous devrions préciser le cahier des charges afin d'acquérir une vision plus claire des objectifs, notamment sur le choix du clavier à utiliser.&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Objectifs de cette année===&lt;br /&gt;
&lt;br /&gt;
 Clé USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
réalisation d'un PCB avec l'atméga16u2 pour la gestion de l'USB.&lt;br /&gt;
&lt;br /&gt;
* réaliser le PCB pour intégrer une mémoire raisonnable en termes de volume de stockage afin de passer inaperçu (au moins 1Go). Tout cela sans oublier les fonctions spéciales (téléchargement d'un logiciel + installation + utilisation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Clavier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons pensé à :&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier existant et faire un keygrabber (PCB avec l'atmega  en série/parallèle sur le bus reliant le clavier à l'ordinateur).&lt;br /&gt;
Pb parallèle : C'est un cas avec un maître et plusieurs esclaves, qui n'est pas possible pour le protocole USB.&amp;lt;br&amp;gt;&lt;br /&gt;
Pb série : il  faudra gérer un permutateur commandé par notre microprocesseur, car l'ATMEGA 16u2 ne possède qu'un port USB. Par conséquent les requêtes de l'ordinateur devront être récupérées et retransmises au clavier par l'ATMEGA. Cela induit une certaine latence. Nous devront donc veiller à respecter le délai de réponse imposé par le protocole.&lt;br /&gt;
&lt;br /&gt;
* récupérer un clavier et mettre notre ATMEGA à la place du micro-processeur du clavier.&lt;br /&gt;
Pb : existe-t-il un mappage universel ?&lt;br /&gt;
&lt;br /&gt;
* monter un clavier de toutes pièces.&lt;br /&gt;
Pb : demande beaucoup plus de temps que les autres solutions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi la deuxième option, car la première semble très difficile à mettre en œuvre, et la troisième a une composante mécanique plus marquée.&lt;br /&gt;
&lt;br /&gt;
===liste des tâches et planification===&lt;br /&gt;
&lt;br /&gt;
*harware&lt;br /&gt;
**PCB&lt;br /&gt;
**routage&lt;br /&gt;
**alimentation&lt;br /&gt;
**composants&lt;br /&gt;
**connecter la matrice du clavier&lt;br /&gt;
&lt;br /&gt;
*software&lt;br /&gt;
**décrire l'architecture pour utiliser la bibliothèque LUFA&lt;br /&gt;
**rédiger le programme&lt;br /&gt;
&lt;br /&gt;
*autres&lt;br /&gt;
**état de l'art pour le keygrabber&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 1===&lt;br /&gt;
-expression plus précise de notre feuille de route.&lt;br /&gt;
-Entretient avec les professeurs&lt;br /&gt;
&lt;br /&gt;
===Semaine 2===&lt;br /&gt;
===Semaine 3===&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=73580</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=73580"/>
				<updated>2019-04-23T10:30:22Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
&lt;br /&gt;
Prenons des parents qui laissent leurs enfants utilisés l'ordinateur familial pour leur devoir maison. Mais il aimeraient vérifier qu'ils ne fassent pas n'importe quoi et qu'ils ne jouent pas sans rester en permanence derrière eux. Dans ce cadre, ils pourraient utilisés nos périphériques.&lt;br /&gt;
Le clavier, leur permettrait de récupérer les données tapées et de vérifier que celles-ci correspondent bien au travail qu'ils avaient à réaliser. Afin de récupéré les données même si ils ne sont pas chez eux, ils peuvent utilisés la clé pour qu'elle télécharge un logiciel, qui tous les certains temps enregistre ce qu'il a été fait et l'envoie sur leur adresse mail. Quand à la souris, elle pourrait si en passant dans le bureau ils s’aperçoivent que les enfants sont en train de jouer, de les en dissuader en activant le mode berserk qui rendrait la souris momentanément inutilisable.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
*clavier&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
&lt;br /&gt;
Société : keelog&lt;br /&gt;
&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
*coté documentation&lt;br /&gt;
**maitriser le protocole USB&lt;br /&gt;
**maitriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
afin d'être en mesure de créer nos composants&lt;br /&gt;
&lt;br /&gt;
===Clavier===&lt;br /&gt;
===Clé USB===&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Clavier===&lt;br /&gt;
===Clé USB===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
*nous remarquons que nos deux projets (clé, clavier) sont en fait assez semblables car tous deux devront se comporter comme un clavier, et tous deux disposerons d'un dispositif de stockage.&lt;br /&gt;
* Recherche des commandes de téléchargement et ouverture d'un fichier sous Windows.&lt;br /&gt;
* Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
* Téléchargement de la librairie Keyboard.h et essais d'implantations. Cette librairie permet à la carte arduino de se faire passer pour un clavier et d'envoyer des informations à l'ordinateur comme un clavier). Pour effectuer nos premiers essai avec les cartes arduino, elle est donc d'un importance capitale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*pour implanter la librairie Keyboard.h, il suffit que arduino IDE soit à jour.&lt;br /&gt;
*premiers test avec la-dite librairie.&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
premier Accomplissement avec l'Arduino : on a réussit un KeyboardLogOut sur Windows.&lt;br /&gt;
&lt;br /&gt;
Recherches sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
*création d'une fonction permettant une lecture plus aisée du code (void keyboardprint(string);). Après quelques tests nous remarquons des erreur notamment sur les '@', '#', '-', '&amp;quot;'. Ces erreurs étaient de 2 types :&lt;br /&gt;
**'&amp;quot;' et '-': le document wordpad sur lequel on avait enregistré les commandes à utilisé dans le shell n'avait pas enregistré ces caractères comme des ascii 7bits mais comme des utf8 stockés sur 2 octets (ou plus).&lt;br /&gt;
**'@' et '#': une incohérence entre les les macros de la librairie keyboard.h et celles de l'interface clavier de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a était crée il utilise le Powershell de Windows afin de télécharger et d'ouvrir une musique.Le code à était par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passé le clavier en mode anglais).&lt;br /&gt;
Nous n’avons pas trouvé de solution afin de connaitre l'activité du pc , (même la communication série avec le pc ne nous donne pas les informations voulues ).&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
Pour l’équipe du clavier:&lt;br /&gt;
utilisation de l’Arduino UNO , modification  du pilote (utilisation du mode DFU) afin que l'OS reconnaisse l’Arduino en tant que Atmega16u2, et par la suite utilisation de la bibliothèque LUFA.&lt;br /&gt;
Pour l'équipe clé USB :&lt;br /&gt;
Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage. La seul solution que nous avons trouvé tout en continuant à utiliser l’Arduino Leonardo nous devons faire un Switch physique, car l'interface que propose l’Arduino ne correspond pas à nos besoins (nous souhaitons une ouverture &amp;quot;normal&amp;quot; d'un périphérique , et non l’utilisation de code Arduino pour la gestion de stockage) .&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=73515</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=73515"/>
				<updated>2019-04-23T09:50:03Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
===le clavier===&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
* Surveillance de son propre pc, par exemple pour savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
* Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===la clé===&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine : automatiser et accélérer des actions réalisables par un humain via le clavier.&lt;br /&gt;
&lt;br /&gt;
* Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
* Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===la souris===&lt;br /&gt;
Les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
* Empêcher la mise en veille de l'ordinateur.&lt;br /&gt;
* Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
* Satisfaire un esprit blagueur.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
*clavier&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
&lt;br /&gt;
Société : keelog&lt;br /&gt;
&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
*coté documentation&lt;br /&gt;
**maitriser le protocole USB&lt;br /&gt;
**maitriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
afin d'être en mesure de créer nos composants&lt;br /&gt;
&lt;br /&gt;
===Clavier===&lt;br /&gt;
===Clé USB===&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Clavier===&lt;br /&gt;
===Clé USB===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
* Recherche des instructions de téléchargement et ouverture d'un fichier sous Windows.&lt;br /&gt;
* Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
* Téléchargement de la lib Keyboard et essai d'implantation pour exécuter une combinaison de touches&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Suite de l'implantation de la bibliothèque Keyboard&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
premier Accomplissement avec l'Arduino : on a réussit un KeyboardLogOut sur Windows.&lt;br /&gt;
&lt;br /&gt;
Recherches sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a était crée il utilise le Powershell de Windows afin de télécharger et d'ouvrir une musique.Le code à était par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passé le clavier en mode anglais).&lt;br /&gt;
Nous n’avons pas trouvé de solution afin de connaitre l'activité du pc , (même la communication série avec le pc ne nous donne pas les informations voulues ).&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
Pour l’équipe du clavier:&lt;br /&gt;
utilisation de l’Arduino UNO , modification  du pilote (utilisation du mode DFU) afin que l'OS reconnaisse l’Arduino en tant que Atmega16u2, et par la suite utilisation de la bibliothèque LUFA.&lt;br /&gt;
Pour l'équipe clé USB :&lt;br /&gt;
Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage. La seul solution que nous avons trouvé tout en continuant à utiliser l’Arduino Leonardo nous devons faire un Switch physique, car l'interface que propose l’Arduino ne correspond pas à nos besoins (nous souhaitons une ouverture &amp;quot;normal&amp;quot; d'un périphérique , et non l’utilisation de code Arduino pour la gestion de stockage) .&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=73502</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=73502"/>
				<updated>2019-04-23T09:40:33Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 9 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
===le clavier===&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
* Surveillance de son propre pc, par exemple pour savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
* Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===la clé===&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine : automatiser et accélérer des actions réalisables par un humain via le clavier.&lt;br /&gt;
&lt;br /&gt;
* Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
* Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===la souris===&lt;br /&gt;
Les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
* Empêcher la mise en veille de l'ordinateur.&lt;br /&gt;
* Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
* Satisfaire un esprit blagueur.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
*clavier&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
&lt;br /&gt;
Société : keelog&lt;br /&gt;
&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
*coté documentation&lt;br /&gt;
**maitriser le protocole USB&lt;br /&gt;
**maitriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
afin d'être en mesure de créer nos composants&lt;br /&gt;
&lt;br /&gt;
===Clavier===&lt;br /&gt;
===Clé USB===&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Clavier===&lt;br /&gt;
===Clé USB===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
* Recherche des instructions de téléchargement et ouverture d'un fichier sous Windows.&lt;br /&gt;
* Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
* Téléchargement de la lib Keyboard et essai d'implantation pour exécuter une combinaison de touches&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Suite de l'implantation de la bibliothèque Keyboard&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
premier Accomplissement avec l'Arduino : on a réussit un KeyboardLogOut sur Windows.&lt;br /&gt;
&lt;br /&gt;
Recherches sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*le problème du backslash est résolu, via alt+92.&lt;br /&gt;
*Un code Arduino a était crée il utilise le Powershell de Windows afin de télécharger et d'ouvrir une musique.Le code à était par la suite testé sur un pc Windows 8.1 .Le code marche mais ne prend pas en compte la configuration du clavier (obligation de passé le clavier en mode anglais).&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
Pour l’équipe du clavier:&lt;br /&gt;
utilisation de l’Arduino UNO , modification  du pilote (utilisation du mode DFU) afin que l'OS reconnaisse l’Arduino en tant que Atmega16u2, et par la suite utilisation de la bibliothèque LUFA.&lt;br /&gt;
Pour l'équipe clé USB :&lt;br /&gt;
Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage. La seul solution que nous avons trouvé tout en continuant à utiliser l’Arduino Leonardo nous devons faire un Switch physique, car l'interface que propose l’Arduino ne correspond pas à nos besoins (nous souhaitons une ouverture &amp;quot;normal&amp;quot; d'un périphérique , et non l’utilisation de code Arduino pour la gestion de stockage) .&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=73500</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=73500"/>
				<updated>2019-04-23T09:37:00Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
===le clavier===&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
* Surveillance de son propre pc, par exemple pour savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
* Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===la clé===&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine : automatiser et accélérer des actions réalisables par un humain via le clavier.&lt;br /&gt;
&lt;br /&gt;
* Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
* Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===la souris===&lt;br /&gt;
Les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
* Empêcher la mise en veille de l'ordinateur.&lt;br /&gt;
* Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
* Satisfaire un esprit blagueur.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
*clavier&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
&lt;br /&gt;
Société : keelog&lt;br /&gt;
&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
*coté documentation&lt;br /&gt;
**maitriser le protocole USB&lt;br /&gt;
**maitriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
afin d'être en mesure de créer nos composants&lt;br /&gt;
&lt;br /&gt;
===Clavier===&lt;br /&gt;
===Clé USB===&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Clavier===&lt;br /&gt;
===Clé USB===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
* Recherche des instructions de téléchargement et ouverture d'un fichier sous Windows.&lt;br /&gt;
* Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
* Téléchargement de la lib Keyboard et essai d'implantation pour exécuter une combinaison de touches&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Suite de l'implantation de la bibliothèque Keyboard&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
premier Accomplissement avec l'Arduino : on a réussit un KeyboardLogOut sur Windows.&lt;br /&gt;
&lt;br /&gt;
Recherches sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*le problème du backslash est résolu, via alt+92.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
Pour l’équipe du clavier:&lt;br /&gt;
utilisation de l’Arduino UNO , modification  du pilote (utilisation du mode DFU) afin que l'OS reconnaisse l’Arduino en tant que Atmega16u2, et par la suite utilisation de la bibliothèque LUFA.&lt;br /&gt;
Pour l'équipe clé USB :&lt;br /&gt;
Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage. La seul solution que nous avons trouvé tout en continuant à utiliser l’Arduino Leonardo nous devons faire un Switch physique, car l'interface que propose l’Arduino ne correspond pas à nos besoins (nous souhaitons une ouverture &amp;quot;normal&amp;quot; d'un périphérique , et non l’utilisation de code Arduino pour la gestion de stockage) .&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=73499</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=73499"/>
				<updated>2019-04-23T09:34:11Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Semaine 10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
===le clavier===&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
* Surveillance de son propre pc, par exemple pour savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
* Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===la clé===&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine : automatiser et accélérer des actions réalisables par un humain via le clavier.&lt;br /&gt;
&lt;br /&gt;
* Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
* Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===la souris===&lt;br /&gt;
Les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
* Empêcher la mise en veille de l'ordinateur.&lt;br /&gt;
* Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
* Satisfaire un esprit blagueur.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
*clavier&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
&lt;br /&gt;
Société : keelog&lt;br /&gt;
&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
Pour chacun des périphériques nous allons utiliser un ATMega16 (u2 ou u4) combiné à la bibliothèque LUFA.&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Clavier===&lt;br /&gt;
Création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*de disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activées via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et désactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Création d'un périphérique du stockage USB doté d'un microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
Cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3 Choix techniques : matériel et logiciel==&lt;br /&gt;
ATMega16 + bibliothèque LUFA&lt;br /&gt;
===Clavier===&lt;br /&gt;
Nous allons partir d'un clavier physique déjà existant. Mais nous n'excluons pas l'idée de créer notre propre clavier en cas de bonne avancée du projet.&lt;br /&gt;
===Clé USB===&lt;br /&gt;
Nous allons devoir créer cette clé de taille raisonnable, pour éviter d'éveiller des soupçons.&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
*coté documentation&lt;br /&gt;
**maitriser le protocole USB&lt;br /&gt;
**maitriser l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
afin d'être en mesure de créer nos composants&lt;br /&gt;
&lt;br /&gt;
===Clavier===&lt;br /&gt;
===Clé USB===&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Clavier===&lt;br /&gt;
===Clé USB===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
&lt;br /&gt;
* Recherche des instructions de téléchargement et ouverture d'un fichier sous Windows.&lt;br /&gt;
* Recherche/récupération du logiciel espion Iwantsoft Free Keylogger. Il récupère entre autres les recherches faites sur un navigateur, prend des captures d'écran et des photos de l'utilisateur via la webcam (si accessible).&lt;br /&gt;
* Téléchargement de la lib Keyboard et essai d'implantation pour exécuter une combinaison de touches&lt;br /&gt;
&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
*Suite de l'implantation de la bibliothèque Keyboard&lt;br /&gt;
*Recherches sur l'utilisation de la bibliothèque LUFA&lt;br /&gt;
&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
premier Accomplissement avec l'Arduino : on a réussit un KeyboardLogOut sur Windows.&lt;br /&gt;
&lt;br /&gt;
Recherches sur le protocole USB&lt;br /&gt;
&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
Nous n'avons pas réussi grand chose cette semaine. Nous avons seulement appris que le caractère '\\' était introuvable. Nous ne savons pas encore si cela vient de l'ordinateur ou de la librairie Arduino Keyboard.&lt;br /&gt;
&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
*le problème du backslash est résolu, via alt+92.&lt;br /&gt;
&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
Pour l’équipe du clavier:&lt;br /&gt;
utilisation de l’Arduino UNO , modification  du pilote (utilisation du mode DFU) afin que l'OS reconnaisse l’Arduino en tant que Atmega16u2, et par la suite utilisation de la bibliothèque LUFA.&lt;br /&gt;
Pour l'équipe clé USB :&lt;br /&gt;
Après réflexion afin de pouvoir utiliser la clé en tant que HID (clavier) ou périphérique de stokage, la seul solution que nous avons trouvé tout en continuant à utiliser l’Arduino Leonardo nous devons faire un Switch physique (car l'interface que propose l’Arduino ne correspond pas à nos attente).&lt;br /&gt;
&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=70263</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=70263"/>
				<updated>2019-03-05T10:25:07Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Equipe 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=II. Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
Ensuite, notre clé USB diffère de l'USB RUBBER DUCKY car elle sera en premier lieu utilisée comme lecteur de carte SD. On pourra donc s'en servir de stockage alors que chez le concurrent la carte micro SD sert de stockage pour les instructions à envoyer au PC.&amp;lt;br&amp;gt;&lt;br /&gt;
Ce stockage rend donc moins suspect notre clé, qui pourra lancer le téléchargement du logiciel de surveillance en cas d'inactivité.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
*le clavier&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
- Surveillance de son propre pc, par exemple pour savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
&lt;br /&gt;
- Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine : automatiser et accélérer des actions réalisables par un humain via le clavier.&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la souris&lt;br /&gt;
Les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
- Empêcher la mise en veille de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
- Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
&lt;br /&gt;
- Satisfaire un esprit blagueur.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
&lt;br /&gt;
Comment activer les fonctionnalités cachées des différents périphériques ?&lt;br /&gt;
&lt;br /&gt;
Pour le clavier, les fonctionnalités seront activées et désactivées à l'aide d'une combinaison de touches prédéfinies : &amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 1 : activation de l’enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 2 : désactivation de l'enregistrement des touches&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 3 : renvoie l'historique des touches pressées&amp;lt;br&amp;gt;&lt;br /&gt;
combinaison 4 : suppression de la mémoire&lt;br /&gt;
&lt;br /&gt;
Au sujet de la clé, le périphérique va changer son mode de fonctionnement pour devenir un HID (clavier) après une certaine durée d'inactivité de celui-ci. Voir si nous pouvons détecter une mise en veille de Windows.&lt;br /&gt;
&lt;br /&gt;
L'activation de la fonctionnalité de la souris sera faite par le biais d'une télécommande infrarouge. La coque de la souris possèdera une partie laissant passer les infrarouges.&lt;br /&gt;
&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
*clavier&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
&lt;br /&gt;
Société : keelog&lt;br /&gt;
&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
&lt;br /&gt;
*coté documentation&lt;br /&gt;
**maitrisez le protocole USB&lt;br /&gt;
**maitrisez l'utilisation de l'ATMega 16 U2&lt;br /&gt;
&lt;br /&gt;
afin d'être en mesure de créer nos composants&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*définir les fonctions cachées de chaque composants&lt;br /&gt;
*définir comment activer et désactiver chacune des fonctions&lt;br /&gt;
&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver.&lt;br /&gt;
&lt;br /&gt;
Ce clavier doit permettre :&lt;br /&gt;
*d'utiliser le clavier normalement.&lt;br /&gt;
*d'enregistrer les entrées au clavier.&lt;br /&gt;
*disposer de différentes fonctions autour de l'enregistrement des entrées clavier, qui seront activer via une combinaison de touches :&lt;br /&gt;
**de récupérer les entrées clavier dans un document texte .&lt;br /&gt;
**de vider le stockage des entrées clavier.&lt;br /&gt;
**activer et inactiver le stockage des entrées clavier.&lt;br /&gt;
&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique avec son microcontrôleur, son capteur infrarouge permettant l'activation du mode berserk, et son driver.&lt;br /&gt;
&lt;br /&gt;
Cette souris doit permettre :&lt;br /&gt;
*d'utiliser la souris normalement&lt;br /&gt;
*disposer d'un mode berserk qui sera activé par signal infrarouge ou inactivité prolongée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
le mode berserk est un mode durant lequel la souris envoie des informations en mode aléatoire, c'est à dire qui envoie des informations qui ne correspondent pas à ce que perçoive les capteurs de cette souris.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
création d'un périphérique du stockage USB doté d'un microcontrôleur permettant, en cas d'inactivité prolongée.&lt;br /&gt;
&lt;br /&gt;
cette clé USB doit :&lt;br /&gt;
*pouvoir servir de stockage de masse&lt;br /&gt;
*en cas d'inactivité prolongée, changer son statut auprès de l'ordinateur en clavier afin de lancer (au choix) :&lt;br /&gt;
**l'installation d'un logiciel (espion)&lt;br /&gt;
&lt;br /&gt;
==3.3Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67461</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67461"/>
				<updated>2019-02-05T11:45:50Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Positionnement par rapport à l'existant */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne le clavier, il aura à peu près les mêmes caractéristiques techniques que le KeyGrabber.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci. En effet, le keygrabber est une clef USB et il est facilement repérable.&lt;br /&gt;
Cela implique de le cacher à l'arrière de la tour.&lt;br /&gt;
&lt;br /&gt;
Or, notre dispositif Keylogger sera directement implémentée dans le clavier. Ainsi il restera inaperçu depuis l'extérieur, sur n'importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
*le clavier&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
- Surveillance de son propre pc. Ex : Savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
&lt;br /&gt;
- Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine, automatiser et accélérer des actions réalisables par un humain via le clavier :&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la souris&lt;br /&gt;
les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
- Empêcher la mise en veille de l'ordinateur.&lt;br /&gt;
&lt;br /&gt;
- Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
&lt;br /&gt;
- Règlements de comptes familiaux.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
*clavier&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
&lt;br /&gt;
Société : keelog&lt;br /&gt;
&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==3.1 Cahier des charges du groupe==&lt;br /&gt;
==3.2 Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique avec son microcontrôleur, son capteur infrarouge permettant l'activation du mode berserk, et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
création d'un périphérique du stockage USB doté d'un microcontrôleur permettant, en cas d'inactivité prolongée&lt;br /&gt;
&lt;br /&gt;
==3.3Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==3.4 Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==3.5 Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67443</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67443"/>
				<updated>2019-02-05T11:33:49Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Analyse du second concurrent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:USB_Rubber_Ducky.jpg|thumb|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Différence entre notre projet et le concurrent :&lt;br /&gt;
Notre périphérique comparé au KeyGrabber aura à peu près les mêmes caractéristiques techniques.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci, le keygrabber étant une clef USB il est facilement repérable ce qui rend seulement utilisable à l’arrière des tours. Tandis que notre clavier restera inaperçu sur n’importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
*le clavier&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
- Surveillance de son propre pc. Ex : Savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
&lt;br /&gt;
- Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine, automatiser et accélérer des actions réalisables par un humain via le clavier :&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la souris&lt;br /&gt;
les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
- Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
&lt;br /&gt;
- Règlements de comptes familiaux.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
*clavier&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
&lt;br /&gt;
Société : keelog&lt;br /&gt;
&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique avec sa mémoire interne, son microcontrôleur, et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique avec son microcontrôleur, son capteur infrarouge permettant l'activation du mode berserk, et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
création d'un périphérique du stockage USB doté d'un microcontrôleur permettant, en cas d'inactivité prolongée&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:USB_Rubber_Ducky.jpg&amp;diff=67442</id>
		<title>Fichier:USB Rubber Ducky.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:USB_Rubber_Ducky.jpg&amp;diff=67442"/>
				<updated>2019-02-05T11:33:06Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : Composition de l'USB Rubber Ducky&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Composition de l'USB Rubber Ducky&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67396</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67396"/>
				<updated>2019-02-05T11:20:19Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Analyse du premier concurrent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|thumb|upright=0.8|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Différence entre notre projet et le concurrent :&lt;br /&gt;
Notre périphérique comparé au KeyGrabber aura à peu près les mêmes caractéristiques techniques.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci, le keygrabber étant une clef USB il est facilement repérable ce qui rend seulement utilisable à l’arrière des tours. Tandis que notre clavier restera inaperçu sur n’importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
*le clavier&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
- Surveillance de son propre pc. Ex : Savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
&lt;br /&gt;
- Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine, automatiser et accélérer des actions réalisables par un humain via le clavier :&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la souris&lt;br /&gt;
les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
- Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
&lt;br /&gt;
- Règlements de comptes familiaux.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
*clavier&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
&lt;br /&gt;
Société : keelog&lt;br /&gt;
&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67391</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67391"/>
				<updated>2019-02-05T11:18:59Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Analyse du premier concurrent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit : KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
[[Image:Keygrabber_16Mo.jpg|right|KeyGrabber USB 16Mo]]&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Différence entre notre projet et le concurrent :&lt;br /&gt;
Notre périphérique comparé au KeyGrabber aura à peu près les mêmes caractéristiques techniques.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci, le keygrabber étant une clef USB il est facilement repérable ce qui rend seulement utilisable à l’arrière des tours. Tandis que notre clavier restera inaperçu sur n’importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
*le clavier&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
- Surveillance de son propre pc. Ex : Savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
&lt;br /&gt;
- Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine, automatiser et accélérer des actions réalisables par un humain via le clavier :&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la souris&lt;br /&gt;
les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
- Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
&lt;br /&gt;
- Règlements de comptes familiaux.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
*clavier&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
&lt;br /&gt;
Société : keelog&lt;br /&gt;
&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Keygrabber_16Mo.jpg&amp;diff=67376</id>
		<title>Fichier:Keygrabber 16Mo.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Keygrabber_16Mo.jpg&amp;diff=67376"/>
				<updated>2019-02-05T11:00:45Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : Image du Keygrabber 16Mo par Keylogger&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Image du Keygrabber 16Mo par Keylogger&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67362</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67362"/>
				<updated>2019-02-05T10:53:33Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Objectifs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser ces périphériques USB artisanaux avec les fonctionnalités supplémentaires décrites.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Différence entre notre projet et le concurrent :&lt;br /&gt;
Notre périphérique comparé au KeyGrabber aura à peu près les mêmes caractéristiques techniques.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci, le keygrabber étant une clef USB il est facilement repérable ce qui rend seulement utilisable à l’arrière des tours. Tandis que notre clavier restera inaperçu sur n’importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
*le clavier&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
- Surveillance de son propre pc. Ex : Savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
&lt;br /&gt;
- Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine, automatiser et accélérer des actions réalisables par un humain via le clavier :&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la souris&lt;br /&gt;
les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
- Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
&lt;br /&gt;
- Règlements de comptes familiaux.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
*clavier&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
&lt;br /&gt;
Société : keelog&lt;br /&gt;
&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67361</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67361"/>
				<updated>2019-02-05T10:52:31Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrer des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’actions préalablement enregistrée afin de télécharger un logiciel de surveillance sur le PC auquel elle est connectée.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser des périphériques USB artisanaux avec des fonctionnalités supplémentaires.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Différence entre notre projet et le concurrent :&lt;br /&gt;
Notre périphérique comparé au KeyGrabber aura à peu près les mêmes caractéristiques techniques.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci, le keygrabber étant une clef USB il est facilement repérable ce qui rend seulement utilisable à l’arrière des tours. Tandis que notre clavier restera inaperçu sur n’importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
*le clavier&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
- Surveillance de son propre pc. Ex : Savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
&lt;br /&gt;
- Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine, automatiser et accélérer des actions réalisables par un humain via le clavier :&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la souris&lt;br /&gt;
les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
- Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
&lt;br /&gt;
- Règlements de comptes familiaux.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
*clavier&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
&lt;br /&gt;
Société : keelog&lt;br /&gt;
&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67353</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67353"/>
				<updated>2019-02-05T10:50:24Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire consiste à enregistrement des touches tapées par l'utilisateur. Le contenu de cet historique sera stocké dans la mémoire interne du clavier, et pourra être vidé ou supprimé via une combinaison de touche.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possédera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier qui injectera une séquence d’action préalablement enregistré afin de télécharger un logiciel de surveillance sur le PC auquel il est connecté.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser des périphériques USB artisanaux avec des fonctionnalités supplémentaires.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Différence entre notre projet et le concurrent :&lt;br /&gt;
Notre périphérique comparé au KeyGrabber aura à peu près les mêmes caractéristiques techniques.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci, le keygrabber étant une clef USB il est facilement repérable ce qui rend seulement utilisable à l’arrière des tours. Tandis que notre clavier restera inaperçu sur n’importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
*le clavier&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
- Surveillance de son propre pc. Ex : Savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
&lt;br /&gt;
- Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine, automatiser et accélérer des actions réalisables par un humain via le clavier :&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la souris&lt;br /&gt;
les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
- Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
&lt;br /&gt;
- Règlements de comptes familiaux.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
*clavier&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
Société : keelog&lt;br /&gt;
URL : http://www.keelog.com/fr/usb-keylogger/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
&lt;br /&gt;
Concurrent :&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
Société :hak5&lt;br /&gt;
URL : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67341</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67341"/>
				<updated>2019-02-05T10:47:18Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Analyse du second concurrent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED. &amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire en un enregistrement des touches tapées par l'utilisateur espionné. Le contenu de cet historique sera stocké dans une mémoire interne du clavier et pourra être visualisé et supprimé en ouvrant un lecteur de fichier texte et en entrant la bonne combinaison.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possèdera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD. &amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier sur le bus et pourra entrer des lignes des codes de télécharger un logiciel de surveillance sur le PC connecté.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser des périphériques USB artisanaux avec des fonctionnalités supplémentaires.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&amp;lt;br&amp;gt;&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&amp;lt;br&amp;gt;&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Différence entre notre projet et le concurrent :&lt;br /&gt;
Notre périphérique comparé au KeyGrabber aura à peu près les mêmes caractéristiques techniques.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci, le keygrabber étant une clef USB il est facilement repérable ce qui rend seulement utilisable à l’arrière des tours. Tandis que notre clavier restera inaperçu sur n’importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
*le clavier&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
- Surveillance de son propre pc. Ex : Savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
&lt;br /&gt;
- Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine, automatiser et accélérer des actions réalisables par un humain via le clavier :&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la souris&lt;br /&gt;
les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
- Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
&lt;br /&gt;
- Règlements de comptes familiaux.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67339</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67339"/>
				<updated>2019-02-05T10:46:03Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Analyse du premier concurrent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED. &amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire en un enregistrement des touches tapées par l'utilisateur espionné. Le contenu de cet historique sera stocké dans une mémoire interne du clavier et pourra être visualisé et supprimé en ouvrant un lecteur de fichier texte et en entrant la bonne combinaison.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possèdera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD. &amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier sur le bus et pourra entrer des lignes des codes de télécharger un logiciel de surveillance sur le PC connecté.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser des périphériques USB artisanaux avec des fonctionnalités supplémentaires.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&amp;lt;br&amp;gt;&lt;br /&gt;
Nom du produit :KeyGrabber USB&amp;lt;br&amp;gt;&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&amp;lt;br&amp;gt;&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&amp;lt;br&amp;gt;&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
Source : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Différence entre notre projet et le concurrent :&lt;br /&gt;
Notre périphérique comparé au KeyGrabber aura à peu près les mêmes caractéristiques techniques.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci, le keygrabber étant une clef USB il est facilement repérable ce qui rend seulement utilisable à l’arrière des tours. Tandis que notre clavier restera inaperçu sur n’importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
*le clavier&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
- Surveillance de son propre pc. Ex : Savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
&lt;br /&gt;
- Récupération de données. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine, automatiser et accélérer des actions réalisables par un humain via le clavier :&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*la souris&lt;br /&gt;
les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
- Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
&lt;br /&gt;
- Règlements de comptes familiaux.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67334</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67334"/>
				<updated>2019-02-05T10:45:17Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Analyse du premier concurrent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED. &amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire en un enregistrement des touches tapées par l'utilisateur espionné. Le contenu de cet historique sera stocké dans une mémoire interne du clavier et pourra être visualisé et supprimé en ouvrant un lecteur de fichier texte et en entrant la bonne combinaison.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possèdera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD. &amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier sur le bus et pourra entrer des lignes des codes de télécharger un logiciel de surveillance sur le PC connecté.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser des périphériques USB artisanaux avec des fonctionnalités supplémentaires.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
&lt;br /&gt;
Le premier concurrent, celui du clavier, est représenté par les produits de type Keylogger. &lt;br /&gt;
&lt;br /&gt;
Voici un des principaux concurrents de ce marché :&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
Société : Keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
Ce périphérique USB se connecte entre le port USB de l’ordinateur et celui du clavier. Il enregistre l’activité du clavier dans une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches.&lt;br /&gt;
&lt;br /&gt;
Caractéristiques :&lt;br /&gt;
Sa longueur est de 38mm. Elle a une capacité de stockage de 16Mo ou 8Go.&lt;br /&gt;
Les données présentes sont encryptées par un cryptage 128 bits, unique à chaque produit.&lt;br /&gt;
Son prix est 43.99$ pour la version 16Mo ou 83,99$ pour la version 8Go.&lt;br /&gt;
&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
Source : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Différence entre notre projet et le concurrent :&lt;br /&gt;
Notre périphérique comparé au KeyGrabber aura à peu près les mêmes caractéristiques techniques.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci, le keygrabber étant une clef USB il est facilement repérable ce qui rend seulement utilisable à l’arrière des tours. Tandis que notre clavier restera inaperçu sur n’importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
*le clavier&lt;br /&gt;
Le principal cas d’utilisation de ce clavier est la surveillance, légale ou non.&lt;br /&gt;
&lt;br /&gt;
- Surveillance de son propre pc. Ex : Savoir ce que font ses enfants quand ils sont sur l’ordinateur.&lt;br /&gt;
&lt;br /&gt;
- Récupération de données. &lt;br /&gt;
&lt;br /&gt;
*la clé&lt;br /&gt;
Les cas d’utilisation d’un tel périphérique sont très variés mais ont la même racine, automatiser et accélérer des actions réalisables par un humain via le clavier :&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un réparateur d’ordinateur pour nettoyer un pc, récupérer des données effacées….&lt;br /&gt;
&lt;br /&gt;
- Utilisable par un parent pour placer des logiciels espions, prendre le contrôle de l’ordinateur de son enfant à distance (pour parent très avertis) ….&lt;br /&gt;
&lt;br /&gt;
*la souris&lt;br /&gt;
les cas d'utilisation de cette souris, en plus des cas normaux d'utilisation en tant que pointeur graphique, correspondent à l'utilisation du mode berserk (activable à distance).&lt;br /&gt;
&lt;br /&gt;
- Tournois e-sport amateurs (ou familiaux).&lt;br /&gt;
&lt;br /&gt;
- Règlements de comptes familiaux.&lt;br /&gt;
&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67318</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67318"/>
				<updated>2019-02-05T10:31:49Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Analyse du second concurrent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=I. Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED. &amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire en un enregistrement des touches tapées par l'utilisateur espionné. Le contenu de cet historique sera stocké dans une mémoire interne du clavier et pourra être visualisé et supprimé en ouvrant un lecteur de fichier texte et en entrant la bonne combinaison.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possèdera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD. &amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier sur le bus et pourra entrer des lignes des codes de télécharger un logiciel de surveillance sur le PC connecté.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser des périphériques USB artisanaux avec des fonctionnalités supplémentaires.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
Le Clavier&lt;br /&gt;
Concurrents : (Keylogger)&lt;br /&gt;
Nom du produit :KeyGrabber USB&lt;br /&gt;
Société : keelog&lt;br /&gt;
&lt;br /&gt;
Description générale:&lt;br /&gt;
Périphérique USB se plaçant entre le port USB de l’ordinateur et le clavier, enregistre l’activité du clavier sur une mémoire interne. Les données peuvent être récupérées ou effacées avec la bonne combinaison de touches. &lt;br /&gt;
Caractéristiques :&lt;br /&gt;
-données cryptées&lt;br /&gt;
-longueur 38mm&lt;br /&gt;
-taille du stockage interne comprise entre 16Mo et 8Go&lt;br /&gt;
-prix entre 43.99$ et 83.99$&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
&lt;br /&gt;
Le second concurrent est celui de la clé USB.&lt;br /&gt;
&lt;br /&gt;
Nom : USB RUBBER DUCKY&lt;br /&gt;
Société :hak5&lt;br /&gt;
&lt;br /&gt;
Description général:&lt;br /&gt;
Il s'agit d'un périphérique USB reconnu en tant que clavier. Il injecte des instructions présentes sur la carte micro SD.&lt;br /&gt;
&lt;br /&gt;
Il est facile d'utilisation car il suffit d'écrire les instructions dans un fichier texte, dans un langage spécifique.&lt;br /&gt;
Son prix est de 44,99$.&lt;br /&gt;
&lt;br /&gt;
Source : https://shop.hak5.org/products/usb-rubber-ducky-deluxe&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Différence entre notre projet et le concurrent :&lt;br /&gt;
Notre périphérique comparé au KeyGrabber aura à peu près les mêmes caractéristiques techniques.&lt;br /&gt;
La différence majeure réside dans la discrétion de celui-ci, le keygrabber étant une clef USB il est facilement repérable ce qui rend seulement utilisable à l’arrière des tours. Tandis que notre clavier restera inaperçu sur n’importe quelle machine.&lt;br /&gt;
&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
=III. Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=IV. Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67300</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=67300"/>
				<updated>2019-02-05T10:17:25Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
* et une clef USB&lt;br /&gt;
&lt;br /&gt;
Chacun des périphériques sera construit autour d'un ATMEGA16u2 gérant le protocole USB.&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED. &amp;lt;br&amp;gt;&lt;br /&gt;
La fonctionnalité supplémentaire en un enregistrement des touches tapées par l'utilisateur espionné. Le contenu de cet historique sera stocké dans une mémoire interne du clavier et pourra être visualisé et supprimé en ouvrant un lecteur de fichier texte et en entrant la bonne combinaison.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possèdera des boutons. &amp;lt;br&amp;gt;&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD. &amp;lt;br&amp;gt;&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier sur le bus et pourra entrer des lignes des codes de télécharger un logiciel de surveillance sur le PC connecté.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser des périphériques USB artisanaux avec des fonctionnalités supplémentaires.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=66500</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=66500"/>
				<updated>2019-01-29T11:02:07Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Trois périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
*une clef USB&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&lt;br /&gt;
La fonctionnalité supplémentaire consiste en un programme lancé par une combinaison de touches enregistré dans une mémoire interne au clavier. Ce programme sera entièrement paramétrable via le clavier.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possèdera des boutons.&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier sur le bus et pourra entrer des lignes des codes de télécharger un logiciel de surveillance sur le PC connecté.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser des périphériques USB artisanaux avec des fonctionnalités supplémentaires.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=66499</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=66499"/>
				<updated>2019-01-29T11:01:57Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
3 périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
*une clef USB&lt;br /&gt;
&lt;br /&gt;
Le clavier aura pour fonction de gérer les entrées et quelques LED.&lt;br /&gt;
La fonctionnalité supplémentaire consiste en un programme lancé par une combinaison de touches enregistré dans une mémoire interne au clavier. Ce programme sera entièrement paramétrable via le clavier.&lt;br /&gt;
&lt;br /&gt;
La souris contrôlera le déplacement du curseur et possèdera des boutons.&lt;br /&gt;
Elle contiendra également un mode &amp;quot;Berserk&amp;quot; qui cliquera aléatoirement sur l'écran. Ce mode sera déclenchable à distance.&lt;br /&gt;
&lt;br /&gt;
Enfin, la clef USB sera utilisée comme lecteur de carte SD.&lt;br /&gt;
En cas d'inactivité prolongée, elle émulera un clavier sur le bus et pourra entrer des lignes des codes de télécharger un logiciel de surveillance sur le PC connecté.&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser des périphériques USB artisanaux avec des fonctionnalités supplémentaires.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
création d'un clavier physique et son driver&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
création du souris physique et son driver&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=66476</id>
		<title>IMA3/IMA4 2018/2020 P12</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2018/2020_P12&amp;diff=66476"/>
				<updated>2019-01-29T10:35:29Z</updated>
		
		<summary type="html">&lt;p&gt;Mduquesn : /* Présentation générale */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Présentation générale=&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
3 périphériques sont envisagés :&lt;br /&gt;
*un clavier&lt;br /&gt;
*une souris&lt;br /&gt;
*une clef USB&lt;br /&gt;
&lt;br /&gt;
==Objectifs==&lt;br /&gt;
Notre objectif est de réaliser des périphériques USB artisanaux avec des sous fonctions.&lt;br /&gt;
&lt;br /&gt;
=Analyse du projet=&lt;br /&gt;
&lt;br /&gt;
==Positionnement par rapport à l'existant==&lt;br /&gt;
==Analyse du premier concurrent==&lt;br /&gt;
==Analyse du second concurrent==&lt;br /&gt;
==Scénario d'usage du produit ou du concept envisagé==&lt;br /&gt;
==Réponse à la question difficile==&lt;br /&gt;
==Bibliographie et webographie==&lt;br /&gt;
&lt;br /&gt;
=Préparation du projet=&lt;br /&gt;
&lt;br /&gt;
==Cahier des charges du groupe==&lt;br /&gt;
==Cahier des charges des équipes==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Choix techniques : matériel et logiciel==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Liste des tâches à effectuer==&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
==Calendrier prévisionnel==&lt;br /&gt;
Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.&lt;br /&gt;
===Equipe 1===&lt;br /&gt;
===Equipe 2===&lt;br /&gt;
===Equipe 3===&lt;br /&gt;
&lt;br /&gt;
=Réalisation du Projet=&lt;br /&gt;
&lt;br /&gt;
==Projet S6==&lt;br /&gt;
&lt;br /&gt;
Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.&lt;br /&gt;
&lt;br /&gt;
===Semaine 4===&lt;br /&gt;
===Semaine 5===&lt;br /&gt;
===Semaine 6===&lt;br /&gt;
===Semaine 7===&lt;br /&gt;
===Semaine 8===&lt;br /&gt;
===Semaine 9===&lt;br /&gt;
===Semaine 10===&lt;br /&gt;
===Semaine 11===&lt;br /&gt;
===Semaine 12===&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S7==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;br /&gt;
&lt;br /&gt;
==Projet S8==&lt;br /&gt;
&lt;br /&gt;
===Documents Rendus===&lt;/div&gt;</summary>
		<author><name>Mduquesn</name></author>	</entry>

	</feed>