Neepu Sec 2023 オープンリバーストピックが再登場

ワンベース

トピック ロジック
1. 入力文字列を受け入れます
2. encode1 暗号化
3. encode2 暗号化
4. 暗号化されたフラグを比較して、
ここに画像の説明を挿入
encode1 が Caesar 暗号化であり、ディスプレイスメントが 3 で
ここに画像の説明を挿入
あることを判断します encode2 は Base64 復号です。最初に Base64
ここに画像の説明を挿入
復号
し、次に Caesar がwelcometotheworldofctfを取得します。

二.How to use python

1. プログラムロジックの解析

import base64
import hashlib
import sys

def abort():
    print("Wrong flag!")
    sys.exit(1)
print("Please input the flag:")
flag = input()

if len(flag) != 29:
    abort()
if flag[:5] != 'Neepu':
    abort()
if flag[16]!='a' or flag[17]!='_':
    abort()
if flag[22]!=flag[17]:
    abort()
if flag[28:] != '}':
    abort()
if base64.b64encode(flag[-4:].encode()) != b'X2t1fQ==': 
#_ku} 从倒数第四个字符开始切片,包括倒数第四个字符 base64解码即可
    abort()
if flag[-2:-15:-3].encode().hex() != '75316c745f':  
#u1lt_ 倒数第二个到倒数第15个,每隔3个取一次 十六进制转字符串即可
    abort()
if sum(ord(x) * 10000 ** i for i, x in enumerate(flag[11:15][::-1])) !=110009500490115:
#下标11到14共4个字符爆破得到n_1s
    abort()
if hashlib.md5(flag[9:3:-2].encode('utf-8')).hexdigest()!='db46a959e0f94c0a8977411ab69df11a':
#hy{ 下标九到三 查md5在线网站或者爆破都可以
    abort()
if hashlib.sha1((flag[6]+flag[8]+flag[10]).encode()).hexdigest()!= 'dcb7ec019a90e41f85181ec9f1da642a8ced1b2d':
#Pt0 sha1爆破
    abort()
if hashlib.sha256(flag.encode()).hexdigest() != 'a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892':
#sha256爆破
    abort()

print("You are right!")

2. ブラストフラッグ[11]~フラッグ[14]

for a in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
    for b in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
        for c in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
            for d in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
                str=a+b+c+d
                if(sum(ord(x)*10000**i for i,x in enumerate(str[::-1]))==110009500490115):
                    print(str)#n_1s

3.爆破sha1

md5 オンライン復号化 Web サイト: https://www.bejson.com/enc/md5dsc/自己復号化
sha1 ブラスト

hashcat -a 3 -m 100 dcb7ec019a90e41f85181ec9f1da642a8ced1b2d ?a?a?a

ここに画像の説明を挿入

4.sha256 マスクブラスト

最終的に結合されたマスク Neepu{Pyth0n_1s_a_t?a?al?a?a1_ku}

hashcat -a 3 -m 1400 a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892 Neepu{Pyth0n_1s_a_t?a?al?a?a1_ku}

またはブラストスクリプトを使用する

import hashlib

    string='Neepu{Pyth0n_1s_a_t??l??1_ku}'
    for a in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
        for b in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
            for c in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
                for d in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
                    string_try = string.replace('?', a, 1).replace('?', b, 1).replace('?', c, 1).replace('?', d, 1)
                    hash_object = hashlib.sha256(string_try.encode())
                    hex_dig = hash_object.hexdigest()
                    if(hex_dig=='a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892'):
                        print(string_try)
                        

3. IKUNチェッカー

1. 番組情報を見る

C# で書かれていることがわかります。dnSpy を使用して
dnSpy プロジェクトのアドレスを分析します: https://github.com/dnSpy/dnSpy
ここに画像の説明を挿入

2. プログラムロジックを解析する

dnSpy でプログラムを開いた後、From1 をクリックすると、check1 ~ check5 関数の
ここに画像の説明を挿入
ここに画像の説明を挿入
ヒントが表示されます。上記の検索機能を使用して、キー文字列を検索して見つけることができます。
ここに画像の説明を挿入
ここに画像の説明を挿入

3. button1_conClick関数

フラグの判定が行われ、フラグのさまざまな部分が傍受され、さまざまなチェック関数が呼び出され、最後に暗号化された結果が結合されて出力されることがわかります。
ここに画像の説明を挿入

4.check1機能

md5暗号化、復号化して1998-8-2を取得
ここに画像の説明を挿入

5.check2機能

check2はsha1です
ここに画像の説明を挿入

wp を参照するのは非常に奇妙です: Neepu Re Writeupによると、sha1 も md5 であり、実際に復号化できるとのことです。Jinitaimei
確認しましたが、理由がわかりませんでした。知っている人がいたら、教えてください。

