CTF for BBA

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

BatPwn (in 2020) Writeup

BatPwn、私には早かったようです…。210点。

Cryptographer


その時点の時刻とxorしているっぽいコード。
日にちは問題文から、5/14らしいとわかる。

import time
import datetime
from hashlib import md5
import base64

def convert_unix_time(datetime_obj):
    return int(time.mktime(datetime_obj.timetuple()))

dt = datetime.date(year=2020, month=5, day=14)
tm = convert_unix_time(dt)

def xor(data, key):  
    return bytearray(a^b for a, b in zip(*map(bytearray, [data, key])))

s = 'U1FEQEdeS1JDSEBEXlZDUEFYSG5ZQ29TVVBFRFlXRFxvUUJFTA=='
i = 0 
s1 = base64.b64decode(s) 
while True: 
    i += 1 
    key = md5(str(int(tm + i))).hexdigest() 
    noobda = bin(int(key, 16))[2:].zfill(8) 
    xored = xor(s1, noobda) 
    if 'batpwn{' in xored and '}' in xored and not '`' in xored and not '^' in xored:
        print('flag: ' + xored)

候補がいくつかprintされるので、一番それっぽいのをsubmitする。

flag: batpwn{cryptography_is_beautiful_art}

M-ick Maybe

換字暗号された何かの文章っぽい。下記のサイトで元の文章に戻す。
quipqiup - cryptoquip and cryptogram solver

すると、問題文にも書かれている通りmoby dickっぽいのだが、"bquickly"みたいな変な単語がある。
本来の文章と比較すると、ところどころ1文字足されているようだ。それを拾っていくとフラグ。
本来の文章はネットからぐぐっては拾ってきたものを繋ぎ合わせ、オンラインの文字列比較サイトで比較して手作業で拾った。

flag: batpwn{hidd3n_moby_dick}



ここから下は解けなかった問題に関する自分用メモです。

・Ji++
¥#include以外にもファイルを取り込む方法があるらしい。インラインアセンブリ"incbin"を用いた方法。

int main(void) {
    __asm__ (
        ".incbin \"./flag.txt\""
    );
    return 0;
}

これをstringsすればフラグが出る。

・Messy Maze
discordに載ってたコードが美しすぎて唸った。

import angr
func_addr = 0x40056D 
p = angr.Project("./maze") 
cl = p.factory.callable(func_addr) 
cl(2,52,39) 
print(cl.result_state.posix.stdout.concretize())

angr勉強します。。。