天天看點

xctf攻防世界 CRYPTO高手進階區 shanghai

0x01. 進入環境,下載下傳附件

題目給的壓縮包,包含一個txt檔案,如圖:

xctf攻防世界 CRYPTO高手進階區 shanghai

0x02. 問題分析

0x02_1. 維吉利亞密碼

什麼是維吉利亞密碼?維吉尼亞密碼是在凱撒密碼基礎上産生的一種加密方法,它将凱撒密碼的全部25種位移排序為一張表,與原字母序列共同組成26行及26列的字母表。另外,維吉尼亞密碼必須有一個密鑰,這個密鑰由字母組成,最少一個,最多可與明文字母數量相等。​​1​​

例如,我們有如下資訊:

明文:I’ve got it.

密鑰:ok

則可以得到密文:

密文:W’fs qcd wd.

操作如下,先看一張密碼表格:

xctf攻防世界 CRYPTO高手進階區 shanghai

首先,密鑰長度需要與明文長度相同,如果少于明文長度,則重複拼接直到相同。本例中,明文長度為8個字母(非字母均被忽略),密鑰會被程式補全為“okokokok”,那麼明文第一個字母是“I”,密鑰第一個字母是“o”,在表格中找到“I”列與“o”行相交點,字母“W”就是密文第一個字母;同理,“v”列與“k”行交點字母是“F”;“e”列與“o”行交點字母是“S”……

注意:

  • 維吉尼亞密碼隻對字母進行加密,不區分大小寫,若文本中出現非字母字元會原樣保留。
  • 如果輸入多行文本,每行是單獨加密的。

0x03. 問題分析

0x03_1. 還原密鑰

此處參考大佬的wp,收到很多啟發。

xctf攻防世界 CRYPTO高手進階區 shanghai

如圖:可以看到有這種時間資料,而且字元數字要滿足相應的長度,在英文中很容易聯想到between…and…的用法,且字元長度剛好符合。那麼,密文frxnimp對應明文between,對照密碼表格,按列找到列頭字母‘b’,然後對應的列找到加密字元‘f’,那麼可以找到行頭密文字元‘e’,以此類推,可以得到加密密文字元‘enereicqvi’

0x03_2. 确定密鑰長度

xctf攻防世界 CRYPTO高手進階區 shanghai

在原文中,我們可以看到兩個opk出現,根據加密原理,秘鑰長度會不斷重複進行加密的特點,那麼中間的間隔即為密鑰的長度,為11位。上述密鑰推出的10位,不足11位,是以,需要繼續尋找。

文本中出現過opk和16xu這類的,我們推測其中可能是時間序數詞,xu可能對應th,那麼opk則是對應the(英語文法推測)。是以,得到相應的密鑰:opk – vig xu – en,是以補充上述密鑰為:‘enereicqvig’

0x03_3. 确定密鑰順序

文中第一個詞為bju,在文中繼續搜尋,如圖:

xctf攻防世界 CRYPTO高手進階區 shanghai

有兩個字元和三個字元搭配的形式出現,推測是to the 的感覺,推測bju對應明文the。嘗試推出密鑰‘icq ’。那麼輪轉一下密鑰,可以知道加密的key為:‘icqvigenere’

0x04_4. 找到特殊标志

這麼大一篇文章,肯定不可能一個個看,那麼嘗試搜尋‘{’,因為符号不加密,發現有特殊的字元:

jtcw, ‘{’ vvj ‘zvkvrmtudabiecveaaxpp’ grq ‘}’。

因為jtcw為四個字元,猜測可能是flag,那麼推測出密鑰為:eicq,于是很容易确定括号中的加密字元vvj ‘zvkvrmtudabiecveaaxpp’ grq的加密key為‘vigenereicq’,放入到線上解析位址中​​http://www.hiencode.com/vigenere.html​​,如圖:

xctf攻防世界 CRYPTO高手進階區 shanghai
  1. ​​https://www.qqxiuzi.cn/bianma/weijiniyamima.php​​​​↩︎​​