iwasiblog

イワシブログ - Activity log of an iwasi -

Plaid CTF 2015 Write-Up

この前やっていたPlaidCTFで解いた問題のWriteUpです。

解けたもの
・Unknown (Forensics 30pts)
・Sawed (Misc 20pts)

簡単なものばかりですが・・・。

Unknown (Forensics 30pts)

不明なテキストデータが渡されます。

\begindata{raster,1}

という特徴的な書き出しや、bitsという単語で検索をすると、
「Andrew Toolkit raster object」なるものだと分かりました。
あとはNetpbmに含まれるatktopbmでビットマップイメージに変換して終了。

Sawed (Misc 20pts)

以下の長い文字列を解読しろという問題。

ddddddwwwwwwaaaaaasssssssssssssseddddddddddddddddddewwawwawwawwawwawwawwaedddssssssddddssssssssewwdwwdwwdwwdwwddssdssdssdssdsswwdwwdwwdwwdwwdwwdwwdassassassassassassassedddddddddddddddewwwwwwwwwwwwwwdssdssdssdssdssdssdsswwwwwwwwwwwwwwssssssssssssssedddddddddddewwwwwwwwwwwwweddddddddddessssssssssssssedddddddewwwwwwwwwwwwwweaaaaaaaedssdssdssdssdssdssdssewdwdwdddwddwdwwddwddwddwddewawwawawaaasasassasssasssdsssdsddsddddwdwwdwwwaaaessdddsddsddddsddddewdwdwdwdwdwdwdwawawawawawawaedddddddddddddddeddddddddaaaaaaaasssssssssssssswwwwwwwwdddddeddddddddeddddddwwwwwwaaaaaassssssssssssssedddddddddddddwwesdsddsdddwddwdwwwawwawawaawaawawwdwwdwdddsddsdsedddwwwdddesssssssssesssssess


ほとんどを占めるd、w、a、sの4キーから、これは上下左右の移動だろうなと直感で分かりました。
となると、その軌跡に意味があり、eは線の切れ目であると仮定し、以下のコードを書きました。
Processingです。

void setup(){
  size(500, 500);
  
  String str = "ddddddwwwwwwaaaaaasssssssssssssseddddddddddddddddddewwawwawwawwawwawwawwaedddssssssddddssssssssewwdwwdwwdwwdwwddssdssdssdssdsswwdwwdwwdwwdwwdwwdwwdassassassassassassassedddddddddddddddewwwwwwwwwwwwwwdssdssdssdssdssdssdsswwwwwwwwwwwwwwssssssssssssssedddddddddddewwwwwwwwwwwwweddddddddddessssssssssssssedddddddewwwwwwwwwwwwwweaaaaaaaedssdssdssdssdssdssdssewdwdwdddwddwdwwddwddwddwddewawwawawaaasasassasssasssdsssdsddsddddwdwwdwwwaaaessdddsddsddddsddddewdwdwdwdwdwdwdwawawawawawawaedddddddddddddddeddddddddaaaaaaaasssssssssssssswwwwwwwwdddddeddddddddeddddddwwwwwwaaaaaassssssssssssssedddddddddddddwwesdsddsdddwddwdwwwawwawawaawaawawwdwwdwdddsddsdsedddwwwdddesssssssssesssssess";
  PImage img = createImage(500, 500, RGB);
  boolean drawing = true;
  int x = 250;
  int y = 250;

  for(int i = 0; i < str.length(); ++i){
    switch(str.charAt(i)){
      case 'w':
        --y;
        break;
      case 's':
        ++y;
        break;
      case 'a':
        --x;
        break;
      case 'd':
        ++x;
        break;
      case 'e':
        drawing = !drawing;
        break;
    }
    if(drawing){
      img.set(x, y, color(255));
    }
  }
  image(img, 0, 0);
}

そして得られた画像(一部)。

f:id:kuroiwasi:20150424024225p:plain