zer0pts CTF 2022 - service (Rev) Writeup

主催者およびスポンサーの皆様、素晴らしいCTFを開催してくださりありがとうございました。

service (Rev)

入力した文字列から2文字ずつSHA256ハッシュを求めて、ハードコードしてあるものと比較している。インポートテーブルが書き換えられており、IDA等では謎な逆アセンブル結果が表示されるが、デバッガーを用いることでWin32APIのCrypto周りの関数を呼び出していることがわかる。

import string
import hashlib

flag = ""

with open('chall.exe', 'rb') as cf:
    cf.seek(0x2220)
    dat = cf.read(0x261f-0x2220+1)

for i in range(0, 32*32, 32):
    for c1 in string.printable:
        for c2 in string.printable:
            pos = c1 + c2
            if dat[i:i+32].hex() == hashlib.sha256(pos.encode()).hexdigest():
                flag += pos

print(flag)