逆襲と防御の世界(初心者向けゾーン)(2)

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と入力します。

ファイルを保存した後、任意の値を入力し、

元の記事を25件公開しました 高く評価しました14 訪問5445

おすすめ

転載: blog.csdn.net/qq_40568770/article/details/104689848