1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SECCON 2018 オンライン予選 Writeup[Runme]

Posted at

このブログは、大国魂(ITブログ) Advent Calendar 2018 の24日目です。

この記事の内容について

インフラ運用者ではあるもののセキュリティに興味があるので SECCON 2018 オンライン予選 に参加した筆者が、良質な Writeup がたくさんあるにもかかわらず自身の振り返りも兼ねて解けた問題の Writeup を書いた、というものになります。

予選終了後、便利に参照させていただいていた記事はこちらになります。

今回はかなりの迷子状態に陥った reversing の Runme について振り返ります。

Runme

問題文

Run me.
動かせばわかるという問題のようです。

runme.exe

  • 実行すると Failed というタイトルで The environment is not correct. というメッセージボックスがポップします

解法

解き方

IDA などのツールで開くと、大量のサブルーチンを順番に実行していることがわかります。
このうち定数を push している部分があり、この定数 が ASCII コードなのでつなぎ合わせるとフラグ SECCON{Runn1n6_P47h} を得られます。

たどり着くまでの経緯

  • runme の名前に踊らされてとにかく迷走していた
    • 各サブルーチンの jnz を書き換えて強制的に最後まで動作するよう調整したり
      (You know the flag! というメッセージボックスから、この中のどこかに隠されているとは思っていたものの気づかず)
    • それでも「動かした結果」フラグらしいものは得られなかったので本体自体に何かする必要があるかを考えたり
  • 数時間悩んだものの皆さんどんどん正解していっているので方向性が全然違うんだろうなぁと思い、CentOS6 で strings してみたら・・・
[root]# strings runme.exe 
j@h' @
h0 @
BRjC
BRj:
BRj\
BRjT
BRje
BRjm
BRjp
(snip)
BRjS
BRjE
BRjC
BRjC
BRjO
BRjN
BRj{
BRjR
BRju
BRjn
BRjn
BRj1
BRjn
BRj6
BRj_
BRjP
BRj4
BRj7
BRjh
BRj}^
Failed
The environment is not correct.
Congratz
You know the flag!
kernel32.dll
user32.dll
ExitProcess
GetCommandLineA
MessageBoxA

でました(かなしい)
まっとうな解き方としては先ほど記載したとおり、各サブルーチンで定数を push している部分 の定数を ASCII コードに変換するというものになります。
以下のキャプチャの push 43h の部分がサブルーチンごとに異なります。
適切な場所にファイルを配置して実行したり、jnz の部分を jze に少しずつ書き換えて実行可能なようにするとタイトル Congratz で中身が You know the flag! というメッセージボックスを確認できます。

runme.png

ここの変換については powershell なり python なりお好きなもので対応したり、大した量がないので一覧表で手変換したりとご自由に進められます。

43 3A 5C 54 65 6D 70 5C 53 45 43 43 4F 4E 32 30 31 38 4F 6E 6C 69 6E 65 2E 65 78 65 22 20 
 C  :  \  T  e  m  p  \  S  E  C  C  O  N  2  0  1  8  O  n  l  i  n  e  .  e  x  e  "   
53 45 43 43 4F 4E 7B 52 75 6E 6E 31 6E 36 5F 50 34 37 68 7D
 S  E  C  C  O  N  {  R  u  n  n  1  n  6  _  P  4  7  h  }

問題について

binary 問題の基本の「き」のような問題でした。
まっとうに取り組まなくても strings でフラグまで確認できてしまいますし、正しい推測ができればすんなりと解けるかなと。
私は「Runme」というタイトルからの思い込みですんなりいかなかったので、思考が外れていた場合リセットする期間を(一つの作業に夢中にならず)より短くする必要があるなと感じました。
また ASCII コードへの変換部分についても、こういった細かい部分をシュッっと実装できるスキルがないとより上位の問題に取り組む余裕すらないなと感じており、日々の研鑽を忘れずにいたいところです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?