HSCTF 7 writeup
ctf4bでCTF熱が上がってしまったので、飽きるまでCTFやろうと思いました。
このブログも元々writeup書きたくて始めたしね。
ctf4bの復習に時間割いてたのでHSCTFは数時間だけ参加しました。
得点は320点。Revだけ解きました。
AP Lab: Computer Science Principles
Java。1文字ずつ総当たりした。
enc_flag = 'inagzgkpm)Wl&Tg&io' char = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!{}_' cnt = 0 ret = '' for e in range(len(enc_flag)): for c in char: d = ord(c) - cnt + len(str(ord(c))) if d == ord(enc_flag[cnt]): ret += c cnt += 1 break print(ret)
flag: flag{intr0_t0_r3v}
AP Lab: English Language
またJava。
enc_flag2 = '1dd3|y_3tttb5g`q]^dhn3j' transpose = [11,18,15,19,8,17,5,2,12,6,21,0,22,7,13,14,4,16,20,1,3,10,9] key = [4,1,3,1,2,1,3,0,1,4,3,1,2,0,1,4,1,2,3,2,1,0,3] r1 = enc_flag2 for i in range(3): r2 = '' r3 = ['a'] * 23 for e, k in zip(r1, key): r2 += chr(ord(e) ^ k) cnt = 0 for t in transpose: r3[t] = r2[cnt] cnt += 1 r1 = ''.join(r3) print(r1)
flag: flag{n0t_t00_b4d_r1ght}
Ice Cream Bytes
またJavaかい。簡単なrevってなるとJavaになるんですかね。
with open('IceCreamManual.txt', 'rb') as f: manual = f.read() correct_bytes = '' for i in range(34): correct_bytes += chr(manual[intGredients[i]])
'lollookatthistextigotfromthemanual'
になるんですが、これがエンコードされた文字列。
これを戻していく。
コードは下記なんですけど、2段階目辺りでバグってて2文字目が間違って出力されます。ごめんなさい。
toppings = [8, 61, -8, -7, 58, 55, -8, 49, 20, 65, -7, 54, -8, 66, -9, 69, 20, -9, -12, -4, 20, 5, 62, 3, -13, 66, 8, 3, 56, 47, -5, 13, 1, -7,] step1 = '' for c, t in zip(correct_bytes, toppings): step1 += chr(ord(c) - t) step2 = ['*'] * len(step1) for i in range(len(step1)): if i % 2 == 0: if i < len(step1) - 2: step2[i] = step1[i+2] else: step2[i] = step1[len(step1)-2] else: if 1 < i: step2[i] = step1[i-2] else: step2[i] = step1[len(step1)-1] step2a = ''.join(step2) step3 = '' for i in range(len(step2a)): if i % 2 == 0: step3 += chr(ord(step2a[i]) - 1) else: step3 += chr(ord(step2a[i]) + 1) ans = ''.join(list(reversed(step3))) print(ans)
flag: flag{ic3_cr34m_byt3s_4r3_4m4z1n9_tr34ts}
Recursion Reverse
またJa(ry。解けなかった。
enc_flag = 'I^Y$N]=6YiVwC' temp = ''.join(list(reversed(enc_flag))) def picknum(ii, num): num += ii * (ii + 1) // 2 if num % 2 == 0: return num else: num = picknum(num, num) return num ans = '' for i in range(len(temp)): n = 1 for c in char: temp_num = picknum(i + 1, n) if temp[i] == chr((ord(c) + temp_num) % 127): ans += c break
'AscIIiskeO'になってしまう。惜しい。
大きい数を扱ったため最後の文字が間違ってしまっているのと、空白が消えてしまうようですね。
flag: flag{AscII is key}
Mad Libs
stegsolveとかtweekpngで解けなかったので諦めた。
https://stylesuxx.github.io/steganography/
writeup見て、このページに画像投げたらflag出た。ひょええ。
flag: flag{v3rB_n0uN_adj3ct1v3}
Comments
unzip -z
コマンドやExiftool、Winzipでコメントが見えなくて諦めた。
writeup見て、zipnoteコマンドを各zipファイルに使ったらコメントが見えた。
こういうのは色々引き出しを増やすしかないですね…。
flag: flag{4n6}