build_error

問題文

怪盗シンボルより、以下の謎とき挑戦状が届いた。

怪盗シンボルだ! メールに3つのファイルを添付した。 この3つのファイルを同じディレクトリに置き、makeとシェルに入力し実行するとビルドが走るようになっている。 ビルドを行い、標準出力からフラグを入手するのだ! 追記:ソースコードは秘密

怪盗シンボルはせっかちなので、ビルドできるかチェックしているか不安だ。。。 取り合えずチャレンジしてみよう。

FlagフォーマットはTsukuCTF23{n桁の整数}になります。

難易度

Medium

解法

  1. makeとシェルへ入力し、実行することで①のエラーが発生する。
    ①GCCの場合
cc main.o one.o -no-pie /usr/bin/ld: main.o: in function `main': main.c:(.text+0xc): undefined reference to `a' /usr/bin/ld: main.c:(.text+0x13): undefined reference to `b' collect2: エラー: ld はステータス 1 で終了しました make: *** [Makefile:4: all] エラー 1
  1. エラー内容を見るにmain.o内部でシンボルaとシンボルbが解決できていないことがわかる
  2. リンクするone.oのシンボル情報をnmコマンドで見てみると、②の出力が得られる。
0000000000000008 b a 0000000000000010 b b 0000000000000000 B c 0000000000000000 T one_init
  1. nmコマンドの出力におけるシンボルタイプは、小文字はローカル、大文字はグローバルとなっている。なので、aとbはローカルであり、cはグローバルであるとわかる。
  2. 1.と4.よりシンボルaとbが、グローバルなシンボルタイプであればよい。よって、③のコマンドを入力する。
objcopy --globalize-symbol a one.o objcopy --globalize-symbol b one.o
  1. makeとシェルへ入力し、実行すると以下の出力が得られる。
flag is 120
© 2021-2024 SecHack365-Fans All Right Reserved.