皆さんこんにちわ。クリスマスイブも対面授業がある”asupara”です。
ところで最近学外活動としてはwiresharkを用いたネットワーク解析、binary exploit、C言語によるcat command自作などをやっておりふときがついたら『pythonを使ってないなー』となりました。しかしpythonを使ったところで特に技術力もあまりなく作れそうなものもないのでやっぱりcryptoに戻ってくるしかありませんでした。とは言っても難しいcryptoのことは全然わかんないんですけどね。今回取り上げるものは簡単なものです。“exclusive”な暗号解読にチャレンジしてみます!!(wani CTFより)
下のようなencrypto.pyが与えられているものとします。
XORを使った暗号ですよね。keyがあってflagが見えます。2つの値を関数に渡してXOR演算をとりましょう。XORは任意の元の逆の元は自分自身であるということを使っています。
assert key[0:3] * 19 == key より3文字の繰り返しで暗号が生成されていることがわかる(それが19回)のでその通り数は高々 255 ** 3通りしかないことがわかますよね。フラグの長さは57文字か!
また、flagの形式が”FLAG{”から始まることに注目してやるのです。
output.txtが以下のように与えられています。9;.0”s3)q1+046-,&3#u-‘vr*,s6,1.”(,t$:775# *c>
output.txtはバイナリファイル化してしまっていてみにくいのでみやすく変換したのが次になります。
なるほどこれでやっと法則が見えてきたみたいです。x,y,zの三文字が繰り返すと想定すると、最初の文字から F^x=7 , G^y=14, A^z=2, | G^x=6, { ^y=57………….となるようです。この時のx,y,zは対数を用いたら求めれますね。なるほど把握把握!!
ではoutput.txtを同じディレクトリー下においてやって複号するプログラム.pyを書いてやりましょう!
下のコードを準備しました!
実行するとーーーーーお見事ーーーーーー
FLAG{xor_c1ph3r_is_vulnera6le_70_kn0wn_plain7ext_@ttack!}
メリークリスマス!🎄そして皆さん良いお年をーーーーーーーasuparaでした。