Comment chiffrer/déchiffrer tous ses messages privés (MP) sur Discord


TL;DR

Si vous ne souhaitez pas lire l’article, installez Python puis en ligne de commandes installez les dépendances suivantes avant de lancer le script disponible en fin d’article :

pip install colorama
pip install pycryptodome
pip install discord.py

Obfusquer (rendre illisible) des messages privés sur Discord

Discord regorge de serveurs en tout genre, parfois politisés ou sensibles tels que ceux traitant de sujets borderline (le hacking pour ne citer que lui). Vous êtes donc rapidement susceptible un jour ou l’autre de discuter en message privé à certaines personnes de choses qui feraient mieux de rester privé en toute circonstances.

Malheureusement, ce n’est jamais complètement possible ! Discord n’étant de plus, pas un des logiciels de communication les plus sécurisés que ce soit au niveau de l’acheminement des données ou du nombre impressionnant de hackers tentant de s’emparer de votre token par n’importe quel moyen.

Alors si un jour pour une raison mystérieuse, vous souhaitez rendre illisibles vos communications avec autrui, plutôt que de supprimer l’ensemble de vos messages et ce, dans le but de les déchiffrer par la suite, ne cherchez pas plus loin : nous avons la solution.

Le membre Ranma Saotome vous a en effet concocté un script Python permettant de chiffrer/déchiffrer tous les messages privés que vous avez échangé avec n’importe qui en un rien de temps. Gardez toutefois à l’esprit que l’utilisation d’un self-bot est interdite selon les termes et conditions de Discord, bien que le risque soit faible, surtout avec le délai entre chaque actions que nous avons ajouté.

La première étape, est d’installer Python dans sa version 3.X, disponible à l’adresse suivante :

Lors de l’installation, n’oubliez pas de cocher la case « Add to path » si vous êtes sous Windows (inutile sous Linux).

Une fois installé, vous devrez dans un premier temps installer les dépendances du script :

pip install colorama
pip install pycryptodome
pip install discord.py

Une fois fait, vous n’aurez plus qu’à télécharger le script :

Télécharger le script

Ou le créer vous-même en local à l’aide du code suivant :

import time

from os.path import isfile
from json import dump, load
from base64 import b64encode as b6e, b64decode as b6d
from secrets import token_hex


from Crypto.Cipher import AES
from colorama import init, Fore, Style
from discord.ext import commands
from discord import DMChannel

#
init(autoreset=True)

user_Account = commands.Bot(command_prefix="!", help_command=None, self_bot=True)


@user_Account.event
async def on_connect():
    print('')
    print(Style.BRIGHT + Fore.LIGHTYELLOW_EX + '[!] Successfully connected', end='\n\n')
    print(Style.BRIGHT + Fore.LIGHTGREEN_EX + f'Welcome {user_Account.user}, your id is: {user_Account.user.id}')


#


@user_Account.command()
async def encrypt(ctx):
    #
    """user = await user_Account.fetch_user(receiver)
    channel = user_Account.get_channel(user.id)"""
    await ctx.message.delete()
    messages = await ctx.channel.history(limit=1000).flatten()
    with open('token.json', 'r') as f:
        key = load(f)['aes_key']
    for msg in messages:
        if msg.author.id == user_Account.user.id:
            try:
                await msg.edit(content=MANAGER().encryptMessage(key, str(msg.content)))
                time.sleep(0.5)
                #
            except ValueError:  # Padding error happens for spec messages => b64 then
                try:
                    await msg.edit(content=b6e(msg.content.encode()).decode())
                except ValueError:
                    print("message can't be encoded")


#


@user_Account.command()
async def decrypt(ctx):
    #
    """user = await user_Account.fetch_user(receiver)
        channel = user_Account.get_channel(user.id)"""
    await ctx.message.delete()
    messages = await ctx.channel.history(limit=1000).flatten()
    with open('token.json', 'r') as f:
        key = load(f)['aes_key']
    for msg in messages:   # Ignore the command !decrypt or I can juste delete it messages[1:]
        if msg.author.id == user_Account.user.id:
            try:
                await msg.edit(content=MANAGER().decryptMessage(key, str(msg.content)))
                time.sleep(0.5)
                #
            except ValueError:  # Padding error happens for spec messages => b64 then
                try:
                    await msg.edit(content=b6d(msg.content.encode()).decode())
                except ValueError:
                    print("message can't be decoded")


