███ █████ ░░░ ░░███ ████████ ████ █████ ██████ ░███████ ██████ █████ ████ ░░███░░███ ░░███ ███░░ ███░░███ ░███░░███ ░░░░░███ ░░███ ░███ ░███ ░███ ░███ ░░█████ ░███ ░░░ ░███ ░███ ███████ ░███ ░███ ░███ ░███ ░███ ░░░░███░███ ███ ░███ ░███ ███░░███ ░███ ░███ ████ █████ █████ ██████ ░░██████ ████ █████░░████████ ░░███████ ░░░░ ░░░░░ ░░░░░ ░░░░░░ ░░░░░░ ░░░░ ░░░░░ ░░░░░░░░ ░░░░░███ ███ ░███ ░░██████ ░░░░░░
I was able to solve 8/10 of these challs, so that’s kinda nice.
Can you help me move my stuff? This one’s fragile!
This is the important code:
public static boolean check(String input){ boolean h = false; String flag = "h1_th3r3_1ts_m3"; String theflag = ""; if(input.length() != flag.length()){ return false; } for(int i = 0; i < flag.length(); i++){ theflag += (char)((int)(flag.charAt(i)) + (int)(input.charAt(i))); } return theflag.equals("ÐdØÓ^y§å^rÍaèÒÁ¡^w"); }
Here, we can see that theflag.equals() doesn’t really have ASCII codes. Therefore, it’d be better to get the values as properly as possible. Therefore, I switched to Kate and copied the final theflag value. The final value of theflag is ÐdØÓ§åÍaèÒÁ¡.
theflag.equals()
theflag
ÐdØÓ§åÍaèÒÁ¡
This function is basically adding every char in input to the corresponding character in flag and checking if it is ÐdØÓ§åÍaèÒÁ¡. Therefore, we just need to subtract.
input
flag
thefinalflag = "ÐdØÓ§åÍaèÒÁ¡" flag = "h1_th3r3_1ts_m3" for i in range(len(flag)): print(chr(ord(thefinalflag[i])-ord(flag[i])),end='')
This gives out: h3y_1ts_n0t_b4d
h3y_1ts_n0t_b4d
rtcp{h3y_1ts_n0t_b4d}
Okay…this one’s better, but still be careful!
This is the checker function:
public static boolean check(String input){ boolean h = false; String flag = "k33p_1t_in_pl41n"; String theflag = ""; int i = 0; if(input.length() != flag.length()){ return false; } for(i = 0; i < flag.length()-2; i++){ theflag += (char)((int)(flag.charAt(i)) + (int)(input.charAt(i+2))); } for(i = 2; i < flag.length(); i++){ theflag += (char)((int)(flag.charAt(i)) + (int)(input.charAt(i-2))); } String[] flags = theflag.split(""); for(; i < (int)((flags.length)/2); i++){ flags[i] = Character.toString((char)((int)(flags[i].charAt(0)) + 20)); } return theflag.equals("Ò^rdݾ¤¤¾Ùà^oåÐ^scÝÆ^p¥ÌÈá^oÏܦaã"); }
Again, let’s get the real value of theflag. The real value of theflag is Òdݾ¤¤¾ÙàåÐcÝÆ¥ÌÈáÏܦaã.
Òdݾ¤¤¾ÙàåÐcÝÆ¥ÌÈáÏܦaã
Now, we need to reverse it. The last for loop seems to go from i=2 to flag.length and the first for loop goes from 0 to flag.length-2. Therefore, we know that theflag has input[2:] in the latter half of it, and it has input[:-2] in the first half.
Therefore, we need to reverse those two things to get the flag.
realflag = ['0' for i in range(16)] flag = "k33p_1t_in_pl41n" for i in range(0,len(flag)-2): realflag[i+2] = chr(ord(a[i]) - ord(flag[i])) for i in range(2,len(flag)): realflag[i-2] = chr(ord(a[i+len(flag)-4]) - ord(flag[i])) print("rtcp{"+''.join(realflag)+"}")
rtcp{0mg_1m_s0_pr0ud_}
I see you’ve found my straw collection…(this is the last excessive for loop one i swear)
public static boolean check(String input){ boolean h = false; String flag = "r34l_g4m3rs_eXclus1v3"; String theflag = ""; int i = 0; if(input.length() != flag.length()){ return false; } for(i = 0; i < flag.length()-14; i++){ theflag += (char)((int)(flag.charAt(i)) + (int)(input.charAt(i+8))); } for(i = 10; i < flag.length()-6; i++){ theflag += (char)((int)(flag.charAt(i)) + (int)(input.charAt(i-8))); } for(; i < flag.length(); i++){ theflag += (char)((int)(flag.charAt(i-3)) + (int)(input.charAt(i))); } //Ò^rdݾ¤¤¾Ùà^oåÐ^scÝÆ^p¥ÌÈá^oÏܦaã String[] flags = theflag.split(""); for(i=0; i < (int)((flags.length)/2); i++){ flags[i] = Character.toString((char)((int)(flags[i].charAt(0)) + 20)); } theflag = theflag.substring(flags.length/2); for(int k = 0; k < ((flags.length)/2); k++){ theflag += flags[k]; } return theflag.equals("ÄÑÓ¿ÂÒêáøz§è§ñy÷¦"); }
(This chall is the old version, btw)
The first for loop will encode (sort of) input[:6], and the second loop will encode [2:7] and the third one encodes input[15:].
start_junk = "ÄÑÓ¿ÂÒêáøz§è§ñy÷¦" med_junk = "" for i in range(len(start_junk)//2,len(start_junk)): med_junk += chr(ord(start_junk[i])-20) med_junk += start_junk[:len(start_junk)//2] print(med_junk) flag = "r34l_g4m3rs_eXclus1v3" ree = ['/' for i in range(21)] ree_count = 0 for i in range(0,len(flag)-14): print(ree_count) ree[i+8] = chr(ord(med_junk[ree_count]) - ord(flag[i])) ree_count += 1 for i in range(10,len(flag)-6): ree[i-8] = chr(ord(med_junk[ree_count]) - ord(flag[i])) ree_count += 1 for i in range(len(flag)-6, len(flag)): ree[i] = chr(ord(med_junk[ree_count]) - ord(flag[i-3])) ree_count += 1 print(''.join(ree))
(sorry for the variable names, I was frustrated)
Also you need to guess some of the flag.
rtcp{h0p3_y0ur3_h4v1ng_fun}
I made a password system, bet you can’t get the flag
The flag is in a comment. Honestly.
rtcp{tH1s_i5_4_r3aL_fL4g_s0_Do_sUbm1T_1t!}
Ok, I think I made it slightly better. Now you won’t get the flag this time!
Again, literally in the code.
(Because of course I want to show uwuspeak).
[kek@tlh PZ]$ python pass1.py Enter the password: rtcp{iT5_s1mPlY_1n_tH3_C0d3} Unlocked. The flag is the password. b-but i wunna show off my catswpeak uwu~... why wont you let me do my nya!!
Fine. I made it a bit more secure by not just leaving it directly in the code.
Build together the loose bits.
rtcp{y34H_tHiS_a1nT_sEcuR3}
Ok this time, you aren’t getting anywhere near anything.
This XOR’s every element in key, with userinput.
a = "\x1f\x11\x0c\x07\x15\x00Q\x18:#D\x08->\x14U\x1a%1\x01Q\x1f:$D\x17&\x03(\r^\x19*X\x1c" key = "meownyameownyameownyameownyameownya" print(''.join(chr(ord(a)^ord(b)) for a,b in zip(a,key)))
rtcp{y0u_L3fT_y0uR_x0r_K3y_bEh1nD!}
Fine. I made it even harder. It is now no longer “ez”, “pz”, “lemon” or “squeezy”. You will never get the flag this time.
This chall does the following things:
Therefore we need to do the exact reverse of it.
import codecs given_bytes = "'=ZkXipjPiLIXRpIYTpQHpjSQkxIIFbQCK1FR3DuJZxtPAtkR'o"[::-1] given_bytes = codecs.decode(given_bytes,'rot_13') given_str = codecs.decode(bytes(given_bytes[2:-1],'ascii'),'base64').decode('ascii') key = codecs.encode("nyameowpurrpurrnyanyapurrpurrnyanya",'rot_13') print(''.join(chr(ord(a)^ord(b)) for a,b in zip(key,given_str)))
rtcp{n0w_tH4T_w45_m0r3_cH4lL3NgiNG}