# please not trace me - Beginners CTF Online 2021 ## 解析 be angryと同じ難読化をしている。 `flag decrypted`と出力される箇所があるので、その段階でフラグがメモリ上に復号できているんだと思う。rc4とか書いてるからそういうことでしょう。 rc4関数の先頭と終端にフックを掛けて引数のメモリがどうなったか見れば良い。 ## 解法 ptraceを消すんだろうけど、今はそういう気分じゃないのでangrで終わらせる。 第一引数か第二引数に出力バッファがありそうなので、その辺を見る。 ```python= import angr import claripy from logging import getLogger, WARN getLogger("angr").setLevel(WARN + 1) p = angr.Project("./chall", load_options={"auto_load_libs": False}) state = p.factory.entry_state() simgr = p.factory.simulation_manager(state) arg1, arg2 = None, None @p.hook(0x401611, length=0) def pokemon(state): global arg1, arg2 arg1 = state.regs.rdi arg2 = state.regs.rsi print(arg1) print(arg2) @p.hook(0x401856, length=0) def digimon(state): mem1 = state.memory.load(arg1, 0x40) mem2 = state.memory.load(arg2, 0x40) print(state.solver.eval(mem1, cast_to=bytes)) print(state.solver.eval(mem2, cast_to=bytes)) simgr.explore(find=0x401329) ``` 終わり。 ``` $ python solve.py WARNING | 2021-05-03 17:35:23,153 | cle.loader | The main binary is a position-independent executable. It is being loaded with a base address of 0x400000. <SAO <BV64 0x404050>> <SAO <BV64 0xc0000f20>> b'\x80\x97\x85\xd7\x81\x98\x87\xd2\x87\xbc\x9a\xd3\x96\xbc\x87\xd0\x80\x91\x9a\x93\x97\xbc\x91\x80\xd7\xdc\x9e\x00\x00\x00\x00\x00nickelodeon\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' b'nickelodeon\x00\x00\x00\x00\x00ctf4b{d1d_y0u_d3crypt_rc4?}\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' ```