#


def get_Token():
    #
    if not isfile('token.json'):
        print(Style.BRIGHT + Fore.LIGHTYELLOW_EX + '[!] Token not found !!', end='\n\n')
        #
        with open('token.json', 'w') as f:
            print(Style.BRIGHT + Fore.LIGHTYELLOW_EX + '[!] Please enter your token: ')
            token = input('')
            dump({'token': b6e(token.encode()).decode(), 'aes_key': token_hex(16)}, f, ensure_ascii=False, indent=4)

    with open('token.json', 'r') as f:
        content = load(f)
        return b6d(content['token']).decode()


#


class USER:
    def __init__(self):
        self.TOKEN = get_Token()
        #

    def Login(self):
        user_Account.run(self.TOKEN, bot=False)
        #


class MANAGER:
    def __init__(self):
        self.algo = AES
        self.MODE = self.algo.MODE_CBC
        self.pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16)
        self.unpad = lambda s: s[:-ord(s[len(s) - 1:])]
        self.iv = b'\x00' * 16

    #

    def encryptMessage(self, key: str, message_content: str):
        return b6e(self.algo.new(key.encode(), self.MODE, self.iv).encrypt(self.pad(message_content).encode())).decode()

    def decryptMessage(self, key: str, message_content: str):
        return self.unpad(self.algo.new(key.encode(), self.MODE, self.iv).decrypt(b6d(message_content.encode())).decode())


#


if __name__ == '__main__':
    print('SELF-bot messages editor by Ranma Saotome & bugfix by DK')
    User = USER()
    User.Login()

Il faudra renseigner dans un premier temps votre token afin de générer un fichier contenant votre clé AES et votre token pour permettre de chiffrer/déchiffrer dans les deux sens.

Une fois cela fait, rendez-vous dans les MP d’un de vos contacts et écrivez :

!encrypt

ou :

!decrypt

Afin de chiffrer ou déchiffrer les 1000 derniers messages recensés. (du plus récent au plus vieux). Si vous souhaitez en chiffrer davantage, il suffit de modifier la valeur « 1000 » contenue dans les fonctions encrypt et decrypt par le chiffre de votre choix :

messages = await ctx.channel.history(limit=1000).flatten()

Et voilà ! Vos messages seront désormais illisible pour les tierces personnes :

Comment retrouver le compteur de dislikes (j’aime pas) sur YouTube


TL;DR

Si vous ne souhaitez pas lire l’article, installez l’une des extensions suivantes selon votre navigateur :


Pourquoi Youtube a supprimé le compteur de dislikes (j’aime pas)

Ça y est, c’est officiel. À partir d’aujourd’hui YouTube a exécuté sa menace et supprimé le compteur qui affichait le nombre de personnes qui n’aimaient pas les vidéos.

Tout est parti d’un simple constat de la part de YouTube qui avançait il y a de cela deux semaines, que cacher le compteur de dislikes n’influencerait pas sur l’expérience des utilisateurs :

Selon eux, même si une vidéo était très mal notée cela ne faisait pas constamment fuir les utilisateurs qui pouvaient tout de même rester sur la vidéo afin de juger d’eux même de sa qualité. Or, que ce soit vrai ou non, ils ne parlent ici en vérité que d’une minorité de personnes.

Il suffit de s’intéresser à des secteurs de niche tel que le warez sur YouTube pour se rendre compte que ce fameux compteur était absolument un critère de choix lors du visionnage des vidéos.

Alors ça y est, désormais vous ne verrez plus que les likes :

Peut-être que bientôt le compteur de likes viendra à disparaître, si YouTube continue sur cette voie, sachant que celui-ci n’est plus utile compte tenu du fait que nous n’avons plus accès au ratio likes/dislikes. Mais rassurez vous, des développeurs ont déjà bossé sur une solution.

 

Remettre le compteur de j’aime pas (dislike) sur YouTube

