電力暗号化
ダウンロードの添付ファイルには数字の列があります
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 スイートを使用して復号化して取得します。
LzExOS8xMDEvMTA4Lzk5LzExMS8xMDkvMTAxLzExNi8xMTEvOTcvMTE2LzExNi85Ny85OS8xMDcvOTcvMTEwLzEwMC8xMDAvMTAxLzEwMi8xMDEvMTEwLzk5LzEwMS8xMTkvMTExLzExNC8xMDgvMTAw
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
旗:サイバーピース{興味深いですね}