「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 をちゃんと学ばなかったし、小学生の頃からプログラムやってたわけでもない僕みたいな一般人には、こういう良い教科書はすごい助かります。というわけで、早く最後まで読破しよう。。。