CTF圧縮パッケージ分析

ブルートフォース

利用 ARCHPR

平文攻撃

プレーンテキスト攻撃とは、暗号化されたZIPと暗号化されていない圧縮ファイルを指します。同じZIP圧縮パッケージ内のすべてのファイルは同じ暗号化キーを使用して暗号化されるため、既知のファイルを使用できます。キーを推測し、ZIPファイルを復号化する攻撃方法。

問題解決のアイデア:

タイトルが画像と圧縮パッケージを提供していると仮定すると、圧縮パッケージは暗号化されており、外部パッケージと同じ名前の画像が圧縮パッケージ内にあります。推測はプレーンテキスト攻撃です。ソフトウェアを使用して画像を圧縮した後、圧縮パッケージ内の画像と圧縮された画像のCRC32値が同じであることがわかりました。これは、平文攻撃であることが確認されています。

練習:

ARCHPRを開き、復号化する圧縮パッケージを開き、「攻撃のタイプ」を「プレーンテキスト」として選択し、「プレーンテキスト」オプションをクリックして、画像を圧縮したばかりの圧縮パッケージを選択します。「開始」をクリックしてクラッキングを開始し、キーを取得します。

[注:異なる圧縮ソフトウェアは、異なる圧縮アルゴリズムを使用します。自己圧縮された圧縮パッケージは、同じテキストで与えられた圧縮パッケージの圧縮アルゴリズムがプレーンテキスト攻撃を実行できるようにする必要があります(一般的な圧縮ソフトウェア:優れた圧縮、winRAR、7z、高速圧縮、360圧縮)]

CRC32衝突(小さな圧縮ファイルファイルに適しています)

CRCの完全な名前は巡回冗長検査(巡回冗長検査、CRC)です。異なる長さの定数は、さまざまなCRC実装アルゴリズムに対応します。これは、ファイルにエラーがあるかどうかを確認するために使用できますが、自動エラー修正には使用できません。

問題解決のアイデア:

タイトルの解凍が開き、CRC32衝突を試すために複数の圧縮パッケージがあることがわかりました

練習:

スクリプトを記述し、CRC32衝突を使用して、圧縮パッケージ内のすべてのファイルの内容を復元してみます

参考大神写的脚本
import zipfile
import string
import binascii
 
def CrackCrc(crc):
    for i in dic:
        for j in dic:
            for p in dic:
                #for q in dic:
                    s = i + j + p
                    if crc == (binascii.crc32(s) & 0xffffffff):
#在 Python 2.x 的版本中,binascii.crc32 所计算出來的 CRC 值域为[-2^31, 2^31-1] 之间的有符号整数,为了要与一般CRC结果作比对,需要将其转为无符号整数,所以加上& 0xffffffff来进行转换。如果是 Python 3.x 的版本,其计算结果为 [0, 2^32-1] 间的无符号整数,因此不需额外加上& 0xffffffff
                        #print s
                        f.write(s)	
                        return

def CrackZip():
    for I in range(36):
        file = 'flag' + str(I) + '.zip'
        f = zipfile.ZipFile(file, 'r')
        GetCrc = f.getinfo('flag.txt')
        crc = GetCrc.CRC
        #以上3行为获取压缩包CRC32值的步骤
        #print hex(crc)
        CrackCrc(crc)
 
dic = string.ascii_letters + string.digits + '+/='
 
f = open('out.txt', 'w')
CrackZip()
f.close()

圧縮ファイルが6バイトの場合

利用可能なツールhttps://github.com/theonlypwner/crc32

使い方:
python crc32.py reverse crc32密文(16进制形式)

zip疑似暗号化

構成:圧縮ソースファイルデータ領域+圧縮ソースファイルディレクトリ領域+圧縮ソースファイルディレクトリエンドマーク
ZIPファイルヘッダーの識別は0×50に固定4B 03 04
コアディレクトリエリアマークは0x 50 4B 01 02
コアディレクトリエンドマーク0× 50 4B 05 06

問題解決のアイデア

圧縮されたソースファイルのディレクトリ領域の完全なレイアウトモードマークを表示する

50 4B 01 02 3F 00 14 00 09 00
第9、10位00 00,即为全布局方式标记,由此判断有无加密(伪加密的关键)
【注:全局方式位标记的四个数字中只有第二个数字对其有影响,其它的不管为何值,都不影响它的加密属性!】 
第二个数字为奇数时 –>加密 
第二个数字为偶数时 –>未加密
練習

グローバルモードのビットマークを00 00に変更します。

画像の圧縮パッケージを非表示にします

ビンウォークまたは最前線の分離

例としてjpgファイルを取り上げます。jpgファイルはFF D9で終わり、画像ブラウザーはFF D9の背後にあるコンテンツを無視します。今回は、背後に他のファイルを追加できます。

このような問題については、画像を16進エディターにドラッグして、ファイル形式を確認できます

または直接カリビンウォークに引き込む/最前線をスキャンして分離する

おすすめ

転載: www.cnblogs.com/NPFS/p/12681213.html