読者です 読者をやめる 読者になる 読者になる

craneの技術録

writeupとかいろいろ

2016/11/12 サイバー甲子園 writeup

チームomakase

 京都すばる高校で、チーム「omakase」としてst98さんと出場した。

twitter.com

このst98さんがなかなかのプロで、その速さについていくのに必死だった(flag提出したら先に解かれてた)。まぁ、これは僕の技術不足がいけないんだけどもね……

結果

f:id:roots320:20161112215932p:plain

 

 

スコア{2410}で準優勝です!

本当に申し訳ない気持ちで一杯です。

じゃあ、お前は何やってたんだよ?

 はい、見事に人権が無くなりました。本当にありがとうごさいました。

 

初めてのwriteup

 書いていきます。初めてなので大目に見てください。

 

No1. Sample10 TRY FIRST

 flagがそのまま書いてある。コピペ

SECCON{Cyber_Koshien}

No2. Binary100 sl is not ls

 競技中解けなかった。

 slの貨物(?)載せる側面にflagが書いてあるらしい。

No3. Binary100 Assembler Tanka

 パス

No4. Binary300 fakeransom

 パス

No5. Binary200 guess the flag

 Clearされてたので、とばした。

No6. Crypto100 gokai?

 問題の文字列を5回base16でデコード。

SECCON{BASE64}

No7. Crypto100 very easy

 文字分割・連結の問題。pythonでパパパっとデコードして、終わりっ

SECCON{hex_dump}

No8. Crypto200 decode the flag

 何を思ったのか、スクリプトを作らず手打ちで復号した。が、Clearされてて、途中で放棄。何やってんの。。。

No9. Crypto100 onlineyosen

 競技中解けなかった。st98さんは画像上側に隠されている文字列に気づきClearさせました。解説タイムではどうやら、exifを用いた解法もあるらしく以後挑戦してみる。

No10. Network100 gettheflag

 パス

No11. Network200 sample

 パス

No12. Network200 get the flag

 パス

No13. Programming100 megrep

 開くとBzBzBz...とBzしか書かれてない。stirlingのビットイメージでflagが出てくる。

SECCON{bsdbanner}

No14. Programming100 x2.txt

 パス

No15. Programming200 decode the trapezoid Q R code

 [更新] OpenCVでやってみた。

#include <stdio.h>
#include <opencv/cv.h>
#include <opencv/cxcore.h>
#include <opencv/highgui.h>

int main(int argc, char **argv) {

IplImage *srcImg = cvLoadImage("qrcode.png",
CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if (srcImg == NULL){
printf("Can't Load Image.\n");
return -1;
}
IplImage *dstImg = cvCreateImage(cvGetSize(srcImg), IPL_DEPTH_8U, 3);

// 変換前座標 3点
CvPoint2D32f original = { cvPoint2D32f(0, 0),
cvPoint2D32f(srcImg->width, 0),
cvPoint2D32f(0, srcImg->height) };
// 変換後座標 3点
CvPoint2D32f translate
= { cvPoint2D32f(230, 30),
cvPoint2D32f(530, 30),
cvPoint2D32f(30, 130) };

CvMat *affineMatrix = cvCreateMat(2, 3, CV_32FC1);
// 変換行列を求める
cvGetAffineTransform(original, translate, affineMatrix);

// 変換行列を適用する(アフィン変換)
cvWarpAffine(srcImg, dstImg, affineMatrix,
CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS, cvScalarAll(0));

cvNamedWindow("変換前", CV_WINDOW_AUTOSIZE);
cvNamedWindow("変換後", CV_WINDOW_AUTOSIZE);
cvShowImage("変換前", srcImg);
cvShowImage("変換後", dstImg);

cvWaitKey(0);

cvReleaseImage(&srcImg);
cvReleaseImage(&dstImg);
cvDestroyAllWindows();

return 0;
}

 やっているのはアフィン変換。読めるよう値を調整していく。

f:id:roots320:20161124214015p:plain

これで読めるはず。

SECCON{The QR code system was invented by Denso Wave in Japan}

No16. Programming100 sum primes

 一番時間かかった。嫌な奴。当分は見たくない問題。

No17. Web100 sessio nhijack

 パス

No18. Trivia100 blacked out PDF

 黒塗り。こいつ去年も出てたな。コピペ

SECCON{kuronuri_ha_dame_zettai}

No19. Trivia200 blacked out PDF again

 ん?コピペできないぞ。と、思索した結果コピープロテクトかかってました。

 PDF パスワード解除 - 無料PDFパスワード解析ウェブサービス

 上サイトでプロテクト解除。コピペ

SECCON{1234567890}

No20. Trivia300 how much a fine?

 直感で埋めた。

SECCON{42576}

No21. Trivia100 acronym

 Clearされてた。ググれば出るでしょう。

 

競技を終えて

 とりあえず、皆さんお疲れ様でした。

内容としては、binaryとcrypto問がかなりこだわって作られているため楽しめました。

あとは、苦手(web,net)が結構浮彫になっていて今後の課題が見えてきました。

次回は、オンライン予選で会いましょう!