Aller au contenu
Top-Metin2.org - Vous êtes à la recherche d'un serveur Metin 2 ? ×
×
×
  • Créer...

Python - 1: Développons notre anti-cheat en Python


Messages recommandés

  • Robot

Centre de Téléchargement

Hidden Content

    Give reaction to this post to see the hidden content.
( Interne )

Salut ! 

 

Je vais essayer de vous faire une suite de tutoriels vous permettant d'apprendre au fur à mesure à protéger votre client. Je vais le faire comme si j'étais seule devant mon Python, et donc le faire étape par étape. Des fois je reviendrais sur ce que j'ai fais etc. Je vous proposerais également plusieurs choix des fois.

Je vais également essayer d'utiliser une langage simple et des algorithmes simples également. Mon but étant que même les débutants en Python arrive à me comprendre.

 

Avant toute chose, nous allons essayer de comprendre où nous devons placer notre anti-cheat pour qu'il puisse fonctionner d'une manière optimale...

Nous verrons ensuite petit à petit comment arriver à réaliser nos projets, dans le but de faire un anti cheat des plus efficaces.

Tous les fichiers développés lors de ces tutoriels seront bien sûr à disposition, en téléchargement à la fin du tutoriel.

 

Je vous propose de commencer maintenant.

 


 

Où pouvons nous placer notre anti-cheat ? Sous quel forme ? 

 

Et bien, pour cet anti-cheat nous allons le placer dans un fichier Python à part. Je vais moi utiliser un fichier nommé takuma.py.

Nous devons déjà placer ce fichier dans le root. Nous allons ensuite devoir trouver quel fichier devra l'éxécuter.

 

Je vous aide, nous allons choisir pour ça le prototype.

 

Ajoutez donc dans votre prototype.py à la première ligne : 

 

Citation

import takuma

Adaptez biensûr le nom au fichier .py que vous avez crée précédemment dans votre archive root.

 

Une fois ceci fait, nous allons maintenant travailler exclusivement (ou presque) dans ce fichier.

 


 

Je vous propose dans ce premier tutoriel de remanier un fichier déjà partagé : 

 

Hidden Content

    Give reaction to this post to see the hidden content.

 

Nous allons d'abord étudier le principe de ce fichier,ça fonction et comment il fonctionne. Nous verrons ensuite comment nous pouvons le modifier afin de l'améliorer. Je pense qu'avant de créer entièrement des fichiers, une petite initiation avec des modifications ne peut, je pense pas vous faire de mal.

 

Commençons ! 

 


 

Bien, pour commencer, je vous propose dans ce tutoriel de faire une chose assez simple, c'est un entraînement pour vous mettre dans le bain :

 

Nous allons reprendre l'ancien système et mettre une liste au début de notre takuma.py avec toutes les extensions à ban, c'est tout ce que nous allons avoir à toucher pour modifier les extensions à ban.

Bien, essayons d'abord de comprendre ce que fait notre fameux système.

 

Notre système commence par : 

import dbgimport appimport os
 

Jusque là, ça va nous avons donc trois import, os, app et dbg.

 

Avec ça, nous pouvons accéder au paramètres de l'application (metin2client.exe) = app, se balader dans les destinations de fichiers = os, et afficher des fenêtres d'erreur = dbg.

 

Bien, nous avons ensuite 5 fonctions marqués par : 

def RunCheckUp():def RunCheckUp1():def RunCheckUp2():def RunCheckUp3():def RunCheckUp4():
Et nous retrouvons à la fin du fichier de quoi les exécuter : 
RunCheckUp()RunCheckUp1()RunCheckUp2()RunCheckUp3()RunCheckUp4()
Déjà, dans notre système je vous propose d'enlever ce principe de fonction, nous lancerons directement le script à chaque démarrage de notre fichier Python.

Bien regardons maintenant ce que nous avons dans nos fonctions : 

Ordner = os.listdir('.')
 

Le code crée ici une variable nommée "Ordner" qui contient la destination où se trouve l'exe.

Ordner.sort()
 

Nous disons ici en quelques sortes : La variable Ordner correspond maintenant au fichier dans l'ordre alphabétique qui se trouve dans ta destination, je ne sais pas vraiment comment expliquer ça... ^^

Nous entamons ensuite une boucle for :

for Datei in Ordner:
 

Cette boucle dit : "Pour chaque fichier dans notre variabe Orner, tu fais ça : 

Regardons ce qu'il doit faire ! 

if Datei.find('.m3d') != -1: 
 

Si dans le nom du fichier il trouve '.m3d' alors : 

dbg.LogBox("Une erreur est survenue: " + str(Datei) + "")
 

Nous envoyons une boite dialogue contenant "Une erreur est survenue" et nous affichons en plus à l'utilisateur le nom du fichier qui a provoqué l'erreur.

try:
 

Nous essayons ici quelque chose. On dit au programme, essaye de :

os.remove(Datei)
 

On lui dit ici de supprimer le fichier qui a provoqué l'erreur.

except:
 

S'il n'y arrive pas, alors :

dbg.LogBox("Erreur !")
dbg.LogBox("Fichier: " + str(Datei))
 

On affiche une boite d'erreur contenant "Erreur !" et une autre contenant "Fichier : " et le nom du fichier.

app.Abort()
 

Nous finissons par dire à l'application de se fermer.

