OllyBonEを読みます

概要

OllyBonEはページテーブルを操作してメモリの属性を変更することで、ヒューリスティックにアンパックを行うプログラムです。ページテーブル操作によるアンパッキング技法の先駆けとして有名です。

ソースは以下からダウンロードできます。
http://www.joestewart.org/ollybone/

続きを読む

GetTickCountとtimeGetTime

GetTickCount関数とtimeGetTime関数がどうやって実装されているか確認し、分解能の違いが実現できている理由を読み解きます。[NTKRNL]のタグがついている時点でアレなわけですが「どっちを使うべき」的な情報がほしい方は回れ右。特に明示しない場合、x86 XP SP3を対象に調査しています。Vista以降はHPET(High Precision Event Timer)がサポートされているので、少し違うかもしれません。

続きを読む

バイナリアン御用達(?) CryptBinaryToString

CryptBinaryToString というAPIを使うと、バイナリ列を文字列に変換できる。

BOOL WINAPI CryptBinaryToString(
  __in       const BYTE *pbBinary,  // バイナリ列
  __in       DWORD cbBinary,        // バイナリ列のサイズ
  __in       DWORD dwFlags,         // 変換書式のフラグ
  __out_opt  LPTSTR pszString,      // 変換後の文字列を受け取るバッファ
  __inout    DWORD *pcchString      // 変換後の文字列を受け取るバッファの配列要素数
);

使い方は、はじめに CryptBinaryToString にバイナリ列とそのサイズを渡して、変換した文字列を格納するために必要なバッファサイズを取得する。その後、要求されたサイズのバッファを確保して、そのバッファとともに再度バイナリ列を渡すと、バイナリ列を文字列に変換することができる。

続きを読む

就職活動お手伝いと学生

東京のビッグなサイトでブースに入って学生の勧誘と、情報系会社の簡単な紹介(キャッチじゃないよ!)をしていたときの話。
そのときの印象だけど、意外と就職活動開始時点で明らかな情報処理関連の技術のある人は少ないようだった。はてなダイアリーとか見ていると、学生でもバリバリコード書いてて、なんか面白いものを作ったりしてる人がわんさか居るので、その水準にあるものかと無意識に思っていたようだ。
そういえば、自分が学生のときも「C言語勉強してみようかな〜?」ぐらいだったから、そんな自分の居る会社に来る人間もまた、そんなもんだろう。逆に言えば、内定決まってから3年ぐらいでそれなりにプログラムを書いたり読んだりできるようになる、ということでもある。もちろん、成果はもって生まれた適性と、費やした労力に比例するだろうけれども、ある程度はやってみないと判らないものだったりする。*1
まあ、人生長いしやりたいことをやってみれば?ってとこなんだけど、その「やりたいこと」が見つけられないのもまた大多数なのかもね。

*1:私の場合は特に素養があるわけではなかったけど猛烈に時間を費やしたように思う。

例外がユーザー空間に落ちてくるまで

しばらくカーネル空間で例外ハンドラをいじって遊んでいたのだけど、ユーザー空間でも似たような遊びができる気がしたので下調べのメモ。常に以下のフローをたどるわけではなく、あくまで発生した例外がユーザー空間に伝播するときのフロー。x86Windows XP SP3、x64は7を見ている。

続きを読む