• No products in the cart.

  • LOGIN

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 :

Messages chiffrés Discord

Voir aussi :

décembre 20, 2021

Poster un commentaire

Please Login to comment

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Culte du code | 2015-2022  (Vecteurs par Freepik, Parallax par fullvector)