Envoyer des mails dans le passé

Plop à tous …

Aujourd’hui, une astuce de « gros noob », le but est d’envoyer un mail à une date passée ou future, genre pour le rendu d’un devoir à 23h59m59s alors qu’on vient de le terminer à 2h42 du mat, tout en sachant que le prof ne le lira pas avant 7 ou 8 heures du mat’ … le truc totalement useless quoi, mais souvent on perd des points pour des trucs de ce genre, … (quoi ?? ça vous est jamais arrivé ?? bande de lèche-*** ….)

Les plus futés sauront qu’en modifiant la date de leur machine, on peut fausser les dates d’envoi (genre en reculant la date de deux jours, la plupart des mailers/logiciels de récupération de mails vont afficher le mail comme étant reçu il y a deux jours …).

Mais nous sommes informaticiens, et ce genre de méthode, c’est pour les noobs … nous on va coder un bon gros serveur SMTP pour envoyer des mails dans le temps xD…

En fait en python, ça consiste en 40 lignes de codes … (et encore … c’est crade comme d’hab 😉 ).

L’utilisation du script suivant ce fait comme suit :

 
./nomDuScript 'adresse serveur smtp du fai' '25' "date d'envoi"

Ou, si l’on veut rajouter des faux headers (histoire d’expliquer le retard du mails, ou rajouter de faux relais …)

 
./nomDuScript 'adresse serveur smtp du fai' '25' "date d'envoi" '/chemin/du/fichier contenant/les/headers'

Un fichier d’exemples de (fake) headers à rajouter :

Received: from [1.3.3.7] (helo=lol.kikoo.rox)
      by leskikoolol.attaqu.ent with esmtp id m4573r-573417-00
      for lolmaster@kikoo.rox; Sat, 20 mar 2010 01:02:03 +0000
Received: from kikoo.lol.rox (kikoo.lol.rox [10.3.3.7])
      by lol.kikoo.rox with ESMTP id f7O1Sci1337
      for lolmaster@kikoo.rox; Sat, 20 Mar 2010 00:00:00 +0000

et l’exemple d’utilisation pour le header en question :

 
./nomDuScript 127.0.0.1 25 "Fri, 19 Mar 2010 23:59:58 +0000" headers

Qui permettra de faire croire à votre correspondant ici lolmaster@kikoo.rox :

  • que vous avez envoyé votre mail vendredi 19 mars 2010 à 23h59, par votre machine nommée « kikoo.lol.rox » à l’ip 10.3.3.7
  • que le mail a été reçu à minuit par le serveur smtp à l’ip 1.3.3.7 nommé « lol.kikoo.rox »
  • puis, que le mail a été relayé à 01h02 par le serveur smtp nommé « leskikoolol.attaqu.ent »

Ce qui expliquera au correspondant le temps de latence entre l’envoi du mail et sa réception. (Faudra bien sûr changer les infos pour coller à la réalité ^^)

Le script, qui créé un serveur SMTP sur le port 8025 (il faudra configurer votre client mail pour utiliser le serveur SMTP 127.0.0.1 sur le port 8025) :

#!/usr/bin/env python

from smtpd import PureProxy
import asyncore
import asynchat
import smtplib
import re
import sys
 
class mySMTP (PureProxy):
    def __init__(self,s,n,d,f=""):
        self.date = d
	self.serv = n
	self.fich = f
        PureProxy.__init__(self,s,None)
	
    def process_message (self, peer, mailfrom, rcpttos, data):
	p = re.compile("Date: .*")
	data = p.sub("Date: "+self.date,data)
	if self.fich !="":
            f = open(self.fich,'r')
	    t = f.read(1024)
	    f.close()
	    data = t + data
	    print "Message + header: "+data
	smtpSender = smtplib.SMTP( self.serv[0], self.serv[1] )
	smtpSender.sendmail( mailfrom, rcpttos, data )
	smtpSender.quit()
	return None
 
if __name__ == "__main__":
    if len(sys.argv)<4:
        print "Il manque des arguments : "+sys.argv[0]+" 'serveur smtp','port','date'[, 'fichier header']"
        sys.exit(2)
    if len(sys.argv) == 4:
        serv = mySMTP (("127.0.0.1", 8025), (sys.argv[1],sys.argv[2]),sys.argv[3])
    if len(sys.argv) == 5:
        serv = mySMTP (("127.0.0.1", 8025), (sys.argv[1],sys.argv[2]),sys.argv[3],sys.argv[4])	
    try:
        asyncore.loop ()
    except KeyboardInterrupt:
        pass

Amusez-vous bien 😉