Principe:
Décompiler une class Java pour récupérer un mot de passe chiffré, et le déchiffrer (ce mot de passe étant le flag)
Le challenge

Décompilation
On va décompiler le code Java via n'importe quel décompilateur en ligne
Dans un scénario réel, n'utilisez pas de décompilateur en ligne car le programme peut être confidentiel ou contenir des données sensibles!
//
// Decompiled by Procyon v0.5.36
//
package chall;
import java.util.Scanner;
public class Mdp
{
public static void main(final String[] array) {
final String s = "4/2@PAu<+ViNgg%^5NS`#J\u001fNK<XNW(_";
final Scanner scanner = new Scanner(System.in);
System.out.print("Mot de passe Admin:");
if (s.equals(hide(scanner.nextLine()))) {
System.out.println("Bienvenue Admin");
}
else {
System.out.println("Au revoir non admin");
}
}
static String hide(final String s) {
String s2 = "";
for (char index = ''; index < s.length(); ++index) {
s2 = invokedynamic(makeConcatWithConstants:(Ljava/lang/String;C)Ljava/lang/String;, s2, (char)((char)(s.charAt(index) - index) % '\u0080'));
}
return s2;
}
}

404CTF{C3_sYst3mE_es7_5ecUrisE}
On notera que le "hide" contient un caractère non-ASCII: \x1f (ou \u001f). C'est la raison pour laquelle un strings Mdp.class ne revenverra pas le mot de passe, mais deux moitiés 4/2@PAu<+ViNgg%^5NS`#J et NK<XNW(_. Ce caractère m'avait aussi posé quelques difficultés dans le code décompilé, mais je ne me souviens pas précisément desquelles (donc, rien d'insurmontable)