🙌
ieraeCTF writeup rev rev revだけ
ieraeCTFに参加してきました
簡単な問題一問しか解けなかったけどとりあえずwriteupをかく
初心者+初投稿なので、ものすごく丁寧に書いてるのは許してください
rev rev rev
stringsで確認したところ
flag = open('flag.txt', 'r').read()
x = [ord(c) for c in flag]
x.reverse()
y = [i^0xff for i in x]
z = [~i for i in y]
open('output.txt', 'w').write(str(z))
まず
flag = open('flag.txt', 'r').read()
x = [ord(c) for c in flag]
はflag.txt から文字列を読み込んで('r'で読み込みモード)、文字ごとに ord() で Unicodeのコード値に変換し、リスト x に格納している。この時flagにはflag.txtにある文字すべてが入り、それをxに一文字ずつ入れている形になる。
x.reverse()
は順番を逆に並びなおすということ
y = [i^0xff for i in x]
i^0xffをするとiのビットが逆転することは覚えておきましょう
XOR は可逆なので、2回 XOR すると元に戻ることも覚える
z = [~i for i in y]
これはビット反転で補数まで変わる違いがあります
ソルバー
z = [-246, -131, -204, -199, -159, -203, -201, -207, -199, -159,
-204, -158, -155, -205, -211, -206, -201, -206, -205, -211,
-158, -159, -207, -202, -211, -199, -206, -155, -206, -211,
-204, -200, -200, -200, -203, -208, -159, -199, -133, -187,
-191, -174, -187, -183]
y = [~i for i in z]
x = [i ^ 0xff for i in y]
x.reverse()
flag = ''.join(chr(i) for i in x)
print(flag)
IERAE{9a058884-2e29-61ab-3272-3eb4a9175a94}
次回はrev問題最後まで解けるようになるぞ!
Discussion