Résolu 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 !
-
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
-
C’est minecraft.jar que l’on modifie, non ?
-
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 !!!