-
Compteur de contenus
3211 -
Inscription
-
Dernière visite
jamais -
Jours gagnés
9
Type de contenu
Profils
Forums
Boutique
Calendrier
Tout ce qui a été posté par Metin2 Dev
-
Python - Retirer le Clavier à la Connexion
Metin2 Dev a répondu à un(e) sujet de Metin2 Dev dans Programmation & Développement / Codes
Evidemment Cordialement, Takuma. -
Python - Retirer le Clavier à la Connexion
Metin2 Dev a répondu à un(e) sujet de Metin2 Dev dans Programmation & Développement / Codes
Le mieux étant de supprimer le code que j'ai dis, enlever le Show dont tu parles et son constructeur. Cordialement, Takuma. -
Python - Retirer le Clavier à la Connexion
Metin2 Dev a répondu à un(e) sujet de Metin2 Dev dans Programmation & Développement / Codes
Sauf que ça sert a rien de le Hide si tu le Show pas... Même si après, ma méthode est pas propre non plus, loin de là. Cordialement. -
C++ - Changer les Clés de Sécurité Eter LZO
Metin2 Dev a répondu à un(e) sujet de Metin2 Dev dans Programmation & Développement / Codes
Voilà pourquoi il ne le faut pas. ^^' import structprint "Exemple de clé: b99eb0026f69810563989b2879181a00\n"string=raw_input("Clé héxadécimal: ")lista=struct.unpack("LLLL", string.decode('hex'))n=0print "\nGenerateur: \n"for i in lista: n+=1 i=str(i) i=i.replace("L", "") print "A" + str(n) + " = " + i Voilà au passage un petit script Python pour convertir ça^^' Cordialement, Takuma. -
C++ - Changer les Clés de Sécurité Eter LZO
Metin2 Dev a répondu à un(e) sujet de Metin2 Dev dans Programmation & Développement / Codes
Heeuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu non. Cordialement, Takuma. -
C++ - Changer le premier Fichier Python exécuté
Metin2 Dev a répondu à un(e) sujet de Metin2 Dev dans Programmation & Développement / Codes
Certains aiment renommer les fichiers pour donner une certaine logique propre à eux même. D'autre préfère mettre des scripts directement devant pour pouvoir sécuriser au maximum. -
Python - 1: Développons notre anti-cheat en Python
Metin2 Dev a répondu à un(e) sujet de Metin2 Dev dans Programmation & Développement / Codes
SI vous avez des idées pour la suite je suis preneur... Sinon je partirais sur des hash^^' Cordialement, Takuma. -
Centre de Téléchargement Télécharger ( 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 : 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é : ICI 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 : Nous allons maintenant créer notre liste, tapons : Nous allons dans notre liste mettre les extensions à ban, mettons pour l'instant celles qui étaient déjà présente. 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 : 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 : Nous devons vérifier si les noms contiennent notre extensions, soit le contenue de notre variable Member : 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 : 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) : Maintenant, s'il n'y arrive pas : 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 ! Ç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.
-
files freebsd10.3 teamfe
Metin2 Dev a répondu à un(e) question de evolubld dans Questions & Réponses
Les tables SQL ont l'air complètement modifiées x.x tu as installé le fichier mysql des files ? -
files freebsd10.3 teamfe
Metin2 Dev a répondu à un(e) question de evolubld dans Questions & Réponses
Tu as quoi dans ton sysser db comme erreur ? -
Python - Retirer le Clavier à la Connexion
Metin2 Dev a répondu à un(e) sujet de Metin2 Dev dans Programmation & Développement / Codes
C'est tout simplement ceux qui ont peur des keyloggers, comme les touches sont disposées aléatoirement, on ne peut pas savoir ce que tape la personne. Cordialement, Takuma. -
Bonjour, Voici un lien : [Hidden Content] (ne prête pas attention à la lib mysql) Tu dois placer LibiL dans ton fichier lib ou lib32 selon ta version de freebsd. (32 ou 64 bits)
-
Oublie pas de mettre la balise résolu !
-
Tu me tatoueras et tu deviendras mon maître <3
-
Remplaces ton usr metin2 par root^^' Cordialement, Takuma.
-
Tu te connectes avec l'utilisateur 'root' ou 'mt2' ? Cordialement, Takuma.
-
Ton serveur ne peut pas se connecter à ta base de données. Vérifie ton mot de passe. Cordialement, Takuma.
-
J'arrive en lycan <3 , Gurga propre de A à Z , ayant fait l'alpha quelques jours c'est vraiment pas mal du tout !
-
Le lien m'a éboulit les yeux ! Kitkat futur musicien
-
Bienvenue à toi ! Hmm Meshuggah un peu hardcore ça me fait penser à HATE comme groupe.
-
Bienvenue à toi ! Cordialement, Takuma.
-
C++ - Changer le premier Fichier Python exécuté
Metin2 Dev a posté un sujet dans Programmation & Développement / Codes
Salut ! Très court tutoriel juste pour vous montrer comment changer le premier fichier Python chargé qui normalement est le system.py. Pour cela, ouvrez vos sources clients, allez dans UserInterface.cpp, cherchez: if (!pyLauncher.RunFile("system.py")) Changez le system.py par le fichier que vous souhaitez. Attention : Si ce fichier ne se trouve pas dans l'archive root, vous devrez effectuer d'autre modification comme changer le pack charger en premier, mais ça deviendrait compliquer avec tous les autres fichiers Python. C'est tout... Bon développement ! Cordialement, Takuma. -
C++ - Changer les Clés de Sécurité Eter LZO
Metin2 Dev a posté un sujet dans Programmation & Développement / Codes
Bonjour ! Bref tutoriel, car je pense que la sécurité ne doit pas forcément être exclusif. Bon c'est quelque chose d'assez simple, mais ça peut servir, plus votre client aura de chose différente, plus ça peut créer des barrières à quelqu'un. Ça pourrait vite le décourager, ou même le bloquer. Pour cela, allez dans vos sources client, et cherchez (EterPack.cpp) : static DWORD s_adwEterPackKey[] = Vous arriverez normalement sur ça : static DWORD s_adwEterPackKey[] = { 45129401, 92367215, 681285731, 1710201, }; static DWORD s_adwEterPackSecurityKey[] = { 78952482, 527348324, 1632942, 486274726, }; Vous pouvez changer les différentes clés. Attention, si vous disposez d'une autre méthode de compression que la LZO, que ce soit plus récent, ou plus anciens comme la RAW, je ne sais pas si ça va marcher Une fois modifié, votre packer devra subir la même chose. Si vous avez des questions, je peux y répondre. Cordialement, Takuma. -
Salut ! Je vais essayer de vous apprendre quelques trucs sur le root. C'est pas forcément obligatoire de le savoir, mais je pense que comprendre comment marche quelque chose c'est déjà important avant le modifier sans savoir exactement ce que l'on fait. Bon, déjà le root c'est un pack. Mais un pack c'est quoi ? Un pack est composé de deux fichiers : pack.eix --> contient une liste de fichiers (codée bien sûr) qui sont présents dans le .epk. pack.epk --> est une archive, qui contient des fichiers compressés et parfois cryptés. Mais c'est pas juste ça, car le root c'est le pack changé en premier par le client. Et c'est pas une histoire d'ordre dans l'index, car si vous regardez, vous n'aurez même pas le root dans votre Index. Oui, car c'est chargé directement par l'exe, c'est pour ça qu'on dit que ce pack est obligatoire. Après, si vous voulez vraiment le changer, rendez-vous dans vos sources, ouvrez le fichier UserInterface.cpp (qui est le premier fichier cpp chargé dans les sources client au passage) et cherchez : CEterPackManager::Instance().RegisterRootPack((stFolder + std::string("root")).c_str()); Vous pourrez modifier le "root" comme bon vous semble, recompiler, et voir le résultat. Maintenant, dans votre root, vous avez plusieurs fichiers. On va s'intéresser au fichier Python, .py (malgré que un dossier root rangé, il ne vous reste plus que .py et 1 txt il me semble). Vous pouvez remarquer un grand nombre de fichier commence par "ui". Ces fichiers vont... hum... Disons, ils vont créer, définir le fonctionnement d'un système. Prenons ici un exemple simple, ouvrons le uiselectmusic.py : Bon, je ne compte pas vous expliquer les 200 lignes, mais les principales pour vous montrer le but, oui. import app import ui import localeInfo import uiScriptLocale FILE_NAME_LEN = 20 DEFAULT_THEMA = localeInfo.MUSIC_METIN2_DEFAULT_THEMA Ici, nous importons : Une librairie nommée app; Un fichier Python nommé ui (se trouvant au passage dans le root); Le fichier python localeInfo (se trouvant au passage dans le root); le fichier uiScriptLocale(se trouvant également dans notre pack root); Nous définissons ensuite une variable, FILE_NAME_LEN. On lui attribue comme valeur 20. On définie ensuite "un raccourcie", c'est à dire que pour la suite, on pourra utiliser DEFAULT_THEMA au lieu d'utiliser : localeInfo.MUSIC_METIN2_DEFAULT_THEMA. Bien, continuons : On va sauter la classe item, car cela ne vous aidera pas à comprendre ce que je veux que vous compreniez, prenez directement la class PopupDialog(ui.ScriptWIndows): Je voudrais ici que vous donniez un peu de votre attention à ceci : def __Load(self): try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "UIScript/PopupDialog.py") except: import exception exception.Abort("PopupDialog.__Load") Ici, vous avez d'abord une fonction nommée __Load. Elle essaye de : Définir que pyScrLoader défini maintenant ui.PuthonScriptLoader() Elle charge un fichier se trouvant dans le fichier UiScript (qui lui même se trouvez dans le fichier uiscript, mais ceci n'est pas indiqué en Python), le fichier PopupDialog.py Si il y a une erreur : On import le fichier python nommé exception.py (se trouve dans le root) On écrit une erreur : " PopupDialog.__Load" On va pour finir s'intéresser à une fonction très simple mais qui va vous faire comprendre que les fichiers ui, c'est le système en lui même : def __RefreshFileList(self): self.__ClearFileList() self.__AppendFile(DEFAULT_THEMA) self.__AppendFileList("mp3") Ici, nous avons une fonction nommé __RefreshFileList. Comme son nom l'indique, elle vous nous servir à mettre à jour, à rafraîchir la liste de musique se trouvant dans notre liste. Nous appelons ensuite une fonction qui vas nous servir à remettre la liste à 0 Nous appelons ensuite une fonction qui désigne l'emplacement des musiques. Nous appelons encore et toujours une fonction qui défini défini le type des musiques en .mp3. Et un fichier ui c'est ça, on va créer le système en lui même, alors que le design et les éléments eux, seront plus souvent définis dans le pack uiscript, dans les fichiers python. Bref, reprenons. Je voudrais maintenant qu'on se concentre un peu sur le fichier : system.py Pourquoi ? Tout simplement car c'est le tout premier fichier Python chargé dans le client, le deuxième étant le prototype.py. A la fin du fichier vous pouvez retrouver : RunMainScript("prototype.py") --> Ce code va en quelque sorte, passer la main au prototype.py, ce n'est pas un simple import, le fichier prototype ne va pas tourner "sous la dépendance" du system.py. C'est le system.py qui va définir les fonctions principales et nécessaire dès le début au démarrage du client. Les autres fichiers auraient bien du mal à fonctionné si vous le supprimiez... Que dis-je ? Ils ne fonctionneraient même pas du tout. J'aimerais maintenant faire une petite aparté sur le fichier prototype.py : Vous pouvez considérer que le system.py place des "règles" et des principes à notre client. C'est bel et bien le prototype qui va se charger de démarrer les autres fichiers, de définir la phase de jeu. Effectivement, le prototype déclare directement que nous somme à la phase de connexion : mainStream.SetLoginPhase() Notez que maintenant que le système à placer quelques règles, les imports deviennent assez conséquent : import dbg import app import localeInfo import wndMgr import systemSetting import mouseModule import networkModule import uiCandidate import constInfo import musicInfo import stringCommander Vous retrouverez aussi les fichiers locale/localeinfo.py Il me semble que le fichier locale a été abandonné sur les 2014. A vérifier. Vous trouverez dans ces fichiers principalement des variables qui ne changeront pas. C'est comme le fichier l'indique des informations locales. Par exemple : APP_TITLE = "Takuma" C'est une variable qui va définir le nom de la fenêtre. Vous trouverez aussi des informations sur les packs locales en fonction du pays (pour l'activer, d'autres modifications sont nécessaires il me semble : __IS_ENGLISH = "ENGLISH" == app.GetLocaleServiceName() __IS_HONGKONG = "HONGKONG" == app.GetLocaleServiceName() __IS_NEWCIBN = "locale/newcibn" == app.GetLocalePath() __IS_EUROPE = "EUROPE" == app.GetLocaleServiceName() __IS_CANADA = "locale/ca" == app.GetLocalePath() __IS_BRAZIL = "locale/br" == app.GetLocalePath() __IS_SINGAPORE = "locale/sg" == app.GetLocalePath() __IS_VIETNAM = "locale/vn" == app.GetLocalePath() __IS_ARABIC = "locale/ae" == app.GetLocalePath() __IS_CIBN10 = "locale/cibn10" == app.GetLocalePath() __IS_WE_KOREA = "locale/we_korea" == app.GetLocalePath() __IS_TAIWAN = "locale/taiwan" == app.GetLocalePath() __IS_JAPAN = "locale/japan" == app.GetLocalePath() Bon, vous avez appris quelque chose ? Non ? Certains toujours pas ? Vous me compliquez la tâche aussi ! Bah pour en apprendre plus, vous attendrez que je décide de refaire un autre tuto ! Bon développement ! Cordialement, Takuma.
-
Python - Retirer le Clavier à la Connexion
Metin2 Dev a posté un sujet dans Programmation & Développement / Codes
Salut ! On me l'a demandé, du coup j'le met ici même si c'est simple : Comment retirer ce clavier : En l'enlevant vous rendez vos joueurs qui l'utilisent contre les keyloggers vulnérable s'ils sont infectés. Dépackez votre locale et ouvrez : loginwindow.py (dans le fichier ui) Vous aurez normalement : Si c'est le cas, supprimez de cette ligne à : { 'name' : 'key_46', 'type' : 'button', 'x' : 460, 'y' : 144, 'default_image' : 'locale/fr/ui/vkey/key_normal.tga', 'down_image' : 'locale/fr/ui/vkey/key_normal_dn.tga', 'over_image' : 'locale/fr/ui/vkey/key_normal_over.tga', }, ) }, Si ce n'est pas le cas supprimé de : { 'name' : 'VirtualKeyboard', 'type' : 'thinboard', 'x' : (SCREEN_WIDTH - 564) / 2, 'y' : SCREEN_HEIGHT - 300, 'width' : 564, 'height' : 254, 'children' : ( Jusqu'au code indiqué plus haut. Voilà, c'est pas plus dur que ça. Cordialement, Takuma.
