saotake’s blog

-竿竹-

(TUCTF2016)The Neverending Crypto Level 2~(Crypto10~)

Level2以降は、似たようなものが続きます。アルゴリズムはたいして難しくないので手間と時間の戦いです。

pythonコードは汚いので紹介だけです。

 

■Level2(10)

abcz ! ABC encrypted is nop(-.-NOP

Level1とほぼ同じで、平文と暗号化の対応関係が変わっただけ。

abcdefg・・・

nopqrstu・・・

 今度はシーザー暗号のRot13。

正確には、アスキーコードで13足したうえで、126を超えた場合は、アスキーコードの32に戻る。

ENC = PLAIN +13

if(ENC > 126) ENC = ENC-126+31

また50問でした。

 

■Level3(10)

abc defghijklmnopqrst encrypted is abc sftdhuneimky;qprg

abc defghijklmnopqrst encrypted is abc sftdhuneimky;qprg

abc defghijklmnopqrst encrypted is axj e.uidchtnmbrl'poy

abc defghijklmnopqrst encrypted is abc sftdhuneimky;qprg

abc defghijklmnopqrst encrypted is axj e.uidchtnmbrl'poy

 

 

暗号パターンが2種類になります。Roundごとに、abcを入力して、その暗号結果でリストを切り開けて使えばOK。

Plain = "abcdefghijklmnopqrstuvwxyz "
Encパターン1 = "axje.uidchtnmbrl'poygk,qf; "
Encパターン2 = "abcsftdhuneimky;qprglvwxjz "

 

■Level4(10)

 abc encrypted is RST

abc encrypted is uvw

abc encrypted is FGH

 rot(n)の暗号。nの値が毎回変わるので、Roundの最初にaを入力して、何個rotされているかを調べてリストを作ってしまえばOK。

例:N=2の場合

Plain = abcdefg・・・

Enc = cdefghi・・・

 

■Level5(10)

abc encrypted is >=<

rot(n)のリバース。計算式さえ思いつけばLevel4の計算式をちょっといじるだけ。

Plain = abcdefg・・・

Enc =  jihgfed・・・・

こんな感じ

PlainOf('X') = ord('a') - (ord('X')) - ord(ENC('a')) )

 (nが固定なことには後で気づいた)

 

■Level6(50)

abc encrypted is quy

qrstuvwxyz encrypted is gikmoqsuwy

rot(n)した上でm文字飛ばし。n,mはroundごとに毎回変わるので暗号結果を見て計算。

 

■Level7(50)

土曜しか参加できなかったので時間切れ。ついに一対一の静的写像ではなくなった模様。