Aller au contenu

Nouveau membre ?! Pense à te présenter pour accéder au contenu du forum !

New member ?! Introduce yourself to get access to the forum !

Drei

Membre
  • Compteur de contenus

    25
  • Inscription

  • Dernière visite

  • Points

    2,103 [ Donner ]

Réputation sur la communauté

3 Neutre

À propos de Drei

  • Rang
    Gabier
  • Date de naissance 03/06/1996

Profil

  • Discord
    Drei#3897
  • Nationalité
    Français
  • Sexe
    Bwaf, ça dépend de nos jours...

Visiteurs récents du profil

86 visualisations du profil
  1. La première partie est disponible sur plusieurs tutoriels, et l'autre vient de moi-même. Pour la première on peut la retrouver sur... [Contenu Masqué] Et le batch est disponible sur plusieurs postes, sa première apparition sur ce forum était grâce à ant0k il me semble J'ai juste trouvé ça plus logique de grouper ces parties. Je compte faire un autre tutoriel avec les protections, mais là tout de suite, j'ai pas vraiment le temps.
  2. Partager des liens morts.... C'est pas courant comme méthode... mdrrr Le voici : [Contenu Masqué]
  3. -A ajouter toutes les versions jusqu'à la 2018, à cracker simplement avec AMT emu painter.
  4. Niveau requis : Débutant à Intermédiaire Temps estimé : Entre 5 et 10 minutes Bonjour. La réécriture des tutoriels ayant une place importante dans l'activité du forum en ce moment, j'ai pensé que mettre la main à la pâte, m'occuperait et ne ferait probablement pas de mal au forum. Je vais essayer tout au long de ce guide de vous donner toutes les informations nécessaires sur les packs. Je vois trop souvent des personnes avec des problèmes de ce côté. Il y a plusieurs facteurs : trop de tutoriels séparés, pas assez précis, etc... Je vais donc lors de ce guide, m'efforcer de vous apprendre la structure des packs dans le but de la modifier à votre guise. Pré-requis: Pour suivre ce guide, peu de pré-requis si ce n'est votre cerveau, un client fonctionnel avec ses sources, et un packer. I. Modifier l'extension de ses packs Changer l'extensions de ses packs ? Quel intérêt me direz-vous ? Et bien, bonne question. En réalité, si vous ne faites pas de lourde modification dans la structuration des packs, pas grand chose. Cela apporte cependant une mini barrière de depack pour les débutants. Mais c'est surtout comme on dit dans le métier, du jacky tuning. Sans de lourdes modifications, vos packs devront avoir une extension de trois caractères. Notez que les index (eix) et les données (epk) ne devront pas avoir la même extension. Sinon, impossible de les reconnaitre pour le client ! Ou alors nous devrions faire de plus grosses modifications, comme ajouter quelque chose en plus dans le nom, comparer la taille des fichiers, etc... Plusieurs méthodes sont possibles, je pourrais faire un autre tutoriel dessus si vous le souhaitez. Bref, passons de suite à l'application ! Vous allez pour commencer vous rendre dans vos sources client, puis ouvrir le fichier Eterpack.cpp : Atteignez par la suite : strncpy(m_indexFileName, dbname, MAX_PATH); strcat(m_indexFileName, ".eix"); m_stDataFileName = dbname; m_stDataFileName += ".epk"; C'est ici que nous allons modifier nos extensions. Mettez des extensions de trois caractères sous la même forme que celles-ci, par exemple : strncpy(m_indexFileName, dbname, MAX_PATH); strcat(m_indexFileName, ".ind"); m_stDataFileName = dbname; m_stDataFileName += ".dat"; (Pour Index et Data) Une fois ceci fait, vous pourrez dès maintenant compiler vos sources client. Pendant de temps là, nous allons directement changer les extensions de nos packs ! Ne paniquez pas, on ne vas pas les changer à la main ! La fainéantise est mon maître mot ! Dans vos dossier pack, créez un fichier main.bat, puis mettez de dans : main @echo OFF @echo Modifiez l'extension @echo de vos fichiers :rename set EIX= set /P EIX=Choisissez l'extension de vos futurs fichiers EIX: %=% @ren *.eix *.%EIX% @echo Succès .%EIX% if "%EIX%" == "" GOTO errore set EPK= set /P EPK=Choisissez l'extension de vos futurs fichiers EPK: : %=% if "%EPK%" == "" GOTO errore @ren *.epk *.%EPK% @echo Succès .%EPK% @echo --- GOTO fine :errore @echo Erreur ! @echo L'extension n'est pas valide ! @echo --- GOTO esci programma :fine @echo Le changement est terminé ! Quittez le programme. :esciprogramma @pause :rename set EIX= set /P EIX=Choisissez l'extension de vos futurs fichiers EIX: %=% @ren *.eix *.%EIX% @echo Succès .%EIX% if "%EIX%" == "" GOTO errore set EPK= set /P EPK=Choisissez l'extension de vos futurs fichiers EPK: : %=% if "%EPK%" == "" GOTO errore @ren *.epk *.%EPK% @echo Succès .%EPK% @echo --- GOTO fine :errore @echo Erreur ! @echo L'extension n'est pas valide ! @echo --- GOTO esciprogramma :fine @echo Le changement est terminé ! Quittez le programme. :esciprogramma @pause Source : inforge. Par la suite, lancer ce programme et mettez le nom des extensions comme le programme vous le demande. Il va modifier tout seul les extensions de vos packs, vous n'aurez plus qu'à la supprimer par la suite. Félicitations, vous venez de finir la première étape ! II. Modifier les clés d'encryptage Oui, c'est moche... Mais ça se dit. Bien, dans cette partie je vais vous apprendre à changer les clés qui permettent d'encryptées vos packs. Effectivement, il y en a deux : une pour l'index, et une pour les données. Vous pouvez très bien mettre les deux mêmes... Mais ce n'est pas vraiment conseillé. Cela faciliterait à la tâche à celui qui voudrait décrypter votre client, il n'aurait qu'une clé à trouver ! Pour cela, restez dans le même fichier que précédemment : Eterpack.cpp : Atteignez cette structure : static DWORD s_adwEterPackKey[] = { 45129401, 92367215, 681285731, 1710201, }; static DWORD s_adwEterPackSecurityKey[] = { 78952482, 527348324, 1632942, 486274726, }; Ici, se sont les clés originales, si vous les avez déjà modifiées, elles pourront peut être ne pas être les mêmes. Gardez ça dans un coin, puis ouvrez votre packer, allez dans son panneau de configuration, puis visualisez ceci : Vous ne le voyez peut être pas comme ça à vu d'oeil... Mais ces clés sont bien liées ! Elles ne sont simplement pas sous le même format ! Nous allons maintenant créer notre propre clés ! Bien, choisissez une chaîne de texte sans espace de 16 caractères. Pour ma part, je vais choisir : dreitutofunkyemu Cette clé va être à l'origine de tous notre cryptage client ! Gardez la bien secrète à l'abri de tout regard ! Pour commencer, nous allons convertir notre clé pour le packer. Vous allez vous rendre sur un convertisseur de texte en hexadécimal tel que celui-ci. N'importe quel convertisseur "String to hex" ira. Convertissez ensuite votre texte. Pour vérifier que ça marche, vous pouvez par exemple essayer de convertir : dreitutofunkyemu Vous devriez trouver : 647265697475746f66756e6b79656d75 Maitenant, vous pouvez découper la clé en fonction de votre packer. Pour ma part, cela donne : 64-72-65-69-74-75-74-6F-66-75-6E-6B-79-65-6D-75 N'oubliez pas de mettre des majuscules partout ! Mettez ceci par exemple pour la clé d'encryptage des index. Puis nous allons maintenant la convertir pour nos sources client. Pour cela plusieurs moyens : Vous pouvez-vous rendez sur un site tel que celui-ci, que j'expliquerai si dessous. Vous pouvez également vous servir du script php que je met en pièce jointe. La manipulation est plus simple, mais vous aurez besoin d'un interprète php. Je continue comme si vous aviez choisis la première option, je reviendrai sur la deuxième plus tard. Bien entrez votre clé hexadécimal dans l'entrée principale : Vous pouvez en suite vous rendre compte que vous retombez bien sur votre texte si vous prenez le chemin inverse, vous pouvez maintenant regarder cette case : UINT32 - Big Endian (ABCD) C'est ici que vous trouverez la clé à mettre dans votre client, pour ma part j'ai : J'entre donc dans mes sources client : static DWORD s_adwEterPackKey[] = { 1685218665 1953854575 1718972011 2036690293 }; Et voilà ! Vous n'avez plus qu'à faire ça pour la deuxième clés. Vous devrez pas la suite re-compiler votre client et repacker entièrement votre client avec la bonne clé d'encryptage. Pour la deuxième étape, tout est précisé, vous avez juste a reprendre la bonne clé par la suite : Félicitations, vous venez de finir la deuxième étape ! Je compléterai ce tutoriel quand j'aurai d'autres idées... Si vous avez des propositions ? Bien amicalement, Drei.
  5. Et quel est le problème ? (Excepté que tu utilises ta machine comme une machines Windows et non freebsd)
  6. je te laisse l'ajouter alors
  7. C'est pas cette fonction là que je te demande... def __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount): # PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지 if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP if player.SLOT_TYPE_INVENTORY == attachedType and player.IsEquipmentSlot(attachedItemSlotPos): self.stream.popupWindow.Close() self.stream.popupWindow.Open(localeInfo.DROP_ITEM_FAILURE_EQUIP_ITEM, 0, localeInfo.UI_OK) else: if player.SLOT_TYPE_INVENTORY == attachedType: dropItemIndex = player.GetItemIndex(attachedItemSlotPos) item.SelectItem(dropItemIndex) dropItemName = item.GetItemName() ## Question Text questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount) ## Dialog itemDropQuestionDialog = uiCommon.QuestionDialog() itemDropQuestionDialog.SetText(questionText) itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg)) itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg)) itemDropQuestionDialog.Open() itemDropQuestionDialog.dropType = attachedType itemDropQuestionDialog.dropNumber = attachedItemSlotPos itemDropQuestionDialog.dropCount = attachedItemCount self.itemDropQuestionDialog = itemDropQuestionDialog constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(1) elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedType: dropItemIndex = player.GetItemIndex(player.DRAGON_SOUL_INVENTORY, attachedItemSlotPos) item.SelectItem(dropItemIndex) dropItemName = item.GetItemName() ## Question Text questionText = localeInfo.HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, attachedItemCount) ## Dialog itemDropQuestionDialog = uiCommon.QuestionDialog() itemDropQuestionDialog.SetText(questionText) itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg)) itemDropQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.RequestDropItem(arg)) itemDropQuestionDialog.Open() itemDropQuestionDialog.dropType = attachedType itemDropQuestionDialog.dropNumber = attachedItemSlotPos itemDropQuestionDialog.dropCount = attachedItemCount self.itemDropQuestionDialog = itemDropQuestionDialog constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(1)
  8. Hum, tu peux me monter ta fonction __DropItem (game.py) ? Enfin si tu l'as pour le coup....
  9. Salut ! File "game.py", line 1536, in __PutItem Montre nous ce bout de code, visiblement tu essayes d'accéder à quelque chose qui n'existe pas.
  10. C'est normal que tu ne vois pas ton mot de passe, il ne s'affiche pas quand le tape. Tape le mot de passe désiré (fais attention que ton clavier ne soit pas en qwerty), et appuie sur la toucher entrée.
  11. Tu peux nous screen ta configuration ? Normalement tu devrais avoir une IP locale, si c'est pas le cas, il faut qu'on revoie les paramètres réseaux côté FreeBSD...
  12. Si tu veux faire un local (je ne connais pas les configurations pour Hamachi) tu as bien entré ta carte réseau avec l'accès par pont etc dans les paramètres ?
  13. Salut ! Tu as bien configuré ta carte réseaux ? Généralement, ça arrive quand les DNS ne marchent pas, je suppose donc que ta carte graphique à un problème (si elle est configurée). Si elle est bien configurée, essaye de ping quelque chose pour voir ?
  14. Heeeeeeu.... Comment te dire ? Tu dois obligatoirement passer par SQL. Il faut que tu mettes à jour ta base de données. Cependant aucun cache il me semble n'est appliqué à la colonne "cash". Tu n'as pas besoin de passer par le c++, mais tu peux. Pour cela, il faudrait que tu fasses une fonction qui va exécuter la queries : "UPDATE account.account SET cash=cash+50 WHERE id = 1;" par exemple. Tu peux cependant le faire en lua en activant la fonction qui permet de le faire. Tu peux par exemple créer une fonction comme celle-ci : bool AddCash(LPCHARACTER ch, const int * c_cash) { DBManager::instance().DirectQuery("UPDATE account.account SET cash = cash + %d WHERE id = %d", XXXX, c_cash); return true; } // header : bool AddCash(PCHARACTER ch, const int* c_cash); Remplace le XXX par la récupération de l'id, je l'ai plus de tête... Désolé des imperfections de l'écriture, j'écris actuellement avec ma tablette, c'est pas des plus pratique... En espérant t'avoir aider.
  15. Salut. Essaye d'ajouter une valeur par défaut à la colonne "money2" en fonction de son type, et dis nous si c'était ça le problème. Je n'ai même pas cette colonne... Elle doit correspondre à un système particulier. Pense à prendre au maximum les bases de données correspondantes aux files que tu utilises.
×

Information importante

By using this site, you agree to our Conditions d’utilisation.