Le jour même de l’annonce, celle-ci a fait l’effet d’une forte polémique et des développeurs commenceraient dès lors à travailler sur une alternative, notamment à l’aide de l’API de YouTube elle-même.

Ainsi, tant que YouTube ne décide pas d’également supprimer cette information de son API, les « vrais » compteurs seront toujours récupérables grâce à des extensions.

Voici les plus populaires à ce jour :

Il vous suffit de l’installer, aller sur YouTube et constater le résultat :

Tout sera rentré dans l’ordre, comme par magie ! Il ne reste plus qu’à espérer que cela tiennes et que YouTube ne refasse pas des siennes avant quelque temps ! 😉

Comment compresser et redimensionner des images en masse sous Linux


TL;DR

Si vous ne souhaitez pas lire l’article, exécutez ce pack de commandes dans le dossier contenant vos images :

sudo apt-get update && sudo apt-get install imagemagick optipng jpegoptim && find . -name '*.jpg' -exec mogrify -resize 2500x2500\> {} \; -exec jpegoptim --strip-all --max=80 {} \; && find . -name '*.jpeg' -exec mogrify -resize 2500x2500\> {} \; -exec jpegoptim --strip-all --max=80 {} \; && find . -name '*.png' -exec mogrify -resize 2500x2500\> {} \; -exec optipng -strip all -o2 {} \;

Réduire en masse la taille de toutes les images jpg/jpeg/png d’un dossier

J’ai récemment pris le temps de nettoyer et trier les fichiers de mon ordinateur et c’est à ce moment précis que je me suis rendu compte à quel point les images pouvaient être lourdes. On en arrive parfois à stocker des packs d’images qui ensembles, dépassent largement la taille d’un film.

L’une des premières raisons à cela est l’augmentation de la qualité et de la résolution des appareils photo, qu’ils soient mobiles ou non. Quand aujourd’hui vous pouvez vous procurer pour une centaine d’euros un Xiaomi à 48mpx qui produit des images de plusieurs mégaoctets à l’unité, on comprend vite pourquoi notre téléphone ou carte SD sature en stockage.

Étant sous Linux, je me suis donc penché sur les paquets les plus populaires et relativement performants afin de compresser n’importe quelle image, qu’elle soit au format jpg, jpeg ou png, mais également mettre une résolution maximale de 2500×2500.

 

Installer les paquets d’optimisation d’image imagemagick, jpegoptim et optipng

Afin de parvenir à notre but qui est de diviser le poids de nos images, nous avons besoin d’installer trois paquets :

  1. Imagick qui est nécessaire à jpegoptim
  2. jpegoptim qui optimise les fichiers jpeg et jpg
  3. optipng qui optimise les fichiers png

 

Pour ce faire, exécutez les commandes suivantes :

sudo apt-get update
sudo apt-get install imagemagick optipng jpegoptim

Rien de plus n’est nécessaire.

 

Comment utiliser jpegoptim et optipng

Je ne vais pas y aller par quatre-chemins, voici directement un exemple concret d’utilisation :

find . -name '*.jpg' -exec mogrify -resize 2048x2048\> {} \; -exec jpegoptim --strip-all --max=80 {} \;
find . -name '*.jpeg' -exec mogrify -resize 2048x2048\> {} \; -exec jpegoptim --strip-all --max=80 {} \;
find . -name '*.png' -exec mogrify -resize 2048x2048\> {} \; -exec optipng -strip all -o2 {} \;

Chaque ligne a pour but de :

  1. Chercher tous les fichiers ayant pour extension soit « jpg », « jpeg » ou « png »
  2. Leur mettre une taille maximale de 2048×2048, notez le « /> » après cette résolution, cela signifie qu’il ne faut pas agrandir une image ou la déformer : le ratio sera respecté et seules les images plus grandes seront retaillées
  3. Exécuter une optimisation soit via jpegoptim, soit optipng tout en précisant de retirer toutes les informations inutiles (EXIF par exemple) et conserver une qualité de 80% afin de réduire davantage la taille

 