ここに画像の説明を挿入

6.check3機能


ここに画像の説明を挿入
文字列が 2 つあるため、「-」が 2 つあることに注意してください。
ここに画像の説明を挿入
ここに画像の説明を挿入

7.check4機能

AES 暗号化
テキストが暗号文、バイトがキーで、モードが ECB、PaddingMode が PKCS7 であることがわかります。暗号化ツールボックスを使用して、 xiaoheizishiba
ここに画像の説明を挿入
を解決できます。
ここに画像の説明を挿入

8.check5機能

sha256、つまり、ハッシュのために上記で得られた結果を結合します (検証を通じてフラグを取得するプログラムを実行することもできます) スプライシング結果: 1998-8-2
- jinitaimei-xiaoheizishiba
sha256: b8688fc33b5786095dc70a34ad14b9623905185663fa26dcc75d3b6b1f699
99 フラグ:ニープ{b8688fc33b5786095dc70a34ad14b9623905185663fa26dcc75d3b6b1f69999e}
ここに画像の説明を挿入

4. ジャンクコード

プログラムはフラグを与えているようですが、出力速度が非常に遅いです

1. 32 ビット動的デバッグ ツールを使用してデバッグします。

32 ビット デバッグ ツールを使用してデバッグできます。
開いたら、F9 キーを押してプログラムを実行し、右クリックして文字列を見つけます。
ここに画像の説明を挿入
フラグNeepu{it-1s-not-junk-code- を直接見つけることができます。 1u-1u-the-qq-bin-mat}

ここに画像の説明を挿入

2.CheatEngineを使用する

プロセスをアタッチするには、検索文字列を選択し、Neepu { を検索します。
ここに画像の説明を挿入

次に、アドレスを右クリックして、関連するメモリ領域を参照することを選択すると、 Neepu{it-1s-not-junk-code-1u-1u-the-qq-bin-mat}
ここに画像の説明を挿入
フラグが表示されます。

ここに画像の説明を挿入

5. ストレンジエルフ

この質問は追加のデバッグを添付して行われていませんでした

1. 砲撃

upx -d 移動

2. 関数ロジック

mov の混乱、同様の質問がありますmovfuscator の混乱 - re5-packed-movement は
mov の混乱の原理について非常に優れています。ここにいくつかの推奨記事があります。

  1. movfuscator の混乱
  2. 難読化テクノロジーについて語る ----Citadel 難読化シェルから

git のダウンロードが非常に遅いため、難読化対策環境が準備できていません。ここでは、検索を使用してマシン コードを検索し、直接取得できます。
ここに画像の説明を挿入

6.Xor

この質問は go 言語の逆です 一部の関数は ida8.2 を使用すると解析できます 下位バージョンの解析結果は醜いです
IDA8.2FreeWare のダウンロード アドレス: IDA Freeware Download Page

1. メイン関数を見つけます

入力後、main 関数が見つからないことがわかりました。この質問を見つけるには 2 つの方法があります。
まず、プログラムを実行すると、出力が表示されます。フラグを入力してください。
その後、文字列参照に従って検索できます。クロス2番目の
ここに画像の説明を挿入
方法は、フラグを入力する必要があるため、scan 関数を検索し、Fscanln の相互参照を調べることができ、
ここに画像の説明を挿入
main 関数を見つけて、下から見ることによるキー論理 XOR

2. プログラムロジック

ここで、v17 は毎回 4 以上かどうかを判定し、v17 をオフセットとして qwer 内の文字を検索するため、
qwer[i%4 と同様の関数であると推測できます。 ] を実行し、データと XOR します (確かに、リバースは推測に依存する必要があります)。
ここに画像の説明を挿入

3. 問題解決スクリプト

ここでの落とし穴は、ida8.2 フリーウェアでは idapython スクリプトを作成できないことです。idapro7.7 を使用して、8.2 で分析したばかりのデータベース ファイルを開き、動的デバッグ用のブレークポイントを設定
します (v25 暗号文の値は静的に表示できません)。
v25 をフォローアップしてアドレスを表示します (または、rsp、rbp に対する相対的なオフセットに基づいてアドレスを計算します)
ここに画像の説明を挿入
idapython スクリプトを使用してフラグを出力します (idapython スクリプトの基本的な操作を簡単にまとめました。この質問にはこれで十分です) : IDAPython 入門の基本文法)
ここに画像の説明を挿入
flag:Neepu{X0r_is_easy_1234123412345}

7. 参考資料:

  1. ニープ再書き込み
  2. NEEPUCTF 2023 公式記事 (Neepu グループで入手可能)

おすすめ

転載: blog.csdn.net/OrientalGlass/article/details/130807443