CTF for BBA

ゲーム時々CTFやるBBAの日常。

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}