ログイン
編集不可のページディスカッション情報添付ファイル
CTF/Writeup/31C3 CTF/bor ey

MMA

bor ey

stringsするとElymasのプログラムが見える。

$ strings -T binary bor_ey -n 10 -w -t x
(中略)
 675418 { 255 band } =*ey
{ _ 16 mul -01 16 div bor ey } =*r
{
  42 ==i
  [ 35 51 neg 35 53 neg 31 123 neg 73 neg 51 neg 55 125 neg 26 24 83 neg 53 244 neg 53 208 neg 78 neg 84 neg 54 163 neg 53 191 neg 70 73 neg 51 neg 50 82 neg 99 53 189 neg 53 207 neg 74 neg 159 neg 88 86 neg ]
  { i -001 bxor add _ r =i }
  '*0.0
}
{
  "Enter secret access code\n" sys .out .writeall
  {
    -101* str .fromArray eq {
      "You know the secret code.\n" sys .out .writeall 0 sys .exit
    } {
      "Lol, nope.\n" sys .out .writeall
    } ? *
  } sys .in .eachLine
  0 sys .exit
}

"bor_ey" sys .freeze
0
(省略)

フラグ生成部を読んで、Rubyプログラムに直した。

   1 def ey(x)
   2   x&255
   3 end
   4 
   5 def r(x)
   6   ((x*16) | (x/16)) & 255
   7 end
   8 
   9 array = [35, -51, 35, -53, 31, -123, -73, -51, 55, -125, 26, 24, -83, 53, -244, 53, -208, -78, -84, 54, -163, 53, -191, 70, -73, -51, 50, -82, 99, 53, -189, 53, -207, -74, -159, 88, -86]
  10 i = 42
  11 array.each do |x|
  12   print ((x^i)+i).chr
  13   i = r((x ^ i) + i)
  14 end

$ ruby solve.rb
31C3_e717cbd19296428a9ef7140c9c958ed2

CTF/Writeup/31C3 CTF/bor ey (最終更新日時 2014-12-30 14:17:53 更新者 nomeaning)