Et c’est tout. À noter que « mogrify » signifie optimiser l’image directement (écraser l’originale) plutôt que d’en faire une copie et d’avoir à trier par la suite.

Si vous ne souhaitez pas avoir à vérifier quand chaque commande a été effectuée afin de lancer la suivante, vous pouvez combiner les trois en une :

find . -name '*.jpg' -exec mogrify -resize 2500x2500\> {} \; -exec jpegoptim --strip-all --max=80 {} \; && find . -name '*.jpeg' -exec mogrify -resize  2500x2500\> {} \; -exec jpegoptim --strip-all --max=80 {} \; && find . -name '*.png' -exec mogrify -resize  2500x2500\> {} \; -exec optipng -strip all -o2 {} \;

À noter que optipng est le paquet qui semble (au premier abord) le moins performant. Même avec un taux de compression plus élevé (le paramètre -o), celui-ci ne réduit pas la taille autant que ne le fait jpegoptim, en plus d’être beaucoup plus long à l’exécution.

Soutenez nous gratuitement grâce à la monnaie BAT (Basic Attention Token)

L’histoire de Brave, résumée en 2 phrases

En 2016, un nouveau navigateur du nom de « Brave » vit le jour et avec lui, de nombreuses idées ayant pour but de créer un « internet nouveau » (oui, rien que ça).

Le navigateur rencontra progressivement un certain succès notamment grâce au fait qu’il est open source et que son objectif premier est de protéger la vie privée de ses utilisateurs en bloquant par défaut les pisteurs.

 

La création du Basic Attention Token (BAT)

C’est peu de temps après sa création, en 2017, que l’organisme derrière le navigateur décida de créer sa propre monnaie virtuelle : le Basic Attention Token (BAT).

Le principe est simple : lorsque vous naviguez sur des sites ayant rejoint le programme Brave Rewards en tant que créateur et ayant accepté de diffuser de la pub sur leur propre site, vous obtiendrez gratuitement de la monnaie. Monnaie que vous pourrez dès lors utiliser sous forme de donations envers d’autres sites participant au même programme.

Le but premier de cette monnaie est ainsi de soutenir les sites que vous appréciez, sans débourser un centime de votre poche !

 

Le Culte du Code & le BAT

Si vous avez pris la peine de lire le titre de notre article, alors vous aurez compris que nous avons décidés de rejoindre ce même programme afin de participer à ce nouvel écosystème d’échange. Ça, mais également afin de vous permettre de nous soutenir sans pour autant avoir à payer un abonnement à notre MOOC.

Pour ce faire, c’est simple :

  • Téléchargez le navigateur Brave si ce n’est pas déjà fait
  • Visitez notre site
  • Cliquez sur l’icône triangulaire représentant le BAT et envoyez la somme que vous souhaitez ! Évidemment, avant ça il faudra naviguer sur d’autres sites afin d’en récolter un minimum. 😉

 

Comment contourner la vérification d’âge sur YouTube (nouvelle limitation)

YouTube a récemment mis en place un système de vérification d’âge pour les citoyens européens nécessitant une carte bancaire comme justificatif. Heureusement, plusieurs méthodes existent pour contourner cette vérification.

Méthode 1 : Contourner la limite d’âge via NSFW YouTube 

NSFW YouTube permet de débloquer rapidement le visionnage de vidéos.
Pour cela, il suffit d’insérer le mot
nsfw juste avant youtube dans l’URL.

 

 

Vous êtes ensuite redirigé directement vers le site de NSFW YouTube et vous pouvez directement lancer votre vidéo sans soucis.

 

Méthode 2 : Contourner la limite d’âge avec l’embed YouTube

Cette méthode est aussi rapide que la première car il suffit simplement de modifier l’URL
Cette fois-ci, il suffit de remplacer watch?v= par embed/ dans l’URL de la vidéo.

Par exemple :

 

 

 

donnera par la suite :

 

 

Vous arriverez sur une page contenant uniquement la vidéo YouTube.

 

Méthode 3 : Contourner la limite d’âge YouTube avec VLC (lecteur multimédia)

Le logiciel VLC offre la possibilité de regarder des vidéos en streaming. On peut donc aussi regarder des vidéos YouTube avec ce dernier.

