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勉強します。。。