else:   pass
 

S'il ne trouve aucune extension prohibée, alors il peut continuer, on ne fait rien.

Et voilà, pour chaque fonction, il fait ça.

 


 

Bien, pour commencer à remanier ce fichier, voyons comment nous allons faire.

Moi je vous propose (et vous n'avez pas vraiment le choix en fait...) de créer une liste nommée "BanExt" qui va contenir toutes les extensions à bannir.

 

Nous allons ensuite pour chaque extension vérifier si aucun fichier n'a cette extension dans la racine de notre client.

Nous aurons aussi besoin de 3 imports, ceux se trouvant déjà dans l'autre fichier.

 

Bien, bien ! Ouvrons donc notre fichier takuma.py qui est vide pour l'instant.

Comme précisez ci-dessus, ajoutez : 

012857Capture.PNG

 

Nous allons maintenant créer notre liste, tapons :

013011Capture.PNG

 

Nous allons dans notre liste mettre les extensions à ban, mettons pour l'instant celles qui étaient déjà présente.

013234Capture.PNG

 

Notez que chaque Membre de la liste est séparé par une virgule, sauf le dernier car il n'y a plus de membre derrière lui.

Pour ce qui voudrait le code : 

#Importations :

import os
import app
import dbg

#Création de notre liste :

BanExt = [".m3d", ".py", ".fld", ".mix", ".asi"]
Bien, maintenant nous allons dire à Python : 

Pour chaque Membre de Ban Ext :

 

   Tu vérifies si des fichiers contiennent cette extension

    Pour chaque fichiers contenant l'extension :

        Tu essayes:

             De le supprimer,

         SI tu y arrives pas :

             Tu fermes le client.

 

Bien, par exemple pour chaque membre, tapons : 

013611Capture.PNG

 

Nous disons ici simplement à Python pour chaque membre de BanExt tu fais ça : 

Oh !  La boulette !  J'ai oublié de définir la destination ! (Je vous ai dis que je faisais tout en directe ahah ! Allons-y, en dessous de notre BanExt, tapons : 

Dest = os.listdir('.')Dest.sort()
Nous créons ici une variable nommée "Dest" qui contient la liste des fichiers de la racine du client.

Bien, retournons derrière notre boucle for.

 

Et bien, pour chaque fichier de Dest, on va vérifier si un (ou plusieurs) contient(ou contiennent) cette extension :

014007Capture.PNG

 

Nous devons vérifier si les noms contiennent notre extensions, soit le contenue de notre variable Member : 

014152Capture.PNG

 

Nous allons afficher une petite erreur à l'utilisateur pour lui dire qu'un fichier indésirable à été trouvé, mettons par exemple :

dbg.LogBox("Une erreur est survenue: " + str(File) + "")
 

Nous envoyons ici une erreur contenant "Une erreur est survenue: " Et le nom de notre fichier. (Le str correspond à String en gros, c'est pour dire qu'on affiche le nom en tant que texte. Vous êtes obligé désolé ;) ).

Cela donne : 

014427Capture.PNG

 

Nous allons maintenant essayer de le supprimer, "ESSAYER". Nous allons donc utiliser la bloc "try", nous ferons ensuite appelle à la fonction remove qui sert à supprimer un fichier (fonction d'os) :

014632Capture.PNG

 

Maintenant, s'il n'y arrive pas : 

014750Capture.PNG

 

Le code pour ceux qui voudraient copier/coller : 

#Importations :
import os
import app
import dbg

#Création de notre liste :
BanExt = [".m3d", ".py", ".fld", ".mix", ".asi"]

#Définition de la destination :
Dest = os.listdir('.')
Dest.sort()

#Pour chaque Membre de notre liste nommée "Ban Ext" :
for Member in BanExt:
	#Pour chaque fichier dans notre destination :
	for File in Dest:
		#Si un fichier contient l'extention :
		if File.find(Member) != -1:
        	#On affiche une erreur :
			dbg.LogBox("Une erreur est survenue: " + str(File) + "")
			#On essaye de :
			try:
				#Supprimer le fichier :
				os.remove(File)
			#Si il n'arrive pas à le supprimer :
			except:
				#On affiche deux erreurs :
				dbg.LogBox("Erreur !")
				dbg.LogBox("Fichier: " + str(File))
				#On ferme le client
				app.Abort()
Et bien, testons notre code ! 

 

014937Capture.PNG

 

 

Ça marche ! 

Que demander de plus ?!!

 


Voilà, on va s'arrêter là pour ce premier tuto où on a fait que de la reformulation en quelque sorte.

 

On fera de la création la prochaine fois !  Si vous avez des idées sur ce que vous voulez... Je suis preneur ahah ! 

 

Cordialement, Takuma.

 

  • Metin2 Dev 1
  • Love 2

french_banner.gif

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 8
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet



  • brilliantdiscord_widget
  • Flux d'Activité

    1. 21

      Metin2 en 2020 peut-on en parler?

    2. 0

      METIN2Project

    3. 3

      Ressources - UnPack - Metin2 Client - Officiel

    4. 0

      Barre des tâches d'argent étendue

    5. 16

      Redémarrage automatique des channels

    6. 16

      Multi Logo GM / SGM / GA

  • En ligne récemment

    • Aucun utilisateur enregistré regarde cette page.

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.