the floor is java
Description
CTF: Whitehacks 2022
Author: xbowery
Difficulty: Easy
We found some weird message that was accompanied within this file, can you decode this message and unlock the flag?
Reverse.class
message.txt
Solution
Pwned by @skytect
We get a compiled Reverse.class
file, so let’s decompile it to get the source code. We can do this at jdec.app.
After that, we get this source code:
/* Decompiler 123ms, total 1639ms, lines 82 */import java.util.Scanner;
public class Reverse { public static String encode_1(String var0) { String[] var1 = var0.split(""); String var2 = "";
int var3; for (var3 = 0; var3 < var0.length(); var3 += 2) { var2 = var2 + var1[var3]; }
for (var3 = 1; var3 < var0.length(); var3 += 2) { var2 = var2 + var1[var3]; }
return var2; }
public static String encode_2(String var0) { char[] var1 = var0.toCharArray(); int[] var2 = new int[] { 39, 18, 16, 3, 2, 10, 14, 4, 11, 37, 8, 5, 6, 31, 9, 12 }; int var3 = var2.length;
for (int var4 = 0; var4 < var1.length; ++var4) { var1[var4] = (char) (var1[var4] - var2[var4 % var3]); }
String var6 = "";
for (int var5 = 0; var5 < var1.length; ++var5) { var6 = var6 + var1[var5]; }
return var6; }
public static String encode_3(String var0) { String[] var1 = var0.split(""); String var2 = "";
int var3; for (var3 = var0.length() / 2; var3 < var0.length(); ++var3) { var2 = var2 + var1[var3]; }
for (var3 = 0; var3 < var0.length() / 2; ++var3) { var2 = var2 + var1[var3]; }
return var2; }
public static String encode_4(String var0) { char[] var1 = var0.toCharArray();
int var3; for (int var2 = 0; var2 < var0.length() / 2; ++var2) { var3 = var0.length() - var2 - 1; char var4 = var1[var2]; var1[var2] = var1[var3]; var1[var3] = var4; }
String var5 = "";
for (var3 = 0; var3 < var1.length; ++var3) { var5 = var5 + var1[var3]; }
return var5; }
public static void main(String[] var0) { Scanner var1 = new Scanner(System.in); System.out.print("Enter your string: "); String var2 = var1.nextLine(); var1.close(); System.out.println(encode_3(encode_4(encode_1(encode_2(var2))))); }}
We can attempt to manually reverse engineer this. I did it using this python script:
cipher = ",hj*Y/bOi-(Tm0\"0qH,O[d2!'@qG-(-6"print(cipher)
# encode_3front = cipher[:len(cipher)//2]back = cipher[len(cipher)//2:]cipher = back + frontprint(cipher) # qH,O[d2!'@qG-(-6,hj*Y/bOi-(Tm0"0
# encode_4front = cipher[:len(cipher)//2]back = cipher[len(cipher)//2:]cipher = ''.join([*reversed(back), *reversed(front)])print(cipher) # 0"0mT(-iOb/Y*jh,6-(-Gq@'!2d[O,Hq
# encode_1x = ''for i in range(len(cipher) // 2): x += cipher[i] x += cipher[len(cipher)//2+i]cipher = xprint(cipher) # 06"-0(m-TG(q-@i'O!b2/dY[*Oj,hH,q
# encode_2x = ''k = [39, 18, 16, 3, 2, 10, 14, 4, 11, 37, 8, 5, 6, 31, 9, 12]for i, c in enumerate(cipher): x += chr(ord(c) + k[i % len(k)])print(x) # WH2022{1_l0v3_r3v3r51ng_5tr1ng5}
WH2022{1_l0v3_r3v3r51ng_5tr1ng5}