Mot de passe? (Reverse) - 404CTF 2022

Mot de passe? (Reverse) - 404CTF 2022

Fichiers du challenge 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

Le challenge nous donne un programme Java (dispo ici) et nous demande de retrouver son mot de passe

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 = '\0'; index < s.length(); ++index) { s2 = invokedynamic(makeConcatWithConstants:(Ljava/lang/String;C)Ljava/lang/String;, s2, (char)((char)(s.charAt(index) - index) % '\u0080')); } return s2; } }
On constate que le programme contient un mot de passe chiffré: 4/2@PAu<+ViNgg%^5NS`#J\u001fNK<XNW(_
Au vu du code, on reconstitue le mot de passe en inversant la ligne du "hide": celle-ci se lit s2[i] = (s[i] - i) % 0x80 et donc s[i] = s2[i] + i + K*0x80:
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)

Fichiers du challenge

↩ Retour à la liste des challenges

⇇ Retour à l'accueil