「HACKING: 美しき策謀 第2版」で脱・初心者エンジニア

今年もあまり本を読めていないのですが、かなり評価の高い本を数冊読んでいます。その中でもピカイチにオススメしたいのが表題の本です。最近第2版が出たようです。って、実はまだ読んでる途中なんですけどね。。。

「教科書」として素晴らしい出来

この本の何よりもすごいと思った点は、頭から読んでいってすんなり全てが飲み込める点です。ここまで頭に吸い込まれる本は久々に読んだ気がします。普通技術書だと、サンプルコードがあって、実際に実行してみてねーこんな感じになるから、って書いてあるんですが、自分で実際に実行してみないとイマイチピンと来ないことがあります(サンプル動かなかったりとかもある)。そういう本は、通勤時間とかにちょこちょこ読むにはちょっとしんどいです。

HACKINGがすごいのは、第2章のアセンブリやヒープ・スタックの解説、さらに第3章のバッファオーバーフロー等の脆弱性を突くといった部分のサンプルコードが、gdbしながらの実行結果が載ってたりするわけです。僕はエンジニアには想像力が必要だと思ってるんですが、こうして紙面だけで必要十分な情報を与えてくれるので、想像力を鍛えるにはうってつけの本だと思います。

説明の順番も、if-then-elseみたいな制御の話から入ったと思いきや、そこからgdbを使っていきなりアセンブリとは?という話になるのは驚きなのですが、これがびっくりするぐらい理解できる。一読しただけでは理解できなくても、この文字列の中に必要十分な情報が入っていることが分かっているので、何度も何度も反芻することでコンピュータ無しでも理解できちゃうのは本当にすごい。

僕はダメ学生だったのでComputer Science(CS)はちゃんと学ばなかったから、いつも「ヒープ領域」とか「スタックポインタ」とか聞く度にワカンネヽ(^o^)丿ってしてたんですが、生まれて始めて理解し始めることができました。

第4章からはネットワークの話が始まるのですが、これも今までなんとなく概念的に勉強していたパケットのカプセル化とかARPの仕組みとかを、実際にサンプルコードと実行結果を見ながら丁寧に解説してくれるのでびっくりするぐらい仕組みが丸見えになってきます。

全くコンピュータ・ネットワークの知識無しに読むのは辛いと思いますが、通り一遍の表面的な知識を身につけた人にとっては、概念的に(時には分かりにくい”分かりやすい図”で)説明されたあれやこれやが、C言語のコードとして目の前で動く物を示しながら1行1行解説してくれるので、恐ろしいくらいに理解が深まるのを実感できると思います。

内容の「広さ」と「深さ」が圧巻

説明の方法も素晴らしいのですが、その内容にも光るものがあります。CPUの動作やIO周りはあまり解説がないですが、gdbを用いたアセンブリからのメモリ領域の説明というアプローチは、ちゃんとメモリ扱うプログラマを書いたことがない僕みたいな三流にはとっても勉強になります。ここだけでも1冊にできる内容ですが、さらにそれを使ったハッキング手法の解説も、細かく細かく1ステップずつ説明していて深いところまで知ることができます(もちろん本物のハックはこんなもんじゃないでしょうが)。「バッファってのを確保した領域を超えて入れると危ないコードを実行させられるんだよ」というのをメモリの様子がアドレス付きで目で見て分かる様に解説してくれています。さらに、printfを使った脆弱性もあったりして、いろんな視点から脆弱性を知ることができます。

さらに、ネットワークの脆弱性についてはCのプログラムとか書かねーから俺知らね見たいな今流行のWEBのエンジニアも絶対に知らなければいけない知識ですが、こちらも色んな手法が実際にコード付きで解説されています。驚きです。

脱・初心者したい方へ

プログラムとかネットワークとか暗号とか何か1分野でも「ちょっと理解が甘いなぁ」と思っている人は、一度この本を読んでみるといいと思います。確実にステップアップできます。読んだから何かをすぐできるようになるわけじゃありませんが、確実に脳のレベルは一段上がると思います。

この本を読むのにコンピュータは無くても大丈夫です。一度でもCのプログラムをしたことがあればすんなり読めるでしょうし、そうでなくてもプログラムに親しんでいる人であれば十分目を通せると思います。

おわりに

今年はセキュリティがらみでとってもいい教科書が登場しましたね。HACKINGで低レイヤー寄りの知識をつけ、徳丸本でWEBに特化した知識もつければ、WEBサービスのセキュリティの基礎知識は結構つくんじゃないかと思うんですが、どうでしょうか!?>★徳丸先生!

もちろん、教科書はあくまで教科書。現実がこの通りにうまくいかないことも多いです。ただ、原理原則や物の理を知るということは、想像力を鍛え、さらには創造力を養うために必要な行為だと僕は思います。CSをちゃんと学ばなかったし、小学生の頃からプログラムやってたわけでもない僕みたいな一般人には、こういう良い教科書はすごい助かります。というわけで、早く最後まで読破しよう。。。