N-PN White-Hat Project
[Python] Script de protection des fichiers XML de Filezilla - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27)
+--- Sujet : [Python] Script de protection des fichiers XML de Filezilla (/showthread.php?tid=1882)



[Python] Script de protection des fichiers XML de Filezilla - Dobry - 10-01-2012

Bonjour il y a quelque temps j'avais entrepris de protéger les fichiers XML de filezilla car je les trouvais très limite au niveau sécurité (notamment sur Windows, avec les stealers et toute ces merdes, et je parle en connaissances de causes xD).
j'avais abandonnée ce projet à cause de la partie cryptage en C++.
Maintenant, le tool est opérationnel, et la seule difficultée qui persiste, sont les dépendances nécessaire à la compilation, et seul vous pouvez gérer cela.
En effet, car j'ai décidé que pour prévoir une protection optimum (bien que loin d'être maximal, on pouvait directement s'attaquer au code source de la bête).
Le code est le suivant :
Code PHP :
#coding=utf-8


#   ___________.__.__                .__.__  .__         
#   _   _____/|__|  |   ____ _______|__|  | |  | _____   
#    |    __)  |  |  | _/ __ \___   /  |  | |  | __   
#   |        |  |  |_  ___/ /    /|  |  |_|  |__/ __ _
#   ___  /   |__|____/___  >_____ __|____/____(____  /
#       /                 /      /                 /
#   __________         __         .__                 
#   ______   _____ _/  |_  ____ |  |__   ___________
#   |     ___/__  \   __/ ___|  |  _/ __ _  __ 
#   |    |     / __ |  |   ___|   Y    ___/|  | /
#   |____|    (____  /__|  ___  >___|  /___  >__|   
#                  /          /     /     /       

##############################################################
#                                              #
# Ce programme protège vos informations sur Filezilla en     #
# cryptant les fichiers contenant ces informations.          #
# une clé de 8 caractères aléatoire est générée puis utilisée#
# Utilisation :                                   #
#   - Placez Filezillapatcher.py dans un dossier          #
#   - Lancez la commande : "python FilezillaPatcher.py"       #
# Attendez la fin du téléchargement et de la compilation puis#
# profitez d'un version sécurisé de Filezilla.             #
# Necromoine (hwc-crew.com)                            #
# Thank's to : Fr0g, Kallimero, Armel                   #
#                                              #
#############################################################

import random
import tarfile
import urllib
import platform
import os

def generation
():
   
''' Fonction qui génère une chaine à 8 caractères ''' # create a 8 length varariable
   
chaine 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789'
   
0
   
final = ''
   
while 9# nombre de caractères générés par la boucle
      
aleatoire random.randint(0,65# nombre de caractères de la chaine 'chaine'
      
final = final + chaine[aleatoire:aleatoire+1]
      
a1
   
return final
   
def remplacement(fichiernumeroremplacement): # Remplace one line by an other one with the
   
''' Remplace une ligne dans un fichier donné '''
   
lignes = []
   
with open(fichier'r') as fichiers:
      for 
ligne in fichiers:
         
lignes.append(ligne)
   
   
code remplacement 'n'
   
lignes[numero-1] = remplacement
   
   with open
(fichier'w') as fichiers:
      for 
ligne in lignes:
         
fichiers.write(ligne)
   
   

''' Boucle principale du programme '''

# Prérequis pour la suite

try:
   
urllib.urlretrieve('http://sourceforge.net/projects/filezilla/files/FileZilla_Client/3.5.0/FileZilla_3.5.0_src.tar.bz2''Filezilla.tar.bz2')
except:
   print 
'Impossible de telecharger le programme, verifiez votre connexion internet'
   
quit()
else:
   print 
'Telechargement du programme...'

   
archive tarfile.open('Filezilla.tar.bz2''r')
archive.extractall()
   
# Partie une : modification des scripts

phrase '\n wxString EncryptString(std::string toBeEncrypted,std::string sKey){\n std::string sEncrypted(toBeEncrypted);\n unsigned int iKey(sKey.length()), iIn(toBeEncrypted.length()), x(0);\n for(unsigned int i = 0; i < iIn; i++){\n'
phrase += ' sEncrypted[i] = toBeEncrypted[i] ^ sKey[x] & 10;\n if(++x == iKey){ x = 0; }\n }\n wxString toReturn(sEncrypted.c_str(), wxConvUTF8);\n return toReturn;\n }\n'
remplacement('filezilla-3.5.0/src/interface/queue_storage.cpp',20 phrase)
phrase '\n wxString EncryptPass(std::string toBeEncrypted,std::string sKey){\n std::string sEncrypted(toBeEncrypted);\n unsigned int iKey(sKey.length()), iIn(toBeEncrypted.length()), x(0);\n for(unsigned int  i = 0; i < iIn; i++){\n'
phrase += ' sEncrypted[i] = toBeEncrypted[i] ^ sKey[x] & 10;\n if(++x == iKey){ x = 0; }\n }\n wxString toReturn(sEncrypted.c_str(), wxConvUTF8);\n return toReturn;\n }\n'
remplacement('filezilla-3.5.0/src/interface/xmlfunctions.cpp'6phrase)
code generation()
phrase 'Bind(insertServerQuery_, server_table_column_names::password, EncryptString(std::string(server.GetPass().mb_str()), "' code '"));'
remplacement('filezilla-3.5.0/src/interface/queue_storage.cpp'620phrase)
phrase 'pass = EncryptString(std::string(GetColumnText(selectServersQuery_, server_table_column_names::password).mb_str()), "' code '");'
remplacement('filezilla-3.5.0/src/interface/queue_storage.cpp'888phrase)
phrase 'AddTextElement(node, "Pass", EncryptPass(std::string(server.GetPass().mb_str()), "' code '"));'
remplacement('filezilla-3.5.0/src/interface/xmlfunctions.cpp'700phrase)
phrase 'pass = EncryptPass(std::string(GetTextElement(node, "Pass").mb_str()), "' code '");'
remplacement('filezilla-3.5.0/src/interface/xmlfunctions.cpp'595phrase)


if 
platform.system() == 'Windows':
     print 
'Le script ne comprend pas la compilation sous Windows, compilez à la main (les instructions sont disponibles sur le site de filezilla)' # can't compile if windows
if platform.system() == 'Linux'# if linux, we compile this is here there are problems
   
os.chdir('filezilla-3.5.0/')
   
os.system('sudo ./configure && make && make install')
   print (
'Filezilla Patcher a correctement effectue les modifications au logiciel')  
raw_input('Appuyez sur une touche pour quitter'

Vous pouvez aussi retrouver le fichier en téléchargement directement sur http://hwc-crew.com/index.php?id=30

j'ai testé sur deux de mes ordinateurs, et je n'ai eut que quelques problème de dépendance au niveau de wxwidget, que j'ai résolut en suivant l'installation de wxwidget ici :
http://wiki.filezilla-project.org/Cross_Compiling_FileZilla_3_for_Windows_under_Ubuntu_or_Debian_GNU/Linux

Pour ceux qui s'interesserait au code géneré, vous pourrez remarquer qu'il existe deux fois la même fonction mais avec un nom différent, et cela, uniquement par flemmardise (je changerais peut etre ca dans une mpise à jour future).

Si vous avez des questions aussi bien sur le code que sur le fonctionnement du tool, n'hésitez pas à me contacter.