2.《ゲーム》
最初にそれを開いてどのように見えるかを確認し、次にツールを使用して32ビットを取得します。以下では、idaとodを使用して問題を解決しています。
1.IDA
28行の前のコードは重要ではないという事実を考慮して、スペースを占有するためにここに配置されません。同時に、IDAがカスタム関数の名前を正しく取得できない場合、IDAはsub__とカスタム関数の開始アドレスを使用して関数を定義します名
35行目のv2が入力値に割り当てられ、v2が[0,8]に属する場合
ここで、byte_532E28の各ビットは1であり、sub_457AB4()に入ると結論付けることができます。これが、フラグが出ている場所であると推測されます。
sub_457AB4()を続行します
ここでは省略部分...
基本的に、後者は印刷関数であると推測でき、forループとスクリプトを計算している限り、フラグを取得できます。
a = [123,32,......,126,0]
b = [18,64,......,16,0]
c = 0
flag = ''
while (c<56):
a[c] ^= b[c]
a[c] ^= 0x13
flag = flag + chr(a[c])
c = c + 1
print(flag)
2.から
最初に最後のフラグである可能性のある住所を見つけ、フォローアップします
アイコンが1になっているのがフォローアップのアドレス、マーク2が見えるところが私たちを始めた機能のアドレス、赤い矢印に従ってジャンプしてジャンプのアドレスを探します。
このアドレスを覚えておいてください:E37AB4、私たちは再び失敗の場所を探します
フォローアップを続ける
この時点で、フラグに直接到達できる関数を上書きするだけです。jmp0xE37AB4と入力します。
ファイルを保存した後、任意の値を入力し、