CTFに使用するツール類まとめ

CTFによく使用するツールやコマンドの、主に自分の備忘録としてのまとめです。
何か思い出したらまた適当に更新します。

基本

Google

http://www.google.co.jp/
困ったときはこれ。

manコマンド

コマンドの使い方がわからないときに。コマンドに-hや--helpオプションを付けても見られるものもあります。

fileコマンド

ファイルの種類を確認するコマンドです。

stringsコマンド

バイナリファイル中の文字列を抽出するコマンドです。-nオプションで最低文字数を指定できます。

istrings

バイナリファイルからASCII文字列の他に日本語文字列も抽出することができます。

バイナリ

Bz

バイナリエディタUTF-8も表示できます。

Stirling

バイナリエディタEBCDICも表示できます。

PEditor

PEファイルの情報の閲覧・編集ができます。

PEiD

パッカーの種類を判定できます。

Resource Hacker

ボタンなどのリソースのIDが確認できます。

OllyDbg, Immunity Debugger

exe解析用。
crackmeなどを解くのに使用できます。

IDA Pro

高機能なデバッガです。
アセンブルコードのツリー表示は重宝します。

WinDbg

64ビット用のものを使うと、64ビットのexeも解析できます。
Breakキー(またはCtrl+ScrLk)でプログラムを止める、gで再開、~0kでスレッド0のスタックを表示、bp <アドレス>でブレークポイントをセット、blでブレークポイント一覧を表示、bc <ブレークポイントの番号>でブレークポイントを削除、tでステップイン、u <アドレス>で逆アセンブル、rでレジスタの内容を表示、dd <アドレス>でメモリダンプを表示、eb <アドレス> <値1 値2 …>でメモリを書き換えることができます。

gdbコマンド

ELFファイルなどの解析に使用します。
disas[semble] <関数名>で逆アセンブルできます。
set disassembly-flavor intelインテル記法で逆アセンブルします。
display/i $eip(または$pc, $rip)で次に実行される命令を常に表示します。
stepi(またはsi)でステップイン、nexti(またはni)でステップオーバー、fini[sh]でステップアウトできます。
b[reak] *0xdeadbeefのようにアドレスを指定してブレークポイントをセットすることもできます。
set {<型>}<アドレス> = <値>でメモリの内容を直接編集できます。
set $rip = 0xdeadbeefやset $esp += 0x20のようにレジスタの値も変更できます。
set follow-fork-mode childで、forkしたときにデバッギが自動的に子プロセスに切り替わります。
i[nfo] r[egisters]でレジスタの内容を表示します。

objdumpコマンド

ELFなどオブジェクトファイルの情報を確認できます。
objdump -h <バイナリファイル名>でヘッダの情報を確認できます。
objdump -M intel -S <バイナリファイル名>でIntel記法で逆アセンブルできます。
objdump -s <バイナリファイル名>でバイナリファイルのすべてのセクションの内容を表示します。
-j <セクション名>で特定のセクションだけを抜き出して処理できます。

xxdコマンド

xxd -p(-psでも可)でバイナリ→16進文字列、xxd -r -pでバイナリ文字列→バイナリに変換できます。

hexdumpコマンド

hexdump -Cvでバイナリエディタのように表示できます。(xxdやod -tx1 [-c]なども可)

ndisasmコマンド

ndisasm -u <バイナリファイル名>でバイナリファイルを逆アセンブルできます。

nasmコマンド

アセンブリ言語ソースコードアセンブルできます。
ファイルの頭にBITS 32を付けないと、16ビットとしてアセンブルされてしまいます。

ILSpy

.NETアセンブリC#などのコードに逆コンパイルできます。

dex2jar,jad

apkファイル(Androidのアプリケーションファイル)をJavaのコードに逆コンパイルできます。

IA-32 インテル(R) アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル

http://www.intel.com/jp/download/index.htm#ia32
x86マシン語に関するIntelのマニュアル。

binutils-arm-linux-gnueabi[hf]

binutils(objdump, readelfなどが入っているパッケージ)のARMアーキテクチャ版。ARMのelfが解析できます。arm-linux-gnueabi-objdumpなどのコマンドで実行できます。使い方は普通のbinutilsとあまり変わりません。

ネットワーク

WireShark

パケットのキャプチャ、pcapファイルの確認ができます。

Putty

Windowsからのssh用。

nmap

ポートスキャナ。

Web

Fiddler2

TextWizardで様々な方法で文字列のデコードができます(多分使い方間違ってる)。

DEncoder2

http://tools.nash-dev.com/
様々な方法で文字列のエンコード・デコードができます。

base64コマンド

base64でのエンコード・デコードができます。
base64エンコードbase64 -dでデコード、-w 0オプションを付けると改行せずに出力できます。

md5sumコマンド

md5が計算できます。

sha1sumコマンド

sha1が計算できます。

OnlineHashCrack

http://www.onlinehashcrack.com/
md5sha1などのハッシュ値の逆算が(データベースにあれば)できます。

フォレンジック

Autopsy

USBメモリのダンプファイルなどからファイルを読み出せます。
削除されたファイルも読み出すことができます。

foremost

バイナリファイルの中からファイルを探しだして復元します。

Scalpel

http://www.digitalforensicssolutions.com/Scalpel/
バイナリファイルからファイルを取り出して復元します。

数学

wxMaxima

数式処理ソフトウェアです。100乗根なども簡単に求められます。

bcコマンド

非常に大きな桁数の小数の計算ができます。
scale=1000;1/12345
などとすると、1/12345の値が小数点以下1000桁まで表示されます。

factorコマンド

素因数分解ができます。ただし、32bit環境では2 ^ 64 - 1までしか扱えません。

その他

Cygwin

Windows上に擬似的にLinux環境を構築します。

Lhaplus

パス付きzipのブルートフォースができます。

JohnTheRipper

/etc/shadowファイルのクラックができます。

Gimp

高機能な画像編集ソフトです。
特殊なフォーマットの画像の閲覧などに使用できます。

Audacity

音声ファイルの波形が確認できるソフトウェアです。
モールス信号の音声ファイルが読みやすくなります。

Python,Haskell,Rubyなど

標準で非常に大きな数を扱えるので便利です。

Perl

テキストの処理など便利です。
文字列同士のXOR、system("command");やmy $result = `command`;など重宝します。

ideone.com

http://ideone.com/
Web上でコードの実行ができます。
brainf*ckやWhitespaceなどの言語も使えます。

iconvコマンド

文字コードの変換ができます。iconv -f <元の文字コード> -t <変換後の文字コード>で変換できます。
UTF-7を始め様々な文字コードに変換できます。

sedコマンド

文字列の置換ができます。
cat <暗号文.txt> | sed -e 'y/ABC/xyz/'
とすると、暗号文中のAをxに、Bをyに、Cをzに置換して表示します。

revコマンド

入力された文字列を逆順に出力します。

vim

シンプルで高機能なテキストエディタです。Emacsが難解過ぎて疲れた人におすすめです。

Steghide

ステガノグラフィツール。

BozoCrack

Google検索を用いてハッシュ値を逆算するRubyスクリプト
分野がかなり偏っているのが一目でわかりますね……。

CrypTool

様々なアルゴリズムでの暗号化・復号ツール。

ツッコミ募集中です。

2012/8/21追記
@YuhoKamedaさんに教えていただいたツールを追加しました。ありがとうございます。