XCTF は暗号世界を攻撃し、守ります

電力暗号化

ここに画像の説明を挿入しますダウンロードの添付ファイルには数字の列があります8842101220480224404014224202480122
。0 の数と質問のプロンプトに従って、数字列は 8 つのグループに分割されます。各グループ内の対応する数字を合計して、対応するアルファベット順が決定されます。
旗: サイバーピース{ウェルダン}

Base64

ここに画像の説明を挿入します

添付ファイルをダウンロードした後、base64 でエンコードされた文字列を取得しY3liZXJwZWFjZXtXZWxjb21lX3RvX25ld19Xb3JsZCF9、それをデコードしてフラグを取得します。

ここに画像の説明を挿入します
旗:サイバーピース{新しい世界へようこそ!}

シーザー

ここに画像の説明を挿入しますCaesar暗号解読スクリプト:

#include <stdio.h>
#include <string.h>

int main()
{
    char passwd[100],encrypted[100];
    int i,j,k,t,move;
    while(1)
    {
        printf("Enter message to be encrypted:");
        gets(passwd);
        printf("Enter shift amount(1-25):");
        scanf("%d%*c",&move);
        for(i=0; i<strlen(passwd); i++)
        {
            if(passwd[i] >= 'A' && passwd[i] <= 'Z')
            {
                passwd[i] = ((passwd[i]-'A')+move)%26+'A';
            }
            else if(passwd[i] >= 'a' && passwd[i] <= 'z')
            {
                passwd[i] = ((passwd[i]-'a')+move)%26+'a';
            }
        }
        printf("%s",passwd);
        printf("\n");
    }
    return 0;
}


ここに画像の説明を挿入しますフラグの形式によれば、最初の文字は c で、フラグを取得するためのオフセットは 14 です: cyberpeace{you_have_learned_caesar_encryption}

モールス信号

ここに画像の説明を挿入します
モールス符号表によれば、復号化のための1はバー、0はドットを表す。
ここに画像の説明を挿入しますフラグを取得: サイバーピース{モールス信号とても興味深い}

手すり

ここに画像の説明を挿入しますオンライン ツールを使用すると、パスワードを解決して
ここに画像の説明を挿入しますフラグを取得するのが簡単です。

ランナーの暗号化

ここに画像の説明を挿入しますホイール暗号は
入力キーボードとホイールのセットで構成されており、各ホイールには 26 個の文字がマークされており、文字の順序はランダムです。車輪は歯車でつながっており、車輪が回転すると文字が別の文字に変換されます。
動作原理:
ホイール暗号機は複数のホイールで構成されており、各ホイールは異なる速度で回転します。たとえば、ホイールが 3 つあり、それぞれ 1、2、3 の番号が付けられています。ホイール 1 は 26 文字を回転させます。 2 で 1 文字回転し、2 番ホイールが 26 文字回転すると、3 番ホイールで 1 文字回転します。したがって、ホイール暗号機が26×26×26回転すると、全てのホイールが初期状態に戻り、3つのホイール暗号機の周期長は26×26×26(17576)となる。
ここに画像の説明を挿入します
添付ファイルをダウンロードして、次の内容を取得します:
ここに画像の説明を挿入しますまず、キーによってすべての行を並べ替えます。たとえば、元の 1 行目は実際には 2 行目、元の 2 行目は 3 行目などになります。次に、暗号文に従って対応する文字を先頭に置きます。たとえば、最初の行は NOZUTWDCVRJLXKISEFAPMYGHBQ などになります。
最後に、13X13 行列が取得され、次に正方行列が観察されてフラグが取得されます。
実行するスクリプトが書かれている公式 wp をチェックしてください。

import re
sss='''1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE < 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 3: < BDMAIZVRNSJUWFHTEQGYXPLOCK < 4: < RPLNDVHGFCUKTEBSXQYIZMJWAO < 5: < IHFRLABEUOTSGJVDKCPMNZQWXY < 6: < AMKGHIWPNYCJBFZDRUSLOQXVET < 7: < GWTHSPYBXIZULVKMRAFDCEONJQ < 8: < NOZUTWDCVRJLXKISEFAPMYGHBQ < 9: < XPLTDSRFHENYVUBMCQWAOIKZGJ < 10: < UDNAJFBOWTGVRSCZQKELMXYIHP < 11 < MNBVCXZQWERTPOIUYALSKDJFHG < 12 < LVNCMXZPQOWEIURYTASBKJDFHG < 13 < JZQAWSXCDERFVBGTYHNUMKILOP <
'''
m="NFQKSEVOQOFNP"
content=re.findall(r'< (.*?) <',sss,re.S)
iv=[2,3,7,5,13,12,9,1,8,10,4,11,6]
vvv=[]
ans=""
for i in range(13):
   index=content[iv[i]-1].index(m[i])
   vvv.append(index)
for i in range(0,26):
   flag=""
   for j in range(13):
       flag+=content[iv[j]-1][(vvv[j]+i)%26]
   print flag

さらに注意が必要なのは、最終フラグが小文字の形式であることです。
フラグ:fireinthehole

easy_RSA

ここに画像の説明を挿入します

モールスだけじゃない

