[FlareOn3]チャレンジ1
ステップ
- 定期検査、32ビットプログラム、シェルなし
- プログラムを実行して、一般的な状況を確認します
- 32ビットのidaがロードされます。
ロジックは非常に単純です。最初にパスワードを入力してNumberOfBytesWritten
そこに存在させます。次に、15行目でNumberOfBytesWritten
操作を実行してstr1を取得します。の場合str1=x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q
、出力は正しいです。 - 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暗号化にあまり詳しくない方は、この記事を読むことができます。