1. Commencez par copier l’URL de la vidéo YouTube
2. Ouvrez VLC. Celui est disponible à l’adresse : www.videolan.org
3. Allez dans « Ouvrir un flux réseau » sous l’onglet « Média » ou directement avec le raccourci <Ctrl-N>.

 

 

 

 

 

 

 

 

 

 

4. Collez le lien et lancez la lecture de la vidéo

Client alternatif pour Spotify (fonctionne avec les VPN et le contrôle multimédia)

La problématique Spotify + VPN

Spotify est l’un des services de streaming musical les plus populaires et ce, depuis des années que ce soit sur PC comme sur mobile. Celui-ci propose des listes ainsi que des mixes musicaux générées automatiquement selon vos goûts et de manière relativement précise. L’application PC est également complète et ravira la majorité des utilisateurs, même sans payer d’abonnement (cf. notre article « Avoir Spotify sans publicités gratuitement« ).

En revanche, de plus en plus de personnes sont mécontentes du fait que suite à une mise à jour récente, les VPN (NordVPN par exemple) sont de moins en moins utilisables. En effet, la musique peut jouer sans problème durant quelques minutes, s’arrêter brusquement et carrément afficher un message d’erreur indiquant qu’aucune connexion internet n’est disponible.

Quelle frustration de ne plus pouvoir utiliser son VPN tout en écoutant sa musique favorite !

 

Les alternatives open-sources pour Spotify : des solutions adéquates ?

Nous nous sommes dès lors tourné vers des solutions alternatives open-sources telles que spotify-qt couplé au daemon spotifyd sur Linux, mais en plus de nécessiter pour la plupart un compte premium pour en profiter grandement, nous n’avons pas constatés d’améliorations.

À l’instar de l’application officielle, une musique pouvait se lancer sans problème, mais à la moindre déconnexion même imperceptible du VPN le daemon s’arrête et la musique avec, ce qui force le redémarrage de celui-ci sans cesse.

 

La solution finale : l’application web Electron

Nous avons fini par tester la version web de Spotify afin de vérifier si celle-ci pouvait tourner sans problème avec un VPN, et la réponse est oui. Ça tourne parfaitement et sans coupures.

Alors pourquoi ne pas exploiter directement le lecteur web et en faire une application grâce à Electron ? C’est ce que nous avons fait !

Après avoir rendu le container compatible avec le streaming audio, contourné le service worker qui posait problème lors d’un rechargement ainsi que la redirection permettant de s’authentifier, nous avons finalement réussi à obtenir une application fonctionnelle dont voici une courte description des fonctionnalités :

  • Possibilité d’utiliser un VPN
  • Possibilité de réduire l’application dans la zone de notification (system tray)
  • Possibilité d’utiliser les touches multimédias du clavier afin de contrôler la musique, même une fois l’application réduite
  • Support des notifications push affichant les informations sur le morceau en cours de lecture
  • Fonctionne avec et sans compte premium (la qualité de l’audio est de 128kbit/s pour les non abonnés et de 256kbits/s pour les abonnés)
  • Suppression du lien « Télécharger l’application »
  • Selon la version : suppression du bouton « Passer à Premium » et son blocage des pubs (son coupé)
  • Compatible Windows, OS X & Linux !

Alors sans plus attendre, nous vous laissons tester notre application et nous faire part de vos retours par commentaire ou via notre serveur Discord.

Version CDC (sans blocage de pubs) :

Windows
(32 & 64 bits)

OS X
(Darwin 64 bits)

Linux
(64 bits)

Dernière mise à jour : 20 mai 2021

Version UD (avec blocage des pubs) :

Windows
(32 & 64 bits)

OS X
(Darwin 64 bits)

Linux
(64 bits)

Dernière mise à jour : 25 juillet 2021

Bloquer toutes les pubs Spotify sans premium

Pour rappel, cette solution peut être combinée au blocage des pubs Spotify par le fichier host afin de bloquer la majorité des pubs sans même avoir à les rendre muettes. Grâce à ces deux solutions, vous ne devriez plus entendre une seule annonce ;).

Quitter la version mobile