Problème dAnti-Cheat



  • Voilà après avoir suivi un tuto pour mettre un Anti-Cheat (je l'ai mis pour empecher l'installation de mod sur le launcher)sur son launcher, la mise à jour se fait à chaque lancement du jeux :@. (Sa télécharger le code md5 du nom_du_serveur.jar et il le compare avec celui sur le ftp)
    Voilà le code Qui est tout en haut :

    
    public static boolean md5 = false;
    
    

    Puis :

    
    getMd5("http://nom_du_serveur_launcher.olympe.in/Launcher/md5.txt");
       BufferedReader lect ;
    
       String tmp = "";
    
       try
    
       {
    
       lect = new BufferedReader(new FileReader(Util.getWorkingDirectory() + "/md5.txt")) ;
    
       if (lect.ready())
    
       {
    
       tmp += lect.readLine() ;
    
       }
    
       }
    
       catch (NullPointerException a)
    
       {
    
       System.out.println("Erreur : pointeur null");
    
       }
    
       catch (IOException a)
    
       {
    
       System.out.println("Problème d'IO");
    
       }
    
       System.out.println("Signature numérique lue:" + tmp);
       File minecraftMd5 = new File(Util.getWorkingDirectory() + "/bin/nom_du_serveur_.jar");
    
       if(minecraftMd5.exists()) //si minecraft.jar existe, alors on récupère la signature numérique
    
       {
    
       MessageDigest md = MessageDigest.getInstance("MD5");
    
       FileInputStream fis = new FileInputStream(Util.getWorkingDirectory() + "/bin/nom_du_serveur_.jar");
    
       byte[] dataBytes = new byte[1024];
    
       int nread = 0;
    
       while ((nread = fis.read(dataBytes)) != -1) {
    
       md.update(dataBytes, 0, nread);
    
       };
    
       byte[] mdbytes = md.digest();
    
       StringBuffer sb = new StringBuffer();
    
       for (int i = 0; i < mdbytes.length; i++) {
    
       sb.append(Integer.toString((mdbytes* & 0xff) + 0x100, 16).substring(1));
    
       }
    
       if(tmp.equals(sb.toString())) //on vérifie que la signature numérique dans le fichier texte (sous la variable tmp) est égale (.equals) à sb.toString (signature numérique du minecraft.jar actuel)
    
       {
    
       System.err.println("Verification MD5 = ok"); // si c'est égale, alors on affiche un message dans les logs disant que la vérification est ok, on peut accéder au jeu
    
       }
    
       else //si la vérification a échouée et que les deux signatures numériques sont différentes, c'est que minecraft.jar a été modifié !
    
       {
    
       GameUpdater.md5 = true; // donc, on place notre boolean du départ sur true !
    
       }
    
       }
    
    

    Qui est au dessus de

    
    if ((!cacheAvailable) || (update) || (forceUpdate) || (md5))
    {
    downloadJars(path);
    extractJars(path);
    extractNatives(path);
    
    

    Et le code qui est placer tout en bas de GameUpdater.java :

    
    private void getMd5(String path) throws Exception
    
    {
    
    String fAddress = path;
    
    String localFileName = "md5.txt";
    
    String destinationDir = Util.getWorkingDirectory() + "";
    
    OutputStream outStream = null;
    
    URLConnection  uCon = null;
    
    InputStream is = null;
    
    File tmp = new File(destinationDir);
    
    if(!tmp.exists())
    
    {
    
    tmp.mkdir();
    
    }
    
    try
    
    {
    
    URL Url;
    
    byte[] buf;
    
    int ByteRead,ByteWritten=0;
    
    Url = new URL(fAddress);
    
    outStream = new BufferedOutputStream(new FileOutputStream(destinationDir+"/"+localFileName));
    
    uCon = Url.openConnection();
    
    is = uCon.getInputStream();
    
    buf = new byte[1024];
    
    while ((ByteRead = is.read(buf)) != -1)
    
    {
    
      outStream.write(buf, 0, ByteRead);
    
      ByteWritten += ByteRead;
    
    }
    
    System.out.println("File name: \""+localFileName+ "\"\nNo ofbytes: " + ByteWritten);
    
    System.out.println(destinationDir);
    
    is.close();
    
    outStream.close();
    
    }
    
    catch (Exception e) { e.printStackTrace(); }
    
    }
    }
    
    

    Et le code de la console :

    
    File name: "md5.txt"
    No ofbytes: 32
    C:\Users\BxToxik\AppData\Roaming\.royalcraft
    Signature numérique lue:08d8cf82d20bd41e3c2eed661c49e176
    
    

    Si quelqu'un a la réponse à cela je suis preneur !


  • Administrateurs

    C'est pas le md5 du minecraft.jar qu'il faut mettre normalement ?



  • Je crois pas sinon sa vérifie minecraft.jar au lieu de nom_du_serveur.jar


  • Modérateurs

    C'est minecraft.jar que l'on modifie, non ?


  • Administrateurs

    Je viens de relire le code.

    File minecraftMd5 = new File(Util.getWorkingDirectory() + "/bin/nom_du_serveur_.jar");
    
    if(minecraftMd5.exists()) //si minecraft.jar existe, alors on récupère la signature numérique
    
    {
    
    MessageDigest md = MessageDigest.getInstance("MD5");
    
    FileInputStream fis = new FileInputStream(Util.getWorkingDirectory() + "/bin/nom_du_serveur_.jar");
    

    Si tu ne modifie même pas les nom_du_serveur_.jar par le nom de ton .jar, normale que ça ne fonctionne pas …
    Et il faut bien mettre le md5 de ton .jar, et pas celui du .royalcraft.



  • si j'ai bien compris alors sa doit être

    
    File royalcraftMd5 = new File(Util.getWorkingDirectory() + "/bin/royalcraft.jar");
    
    if(royalcraftMd5.exists()) //si minecraft.jar existe, alors on récupère la signature numérique
    
    {
    
    MessageDigest md = MessageDigest.getInstance("MD5");
    
    FileInputStream fis = new FileInputStream(Util.getWorkingDirectory() + "/bin/royalcraft.jar");
    
    

    Cool avec le code du dessus sa marche merci à vous !!!


Log in to reply