[BUUCTF] REVERSE- [FlareOn3] Challenge1

[FlareOn3]チャレンジ1

別館

ステップ

  1. 定期検査、32ビットプログラム、シェルなし
    ここに画像の説明を挿入します
  2. プログラムを実行して、一般的な状況を確認します
    ここに画像の説明を挿入します
  3. 32ビットのidaがロードされます。
    ここに画像の説明を挿入します
    ロジックは非常に単純です。最初にパスワードを入力してNumberOfBytesWrittenそこに存在させます。次に、15行目でNumberOfBytesWritten操作実行てstr1取得します。の場合str1=x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q、出力は正しいです。
  4. sub_401260()
    ここに画像の説明を挿入します
    プログラムは、3ごとに計算を開始し、39行目から計算を開始します。0x3Fを追加すると、base64暗号化であると簡単に推測できますが、通常のbase64暗号化とは少し異なります。パスワードテーブルが変更されています。 。
    ここに画像の説明を挿入します
    ここでは、暗号化に使用されるパスワードテーブルがある「ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789 + /」
    通常base64で暗号化されたパスワードテーブルは、「ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /される
    最後の文字は、文字の前に書かれています。」

復号化スクリプトを記述して元のbase64暗号化データを見つけ、base64でデコードします

import base64

encoded_flag = "x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q"

#ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/
#ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
_list = list("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")

_flag = ""

for i in encoded_flag:
    if (ord(i) <= ord('W') and ord(i) >= ord('A')) or (ord(i) <= ord('w') and ord(i) >= ord('a')):
        _flag += chr(ord(i) + 3)
    elif i == 'X':
        _flag += 'C'
    elif i == 'Y':
        _flag += 'B'
    elif i == 'Z':
        _flag += 'A'
    elif i == 'x':
        _flag += 'c'
    elif i == 'y':
        _flag += 'b'
    elif i == 'z':
        _flag += 'a'
    else:
        _flag += i

print(_flag)

print(base64.b64decode(_flag).decode())

ここに画像の説明を挿入します
フラグ{[email protected]}

base64暗号化にあまり詳しくない方は、この記事を読むことができます。

おすすめ

転載: blog.csdn.net/mcmuyanga/article/details/113594334