196の日記

セキュリティ系の勉強、その他開発メモとか雑談、忘れそうな計算式などを書き溜める場所になっています. githhubはUnity触っていた頃ものがメイン https://github.com/196kakinuma [twitter https://twitter.com/196Ikuchil]

【初心者レビューとまとめ】リバースエンジニアリング~Pythonによるバイナリ解析技法

全体を通して

情報が古いです。

これに尽きるかと思います。(2018年8月現在)対象がWindowsXPの32bitアプリケーションとなっており、Python自体も32bitを使用していた気がする。全体を通してPython2.xでの説明。この環境は作れないことはないですが、作ったところで32bitのみの学習になってしまい、やる気が続くかと考えると少し微妙かも。。なので、無理して読む必要もないかも。しかし、これの現代環境版が出たら初心者の僕としては是非読みたいと思える内容は含んでいます。


2章 デバッガについて

レジスタやスタックについて話し、ブレークポイントについて説明

ソフトウェアブレークポイント

1バイトの命令によってプロセスの実行が停止、デバッガのブレークポイント例外ハンドラに制御が渡る。CRCチェックサムが変わるので、自信をkillされる可能性がある

ハードウェアブレークポイント

必要なブレークポイント数が少なく、デバッグ対象のソフトウェアに変更を加えることができない場合に有効。デバッグレジスタ(DR0~DR7)を使用する。CPUが各命令を実行する前にそのアドレスについてブレークポイントが有効になっているかチェックし、INT 1が引き起こされ実行を停止する。"特定のアドレスにある命令の実行時にブレークする" "特定のアドレスに対するデータの書き込み時にブレークする", "特定のアドレスに対する読み取りまたは書き込み時にブレークするが、実行時にはブレークしない"の条件をDR7によって制御できる。

モリーブレークポイント

メモリのページのパーミッションを保護ページに設定することで、保護ページ例外を拾う。



3章 Windowsデバッガの構築

Pythonとctypesを利用してデバッガーを作りながら、Windowsアプリケーションをデバッグします。が、これが例の32bit問題で今やると途中でつまります。初心者(私)は自分で解決ができないので、苦しむか時間浪費します。この本で一番重要なことを話しているので、コード読んで内容を理解するのが吉。


4章 PyDbgでのWindowsデバッガ

PyDgbが開発終了しているので、読む価値は薄いです。飛ばしました


5章 Immunity Debugger

Immunity Debuggerを使用します。やるなら全部32bit環境にしておくとスラスラ進みます。


6章 フック

PyDbgとImmunity Debuggerのフックの話。

ソフトフック

ターゲットプロセスにアタッチし、INT3に対するブレークポイントハンドラを実装して実行フローを横取りする

ハードフック

アセンブリ言語で書かれたフックコードを実行するために、ター元とのアセンブリコード中にジャンプ命令をハードコードする。


7章 DLLインジェクションとコードインジェクション

DLLインジェクション

とあるプロセスに対して、DLLパスを格納するメモリ領域をアロケート →パスを書き出す→リモートスレッド生成→リモートスレッドがLoadLibraryAを使用してDLLをロード要求をしているかのように見せる。プロセスの一部としてロードできるため、外向きの接続を一定のアプリケーションにのみ許可するソフトウェアファイアウォールをかわしたい場合などに有効。

コードインジェクション

実行中のプロセスに生のシェルコードを挿入しそれを即座にメモリで実行させる。この部分のシェルコードが32bit用のものなので、64bitのアプリケーションには書籍通りではできません。


8章ファジング

アプリケーションエラーを起こすことを狙って、不適切なデータを送ること。バッファオーバフロ、整数オーバフロー(限界の繰り上がり時に上位桁が消えるため、0x00000001等の小さい値になるよね)、書式指定文字列攻撃(printfのやつ)


9章 Sully

現在ではboofuzzという後継のライブラリが出ているが、Sullyの書式とほぼ同じなため、読んでおいてもOK。ちなみに、この時点で環境がぐちゃぐちゃでどのPythonがどこで使われているとか、ぐちゃぐちゃになっていたので、boofuzzは結局入れなかった。コード読むだけに留めました。


10章 Windowsドライバのファジング

興味外だったので飛ばした。


11章 IDAPython

IDA Proは手元にないのでとりあえず今はスルー


12章 PyEmu

今はスルーだけど、一度環境を綺麗にして導入できたらやる。



まとめ

古い技術書はやっぱりこんな感じですっていう本。読みにくかったし、自分の身になっていないなーと終始思うところも。ある程度知識がついてくれば読めるけど、その頃にはもう知ってるよってなる気もするので、現代版が出ない限りは手に取る必要なないかも?もっといい本があるかもしれないです。モチベーションにも関わるので、、