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

Gurgarath

Développeur
  • Compteur de contenus

    266
  • Inscription

  • Dernière visite

  • Jours gagnés

    23

Tout ce qui a été posté par Gurgarath

  1. Au sujet du .pyc, ce n'est même pas une sécurité à proprement parler, c'est répandu depuis longtemps et avec un simple décrypteur tu arrives à le contourner, vu que ça ne rend pas le pack plus compliquer à extraire, ça rajoute juste une étape pour décrypter les fichiers .pyc en des simples fichiers .py ! ^^ Sinon, au sujet des clefs cryptées, oui il est possible de les cacher, ça s'appelle de l'obfuscation et c'est toujours utile d'en utiliser, après selon la qualité et la méthode pour la cacher tu peux t'en tirer avec une clef invisible dans l'hexadécimal mais visible dans des logiciels de Reverse E. ou des Debuggers ! C'est toujours compliqué de bien le faire Sinon, les scripts pythons peuvent sembler archaïque pour dépacker un client, enfin, ça peut fonctionner, la preuve avec le client officiel, mais si tu as effectué autant de travail pour dépacker, il y a peu de chances que le script arrive à s'injecter et qu'il arrive à faire quoi que ce soit au client !
  2. Non tu n'es pas à la bourre ! Il n'est jamais trop tard ! Sinon, c'est vrai Kijaru ! C'est pour ça que je parlais d'une nouvelle méthode de clefs et aussi par ailleurs d'obfuscation de ces dernières, personnellement, la communication de cette clef via la méthode serveur -> client peut être problématique selon moi. Premièrement car ça implique que le client soit déjà dans sa phase de réception des packets et donc que divers packs soit déjà lus (root & partie graphique), ce qui implique au moins une méthode différente de lecture pour les packs root, uiscript & etc (au moins). Après, ça implique aussi une sécurité potentiellement moindre, car là il suffirait de faire un sniff des packets reçus pour voir qu'une clef supplémentaire a transité pour la prendre par la suite (ce qui est une méthode de sniff utilisable et utilisée pour la pong) plus qu'un reverse engineering assez long si l'obfuscation a été faite de manière propre. Sinon il y a aussi la méthode d'obfuscation ET de transit de clef pour les autres packs, comme l'utilisation du cshybridcrypt ou du panama. Là, ça devient bien plus compliqué d'extraire les packs car il faut là encore intercepter la clef de chaque pack unique mais aussi de trouver la clef globale et la méthode de compression du client pour créer son propre dépacker. Ce qui rendrait la méthode connue de depack du client officiel fonctionnelle (un script python à injecter) mais bien plus compliquée à utiliser. C'est une concession à voir là aussi. Après, dans les deux cas, voire dans tous les cas, ça va éloigner la majorité des gens qui veulent prendre le contenu du client sans spécialement s'y connaître ou en se servant de contenu partagé, ce qui éloigne beaucoup de potentielles attaques !
  3. Moi aussi j'ai fait pareil, j'utilise un autre algorithme depuis maintenant presque 3 ans, je disais juste que la partie des clefs restait la même, peu importe si tu changes le système de cryptage ou non
  4. Bonjour, Premièrement, les clefs d'encryption des packs comme "s_adwEterPackKey" ne sont pas limitées qu'à LZO, c'est juste un système additionnel de clef de protection et tu peux très bien garder ce système avec un autre algorithme de protection, ce n'est donc pas réservé à LZO mais c'est bel et bien un système à part à tout algorithme de compression, j'ai personnellement changé 4 fois d’algorithme de compression (le premier changement était vers LZOPro et le dernier vers un autre que LZO) et j'ai à chaque fois gardé ce fameux système. Bien entendu, il est mieux de changer et l’algorithme & les clefs de cryptage mais aussi tout le système de clefs (c'est actuellement du TEA donc rien qu'un passage en XTEA ou SHA256-SHA512 serait une énorme avancée). Sans parler de l’obfuscation de cette clef et l’encryption totale des packs, à savoir Header & Index dans un même fichier. J'en profite aussi pour préciser qu'adapter Eternexus à un autre algorithme n'est pas spécialement un gain de temps en matière de compression, personnellement, j'ai mon propre packer et je peux compresser mon client bien plus rapidement qu'avec EterNexus, certes, c'est pas aussi joli, mais la limitation du "buffer" d'EterNexus donne ce petit temps d'attente lors de la compression d'un pack. Bien entendu c'est du chipotage car c'est actuellement le meilleur packer sur le marché, mais c'est bon de le préciser ! Bonne journée !
  5. Bonsoir, Merci pour ce regroupement de tutoriaux, certains scripts sont probablement partagés ici (notamment le dernier script italien à la fin) voire même l'anti-wait hack partagé ici : Mais en tout cas merci pour ce regroupement ! +1 PS : Oui nous n'avons pas d'accès aux box d'alerte ! C'est bien dommage et ça m'a aussi fait cafouiller une présentation
  6. Bonsoir, Je ne savais pas trop comment exprimer de manière plus courte ce que ce système fait, il ne crée aucun événement mais sert bien, comme tu l'as dit, à créer une fonction qui sait reconnaître si l'entrepôt est ouvert ou non : "safebox.IsOpen()". De rien !
  7. Ah ? Personnellement en lisant sur Funky j'ai eu un petit saut dans la vidéo (elle s'est arrêtée et s'est relancée au même moment) un peu après les vingt secondes, mais normalement tout semble bien fonctionner ^^ Merci !
  8. Bonsoir, Premièrement merci à vous tous ! Sinon, pour répondre à @Cassegrain, c'est vrai que c'est plus simple de le faire via ConstInfo, mais dans un soucis d’ergonomie (c'est toujours mieux de le faire en C++) et d'utilité globale, la méthode via sources s'avère plus "durable". Notons aussi que si quelqu'un a un accès au root, il peut là aussi "fausser" la variable, bien qu'il n'y ait rien de critique à faire en touchant à ça. D'ailleurs, je pense que dans la version C++, le jeu détecte quand l'entrepôt se ferme de manière non conventionnelle : Mort du personnage ou éloignement trop conséquent du magasinier. Tandis que dans la version python, le ConstInfo restera très probablement le même. Après, c'est à tester ! Merci beaucoup pour ton commentaire ainsi que pour l'alternative, qui est réalisable beaucoup plus simplement !
  9. Centre de Téléchargement Télécharger ( Interne ) Bonjour, bonsoir, Aujourd'hui, je vais vous présenter une fonction qui peut avoir plus ou moins d’intérêt pour tout un chacun ! En effet, cette fonction permet au jeu de savoir quand est-ce que la fenêtre d'entrepôt s'ouvre ou se ferme. À première vue, il y a peu d'utilité, mais dès lors que vous savez quoi en faire, cette fonction peut sévère immensément utile ! (Voir vidéo ci-bas) Pré-requis: Citer les tutoriels/connaissances/logiciels requis pour réaliser ce tuto I. Quelques précisions II. Partie Sources Client III. Partie Client (Python) A savoir : Si vous ne savez pas comment compiler votre lanceur veuillez suivre le tutoriel suivant : Compiler le client Binary Si vous ne savez pas comment depack votre client, suivez ce tutoriel : Depack/Repack avec Eternexus Si vous avez un problème n'hésitez pas à poster votre demande dans la section AQS
  10. Bonsoir, Ces fonctions sont dans les sources, c'est là que tu en trouveras plus
  11. Bonjour, Merci à toi ! Voici la version sans aucun bug pour ceux qui demanderaient, c'est celle que j'utilise et elle ne rencontre aucun problème d'exp de guilde. La base est la même que la tienne mais le code vient de diverses personnes, je ne pense pas l'avoir fait moi même : Pour le premier, c'est les premières lignes de ton tutoriel avec le code corrigé. Tu as eu ton +1 !
  12. Bonjour, C'est un problème récurrent sur de nombreux mob_proto et ce n'est pas le seul soucis, tu peux par exemple avoir aussi les problèmes suivants (liste non exhaustive) : Monstres qui te drainent toute ta barre de Mana dès lorsque tu lui portes un coup Monstres apparaissant sans couleur spécifique (ex Cung-Mok sans couleur verte ou vils sans couleur marron) Impossibilité d'utiliser une orbe de polymorphie du monstre ou impossibilité d'en dropper Monstres à skills (Dragon d'eau, je crois que c'est Beran-Setaou en français) n'attaquant pas avec ses skills Dégâts trop faibles ou trop forts (ce que tu as) Résistances des monstres dans le désordre Absence de réincarnation de certains monstres (vils par exemple) Etc... etc. Maintenant, pour t'expliquer la base du problème, ça va être simple, mais pour le corriger un peu moins : En effet, le problème c'est que depuis quelques temps déjà, personne ne partage ou n'extrait les protos avec des logiciels d'extraction prenant en compte les nouvelles colonnes que l'officiel rajoute; les structures des protos sont donc différentes entre celles attendues par l'extracteur et celles que le proto contient. (Et ça ça peut être les colonnes rajoutées juste après comme resist_bleeding ou les plus récentes et là tu m'excuseras mais je n'ai pas d'exemple en tête si ce n'est "size". Tout dépend si telle ou telle structure est présente dans le logiciel). Le logiciel, si celui-ci arrive à extraire le proto avec une structure différente, aura un comportement un peu bizarre. En gros, soit il remplira certaines colonnes dans le désordre (il suffit que resist_bleeding se situe entre resist_poison et resist_wind pour que toute les valeurs se décalent d'une colonne), soit il aura du mal à interpréter une colonne (le logiciel attends un entier, le proto lui sort "wild_dog" ou "0.03") et fera n'importe quoi, soit il s'arrêtera à mi-parcours etc. C'est comme ça que tu te retrouves avec des colonnes vides, avec une valeur pas appropriée ou des colonnes dans le désordre. C'est exactement ce qu'il se passe sur les protos des files 2016. CEPENDANT ! Et oui, il y a des solutions et je vais te les apporter (par contre je n'ai pas les fichiers tout prêts). Prévois juste du temps car la moins longue peut te prendre pas mal de temps lorsque qu'effectuée correctement : Ouvrir un proto plus ancien, avec les bonnes structures (ceux du purgatoire de 2014 sont fonctionnels si je me souviens bien) et vérifier si chaque colonne possède la bonne valeur. Dès que tu vois une colonne avec la mauvaise valeur, vérifie qu'elle ne soit pas inversée avec une autre. Tu as juste à intervertir les colonnes fautives entre elles (si resist_poison et max_hp sont inversées [c'est improbable mais c'est pour l'exemple], tu inverses les deux) Quand une colonne est vide, sélectionne les valeur du proto fonctionnel et attribue les aux bons monstres, car des monstres se sont rajoutés entre les deux. Donc tu peux faire ça par tranche de 200 mobs quand ça s'y prête. Remplis les colonnes vides des nouveaux monstres avec des valeurs au choix selon ton idée du monstre ou selon des vidéos du monstre en question ou le wiki. Éditer les sources de ton logiciel d'extraction pour y ajouter toute les nouvelles colonne. Après l'extraction fonctionnera, mais c'est selon moi la méthode la plus difficile car elle requiert : Du reverse engineering pour obtenir les nouvelles colonnes et leur valeur pour ensuite les coder dans le logiciel. D'avoir codé son propre logiciel d'extraction ou d'en utiliser un open-source. D'avoir aussi les colonnes côté client et côté serveur pour que ton client puisse charger les protos et pour que ton serveur arrive à les lire et les interpréter. Cette étape n'est pas forcément requise mais dans ce cas tu vas devoir éditer manuellement les protos pour qu'ils aient la même structure de ton serveur (donc retirer ou midifer des lignes ou colonnes, je pense par exemple aux ITEM_GACHA pour l'item_proto si tu n'as pas cette fonctionnalité) J'ai personnellement utilisé la second solution jusqu'à à peu près Mai 2017 pour mon serveur (je voulais un jeu bien équilibré et ça commence par ça). Cependant, depuis sa fermeture je me suis un peu éloigné de l'émulation et quand j'ai besoin de rajouter des lignes dans mes protos j'utilise la première option. Excuse moi du long message mais je voulais être bien explicatif ! Bonne journée !
  13. Centre de Téléchargement Télécharger ( Interne ) Bonjour la communauté ! J'arrive ici avec une bonne nouvelle pour tous les programmeurs et bidouilleurs ! En effet, il semblerait que lors de la publication de la dernière mise à jour, les développeurs aient oublié de crypter le contenu du pack root. Son contenu est donc accessible facilement sans compétences particulières ! J'ai donc décidé de vous partager ce fameux pack root ainsi que le pack uiscript daté du 05/02/2018 ! À savoir aujourd'hui même. Ces deux packs sont issus du client Français du jeu, bien que ça ne change rien au code. Forcément, je ne possède pas la partie sources du travail effectué, mais vous pouvez déjà prendre certaines choses si vous savez comment faire et comment vous en servir. J'ai personnellement extrait la nouvelle interface de l'officiel ainsi que quelques corrections apportées au scripts python grâce aux packs leakés de début 2016 / fin 2015. Mais avec ceux là vous aurez accès à bien d'autres choses comme : Diverses corrections de scripts à apporter à votre client Attention ! Certaines corrections possèdent une partie source, je pense notamment à la correction du temps de rechargement d'un skill. Diverses modifications d'interface ne nécessitant pas spécialement de modifications avancées côté client Barre de "Fortune" déportée, modifications de l'UI etc. Partie client officielle de nombreux systèmes (réservée aux développeurs et bidouilleurs prêts à faire la partie source de ces systèmes) Étoles, Gaya, Transmutation, Échange de livre, Recherche de groupe etc. Quelques autres nouveautés et quelques parties de code parfois marrantes La liste est bien entendu non exhaustive. Avant de vous donner le lien, je préfère vous prévenir, même si cela semble évident : /!\ Pensez à sauvegarder chacun de vos fichiers et à noter vos modifications si vous voulez piocher dans ces packs ! Énormément de travail a été fait entre les packs de 2014 que la plupart utilisent et ceux de 2018 que je vous partage ! /!\ Voici le lien : [Hidden Content] ! Bonne journée ou soirée à tous et n'hésitez pas à parler de vos avancements et de vos découvertes sur ce topic !
  14. Bonjour ! Merci de ton partage, je me suis lancé dans un projet pareil avant l'ouverture de mon serveur, vu que j'ai réussi à trouver bon nombre de quêtes coréennes (jusqu'au niveau 105 je crois). Cependant j'ai du inventer la majorité des dialogues, surtout pour les quêtes 105+ (foret enchantée etc.) faute de personnage avec un niveau suffisant sur le FR. Je salue ta belle ouvrage et ton dévouement !
  15. Vu que les sources sont incluses, c'est facilement supprimable, à part si la personne s'est enquiquiné à faire une lib etc.
  16. Bonsoir, De quel ban parles-tu ? Ce fix permet de corriger les possibles injections sql dans le processus de suppression d'ami ! ^^
  17. Bonsoir, Si c'est possible, à moi d'apporter ma petite pierre à l'édifice : -Il est possible d'éditer de manière propre les protos dans un tableur, techniquement (et en comptant les avantages apportés par ce système) c'est certes un peu plus chiant, mais plus avantageux. (Notez que le mieux reste aussi d'avoir la table .sql qui se génère à partir des .txt en cas de systèmes externes requérant cette table). Désormais, à propos de cette erreur : C'est tout simplement car il n'y a plus d'extracteur de proto "à jour" pour l'officiel, enfin, si, mais pas en libre service, ce qui pose vite un problème au niveau des colonnes, les extraction de protos donnent souvent lieu à des fichiers fonctionnels mais avec des problèmes en jeu : mobs peuvent apparaître noir, vous voler votre barre d'HP voire même vous O.S ou avoir des résistances démesurées, pas de compétences ou bien pas de drop. La seule solution que tout le monde peut utiliser c'est de mettre la bonne valeur à chaque colonne, le plus souvent manuellement...
  18. Bonjour, Merci du partage, mais désormais c'est présent (sans quête) dans toutes les files actuelles ^^
  19. Ah je comprends mieux... Soit le type qui a fait le tutoriel a très mal fait soit le passage à ipb a complétement foiré l'encodage des balises. Je m'explique : Ça, c'est du charabia : if self.HakConnexionStop:self.HakConnexionStop = Falsereturn Ça, c'est un code correct, bien indenté et que Python peut reconnaître : if self.HakConnexionStop: self.HakConnexionStop = False return Voici une version corrigée du tutoriel :
  20. Bonsoir, L'indentation du tutoriel est complétement incorrecte, probablement du au passage à Ips. Voici le tutoriel (source : Frozen) avec les bonnes indentations : Ouvrez le fichier intrologin.py : Dans la fonction __init__ collez ceci : self.isLoginCanceled = False Puis dans la fonction Close : self.isLoginCanceled = None Ensuite dans : def OnConnectFailure(self): Cherchez : if self.isNowCountDown: return Rajoutez en dessous : if self.isLoginCanceled: self.isLoginCanceled = False return Dans : def Connect(self, id, pwd): Cherchez ceci : self.stream.popupWindow.Open(localeInfo.LOGIN_CONNETING, localeInfo.UI_CANCEL) Puis remplacez le par : self.stream.popupWindow.Open(localeInfo.LOGIN_CONNETING, self.OnProcessingCancel, localeInfo.UI_CANCEL) Enfin, en bas de la fonction Connect rajoutez : def OnProcessingCancel(self): self.isLoginCanceled = True self.stream.popupWindow.Close() Enregistrez, repackez et c'est tout ! PS : D'après deux personnes sur le forum où a été crée ce sujet, ce tutoriel semble ne rien changer, alors si jamais quelqu'un se sent de tester le tutoriel et de donner sa réponse, il en est totalement libre. Merci du partage
  21. Bonjour, Le True / TRUE | False / FALSE ça dépend du fait que tu sois sensible à la casse ou non, personnellement j'ai permis les deux, mais si tu as une erreur utilise celui que ton client utilise. Pour la ligne, vérifie que ton client est récent et qu'il utilise "localeInfo." à la place de "locale.". Sinon il se peut que ta ligne soit différente de celle qu'il a donné, personnellement j'ai un argument entre les deux, cherche juste "LOGIN_CONNETING". Il n'y a qu'une occurrence dans le fichier, ça sera la bonne ligne. (Une fois la ligne trouvée, vérifie que ce soit bien "localeInfo." sinon tu vas devoir adapter la ligne (localeInfo. -> locale.)) Pour finir, ce tutoriel, partagé par le créateur sur un forum étranger, est potentiellement non fonctionnel. Je ne l'ai pas testé, mais deux personnes semblent dire que rien n'a changé avant et après le tutoriel. Bonne journée !

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.