ここに画像の説明を挿入します
オンライン ツールを使用してモールス信号を解読します。MAYBEHAVEANOTHERDECODEHHHHAAAAABAABBBAABBAAAAAAAABAABABAAAAAAABBABAAABBAAABBAABAAAABABAABAAABBABAAABAAABAABABBAABBBABAAABABABBAAABBABAAABAABAABAAAABBABBAABBAABAABAAABAABAABAABABAABBABAAAABBABAABBA
モールス信号のプロンプトによると、これは正しい旗ではありません。本当の旗はその後ろに隠されていますAAAAABAABBBAABBAAAAAAAABAABABAAAAAAABBABAAABBAAABBAABAAAABABAABAAABBABAAABAAABAABABBAABBBABAAABABABBAAABBABAAABAABAABAAAABBABBAABBAABAABAAABAABAABAABABAABBABAAAABBABAABBA。これは明らかなベーコン暗号形式です。解読すると旗を取得できます。
ここに画像の説明を挿入します
旗: サイバー平和{攻撃と防衛世界は興味深い}

混合エンコーディング

ここに画像の説明を挿入します添付ファイルを開くと、明らかに Base64 でエンコードされているので、burp スイートを使用して復号化して取得します。

&#76;&#122;&#69;&#120;&#79;&#83;&#56;&#120;&#77;&#68;&#69;&#118;&#77;&#84;&#65;&#52;&#76;&#122;&#107;&#53;&#76;&#122;&#69;&#120;&#77;&#83;&#56;&#120;&#77;&#68;&#107;&#118;&#77;&#84;&#65;&#120;&#76;&#122;&#69;&#120;&#78;&#105;&#56;&#120;&#77;&#84;&#69;&#118;&#79;&#84;&#99;&#118;&#77;&#84;&#69;&#50;&#76;&#122;&#69;&#120;&#78;&#105;&#56;&#53;&#78;&#121;&#56;&#53;&#79;&#83;&#56;&#120;&#77;&#68;&#99;&#118;&#79;&#84;&#99;&#118;&#77;&#84;&#69;&#119;&#76;&#122;&#69;&#119;&#77;&#67;&#56;&#120;&#77;&#68;&#65;&#118;&#77;&#84;&#65;&#120;&#76;&#122;&#69;&#119;&#77;&#105;&#56;&#120;&#77;&#68;&#69;&#118;&#77;&#84;&#69;&#119;&#76;&#122;&#107;&#53;&#76;&#122;&#69;&#119;&#77;&#83;&#56;&#120;&#77;&#84;&#107;&#118;&#77;&#84;&#69;&#120;&#76;&#122;&#69;&#120;&#78;&#67;&#56;&#120;&#77;&#68;&#103;&#118;&#77;&#84;&#65;&#119;

LzExOS8xMDEvMTA4Lzk5LzExMS8xMDkvMTAxLzExNi8xMTEvOTcvMTE2LzExNi85Ny85OS8xMDcvOTcvMTEwLzEwMC8xMDAvMTAxLzEwMi8xMDEvMTEwLzk5LzEwMS8xMTkvMTExLzExNC8xMDgvMTAw
Escape エンコーディングを復号化すると、 base64 エンコーディングが得られ、復号化する/119/101/108/99/111/109/101/116/111/97/116/116/97/99/107/97/110/100/100/101/102/101/110/99/101/119/111/114/108/100
と明らかな ASCII エンコーディングが得られ、対応する表に従って解決できます。welcometoattackanddefenceworld

旗:サイバーピース{攻撃と防御の世界へようこそ}

簡単な挑戦

ここに画像の説明を挿入します添付ファイルをダウンロードして開くと、フラグの .pyc ファイルを入力するように求められます。.pyc は、.py の実行後にコンパイルされたファイルであり、バイナリ ファイルです。
オンラインの .pyc 逆コンパイル ツールを使用して Python ソース コードを取得します。

#!/usr/bin/env python
# encoding: utf-8
# 如果觉得不错,可以推荐给你的朋友!http://tool.lu/pyc
import base64

def encode1(ans):
    s = ''
    for i in ans:
        x = ord(i) ^ 36
        x = x + 25
        s += chr(x)
    
    return s


def encode2(ans):
    s = ''
    for i in ans:
        x = ord(i) + 36
        x = x ^ 36
        s += chr(x)
    
    return s


def encode3(ans):
    return base64.b32encode(ans)

flag = ' '
print 'Please Input your flag:'
flag = raw_input()
final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
if encode3(encode2(encode1(flag))) == final:
    print 'correct'
else:
    print 'wrong'

補足: uncompyle6 を使用して .pyc ファイルを逆コンパイルすることもできます。コマンドを実行してpip install uncompyle6ツールをインストールします。コマンドを実行してuncompyle6 XXX.pyc逆コンパイル処理を完了します。

以下は監査コードです。最終フラグは最初にメソッド 1、次にメソッド 2、最後にメソッド 3 で暗号化されます。したがって、復号化するには、最初に 3、次に 2、次に 1 を実行します。
スクリプトを書いて直接実行すると、フラグが表示されます。

import base64
s="UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==="
s=base64.b32decode(s)
m = ''
for i in s:
   x = ord(i) ^ 36
   x = x - 36
   m+= chr(x)
h = ''
for i in m:
   x = ord(i) - 25
   x = x ^ 36
   h+= chr(x)
print h

ここに画像の説明を挿入します
旗:サイバーピース{興味深いですね}

おすすめ

転載: blog.csdn.net/weixin_44236278/article/details/102907842