Catégorie: Reverse
Difficulté: easy
Flag: -
Challenge
Description
Un Bugdroid sauvage apparait !
Il est temps de mettre vos compétences de boxe en pratique, mais attention, cette fois il n'y a ni ring ni arbitre. Assurez-vous de bien observer autour de vous car, comme sur le ring, il est important de connaître les habitudes de son adversaire. Bon courage,
Retrouvez le message du Bugdroid.
Format de flag : 404CTF{message}
Résolution
C'est un APK, donc direction JADX, apktool ou autre pour décompiler les .dex. Ensuite, rendez-vous dans le dossier sources
.
Copier apktool d Bugdroid_Fight_-_Part_1.apk
Le point d'entrée de l'application se trouve dans le dossier com/example/reverseintro
.
Si l'on regarde le fichier MainActivityKt.java
on trouve ligne 26 :
Copier public static final String element = "Br4v0_tU_as_";
En descendant encore un peu dans le fichier (en cherchant cette string par exemple), on peut trouver à partir de la ligne 144 :
Copier java.lang.StringBuilder r3 = new java.lang.StringBuilder
java.lang.String r4 = "Br4v0_tU_as_"
r3.<init>(r4)
int r4 = com.example.reverseintro.R.string.attr_special
r6 = 0
java.lang.String r4 = androidx.compose.ui.res.StringResources_androidKt.stringResource(r4, r5, r6)
java.lang.StringBuilder r3 = r3.append(r4)
com.example.reverseintro.Utils r4 = new com.example.reverseintro.Utils
r4.<init>()
java.lang.String r4 = r4.lastPart
java.lang.StringBuilder r3 = r3.append(r4)
java.lang.String r3 = r3.toString()
boolean r3 = kotlin.jvm.internal.Intrinsics.areEqual((java.lang.Object) r0, (java.lang.Object) r3)
if (r3 == 0) goto L_0x00f2
r3 = -332944370(0xffffffffec27ac0e, float:-8.108125E26)
r5.startReplaceableGroup(r3)
r3 = r8 & 112(0x70, float:1.57E-43)
r26 = r3 | 6
r27 = 0
r28 = 131068(0x1fffc, float:1.83665E-40)
java.lang.String r4 = "Bien joué, un bugdroid de vaincu !"
r3
est initialisé avec la valeur de r4
, c'est-à-dire "Br4v0_tU_as_"
Ensuite, on a r4
qui prend la valeur de string.attr_special
, puis on l'ajoute à r3
Enfin, r4
prend la valeur de Utils().lastPart
et on l'ajoute encore à r3
Il faut donc aller récupérer ces valeurs dans le code
attr_special
Pour ma part, j'ai simplement utilisé mon IDE pour faire une recherche de attr_special
dans tous les fichiers du dossier décompilé.
Copier Searching 8795 files for "attr_special" (whole word)
Bugdroid 1/resources/classes2.dex:
<binary>
Bugdroid 1/resources/res/values/public.xml:
918 <public type="string" name="androidx_startup" id="2131492903" />
919 <public type="string" name="app_name" id="2131492904" />
920: <public type="string" name="attr_special" id="2131492905" />
921 <public type="string" name="bottom_sheet_collapse_description" id="2131492906" />
922 <public type="string" name="bottom_sheet_dismiss_description" id="2131492907" />
Bugdroid 1/resources/res/values/strings.xml:
42 <string name="androidx_startup">androidx.startup</string>
43 <string name="app_name">Bugdroid - 1er Combat</string>
44: <string name="attr_special">tr0uv3_m0N</string>
45 <string name="bottom_sheet_collapse_description">Collapse bottom sheet</string>
46 <string name="bottom_sheet_dismiss_description">Dismiss bottom sheet</string>
Bugdroid 1/sources/com/example/reverseintro/MainActivityKt.java:
145 java.lang.String r4 = "Br4v0_tU_as_"
146 r3.<init>(r4)
147: int r4 = com.example.reverseintro.R.string.attr_special
148 r6 = 0
149 java.lang.String r4 = androidx.compose.ui.res.StringResources_androidKt.stringResource(r4, r5, r6)
Bugdroid 1/sources/com/example/reverseintro/R.java:
433 public static final class string {
434 public static int app_name = 2131492904;
435: public static int attr_special = 2131492905;
436 /* added by JADX */
437 public static final int abc_action_bar_home_description = 2131492864;
5 matches across 5 files
Dans strings.xml
on trouve la valeur tr0uv3_m0N
lastPart
De même, soit avec une recherche globale, soit directement en regardant dans Utils.java
puisque nous avions l'information dans le code.
Copier package com.example.reverseintro;
public class Utils {
String lastPart = "_m3S5ag3!";
}
La valeur est donc _m3S5ag3!
flag
Le message est donc "Br4v0_tU_as_" + "tr0uv3_m0N" + "_m3S5ag3!"