2
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 3 years have passed since last update.

reversing入門

Last updated at Posted at 2021-04-09

せっかくreversingちょっとだけ解けるようになったので自分用メモとして書いておきます。

reversingって?

渡された実行形式ファイルやバイナリファイルを解析してflagを入手するctfの問題のジャンルのこと。

覚えておきたいコマンドやツール

  • stringsコマンド
  • objdumpコマンド
  • gdb
  • IDA(デコンパイラ)
  • dnSpy

このうち上3つはELFファイル(linuxの実行形式ファイル)で主に使う。下2つはPE(windowsの実行形式ファイル)で主に使う。

stringsコマンド

言わずと知れた有名なコマンド。ファイルから文字列を取り出すことができる。これとgrepを組み合わせることでファイルから特定の文字列を検索することができる。

ex)strings a.out | grep -A 3 ctf{
//a.outから取り出した文字列のうち,ctf{を含む行とその後3行を表示する。

objdumpコマンド

ファイルの情報を表示するコマンド。reversingでは主に-dオプションをつけて使う。
アセンブラがそのままだとAT&T記法で出力されるのでintel記法がいい人は-M intelをつけよう。

ex)objdump -d a.out -M intel
//a.outのアセンブラが出力される。

gdb

プログラムを実際に動作させて解析するツール。

ex)gdb a.out //gdbを起動
set disassembly-flavor intel //(見づらい人は)アセンブラをAT&T記法からintel記法に変更する(デフォルトはAT&T記法)
b main //main関数のエントリーポイントにブレークポイントを貼る
r //プログラムをrun(実行)する。このあとmainのブレークポイントで一旦止まる。
b *0x8000602 //8000602番地にブレークポイントを貼る。*つけ忘れると変なとこに貼るので注意。
c //ブレークポイントまで処理を進める。
j *0x800060f //0x800060f番地の命令までjumpする。
i r //全てのレジスタの値を出力する。
x/s $rax //rax番地に格納された文字列を出力する。
x/5s *0x200000 //0x200000~0x200005番地に格納された文字列を出力する(?)

大体このくらい使えたらある程度のことはできるはず。

IDA

僕はあんまり使ったことないけどデコンパイラとしてよく名前の上がる有名なやつ。
詳しくはこちらを参照。

dnSpy

PEアプリケーションがデコンパイルできる。32bitか64bitかをあわせないとデコンパイルできないので注意。vscodeみたいなUIなので割とわかりやすいと思う。

おわり

アセンブリが読みづらくて最初は混乱することも多いreversingだけど,低レイヤがわかるだけで重宝されるので,お手軽にハッカーみたいなことがしたい方はぜひチャレンジしてみてください。

2
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
2
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?