名前からして普通にお目にかかれないタイプであると思った書籍です。つい先日発売されたばかりで、行きつけの本屋でかるーく眺めてみて購入しました。

 

書籍自体はx86アセンブリ~Win32 PE形式をターゲットに進んでいますが、Linux形式で使われているELF形式でも基礎知識に関してはある程度使えるかと思います。というのも、私のかつての専門がWin32であったのでELFに関する知識はあまりないのです。と言っても、Brewブートローダーを触る際には知らずにはいられないので2chで公開されていたブートローダーの中身を見て参考にさせてもらいました程度の知識なのですが。

中身を軽く読んだ感じの所感です。

  • これからリバースエンジニアリングに対する知識を身に着けるにはある程度良い
  • 書籍を読むにあたって「初めて読む8086/386」程度の知識は欲しい
  • Win32の知識も必要、特にインジェクション周りはPE形式に慣れていないと厳しい (Advanced Windowsが必要?)
  • カーネル部分に関しては触れていないので、更に混んだ小細工をするには別途知識が必要
  • リバースエンジニアリングに対する防衛に関しては物足りない気がしますが・・・、どうなのでしょう?

 

書籍の中で素晴らしいことが書かれていたので部分的に引用します。

真面目にコーディングを学んだ優れたプログラマが作成したコードは、むしろリバースエンジニアリングがしやすいという話があり、その裏をかいて、重要な中核のコードは初心者プログラマに任せようという話もよくする。実際にそのように作成したことはないが、多分これは、高度な難読化技術や今まで見てきたどんなダミーコードよりも高度な難読化技術になるかもしれない。(笑)

これはまさしくその通りだなと。別に自分のソースコードが美しい!!!、と絶賛するわけではないですが、自分の書いたソースコードに対してアタックを行うのは非常に容易なことでした。因みに、それで非常に悩んだ挙句に選んだ結論はセキュリティ部分に関しては外部ツールを使うこと。Win32関係ではASProtect辺りが有名なところですが、ASProtectに関してはいろいろ調べると有名すぎてアンパッカーが開発されてしまっていたので、私的にObsidiumが大好物でした。

そして現在、Win32から離れてWeb系の仕事を行っているわけなのですが・・・、あれはあれで色々厄介ですね。Web(HTTP)の範囲であれば基本的にはクエリ改ざんやURLを直接アタックするなどの間接的なものしか攻撃ができませんので、プログラマがきちんとパラメータの取り扱い方を知っていれば脆弱性はアプリケーションより遥かに少ないはずなのです。が、Webのプログラムが簡易化することで割と知識の浅いプログラマでも開発自体は行えるために脆弱性を自ら仕込んでいる状態が結構見受けられます。なんだかネイティブとWebで逆の動きをしているなー、と感じるところではあります。

 

既に起こっていると言っても間違いではないスマートフォン(iOS, Android等)へのアタックはより一層激しくなるでしょうし、正しい知識を身に着けないといけないな、と痛感する一冊でした。ただ・・・・ELF形式について書かれた書籍が無いよ。調べれば断片的に情報が出るのですが、流れを把握して知識を得たい・・・というのは甘えなのでしょうね。

 

PS1. 当時nProtectが導入されたころにあれが非常に厄介な動作(プロセスを隠したり、昇格関数をブロックしたり・・・)をしてくれたので結局カーネルドライバから処理の割り込みを行ったのですが、今現在どうなっているのでしょうね。スポーツではないですが、前線から離れると途端に知識が劣化してしまうというのが歳月の経過を感じるものです。

PS2. 書籍ではMFCリバーシングに対して触れられていましたが、個人的にはMFCよりVisualBasic6.0で作成されたアプリケーションのコードフックが非常に厄介でした。というのもの、メッセージの扱いが特殊であり、vbdllの塊があってIATをフックしても何故かフックしきれない部分が残ったりと。日本ならまだVB6.0とかで動いているシステムは多そうですね。