ATND アテンド β PRODUCED BY RECRUIT

ログイン or 無料登録

PE勉強会 (1)

EXEを解析しよう

日時 :
2011/02/19 (土) 13:00 ~ 18:00
定員 :
32人
会場 :
マイ・スペース&ビジネスブース池袋西武横店 7号室(東京都豊島区南池袋1-16-20 ぬかりやビル2階)
URL :
http://www.ginza-renoir.co.jp/myspace/msbb002.htm
主催者 :

※資料を公開しています。


※ 定員増強のため会場を変更しました:ルノアール池袋パルコ横店 → MS&BB池袋西武横店

※ 一週間後に同じ内容の PE勉強会(2) を開催しますが、そちらも定員になりました。

イベントの概要

初心者を対象とした、Windowsの実行ファイル (EXE/DLL) で使われているPE (Portable Executable) 形式についての勉強会です。バイナリいじりの基礎から始めて、EXEファイルやDLLファイルをコンパイラなしで作って動かすことを目標にします。PEをきっかけにして、x86のマシンコードやOSのメモリ管理について理解を深めるのが狙いです。特に前提知識は必要としませんので、バイナリいじりは初めてという方でもお気軽にご参加ください。

第1回目はgccで出力したEXEファイルをバイナリエディタで眺めながら、中身を読み取ります。詳しい内容は PE勉強会ネタ帳 をご覧ください。この内容は叩き台です。ご意見・ご要望は @7shi までお寄せください。

※ 一般的なアプリケーション開発とは異なる使い方をするためgccを使用します。Visual Studioは対象外とします。

※ PE勉強会関係の告知はTwitterにてハッシュタグ #peben で行います。

参加費用

勉強会の参加費用は1,000円です。内訳は場所代とドリンク代です。会場にはセルフサービスのドリンクバーが設置されています。

勉強会終了後、懇親会を予定しています。懇親会に参加される方は2,000円(学生さんは1,000円)のお支払いをお願いします。懇親会の参加有無につきましては、参加登録時に表示されるアンケートにご記入をお願いします。

懇親会会場: 金の蔵Jr. 池袋ヒューマックス店 (コースなし・自由注文)

準備する物

実際に解析を体験して頂きますので、ノートパソコンをご用意ください。必要な環境やソフトは以下の通りです。

  1. OS: 説明にはWindowsを使用します。EXEが動かせる環境であれば、Windowsでなくても構いません。UNIX系OSではWineが利用できます。エミュレータ上でゲストとしてWindowsを動かしても構いません。
  2. gcc: 説明には MSYS+MinGW を使用します。Windows以外のOSではMinGWのクロスコンパイラが利用できます。
  3. テキストエディタ: 説明には Notepad++ を使用します。特に指定ではないため、他のテキストエディタでも構いません。
  4. バイナリエディタ: 説明には BZ を使用します。特に指定ではないため、他のバイナリエディタでも構いません。
  5. スプレッドシート: 説明には OpenOffice.org Calc を使用します。Excelについてもサポートします。

※ これらの使用方法は勉強会で解説します。

タイムテーブル

時間 内容
13:00 – 13:10 入室
13:10 – 13:20 環境チェック
13:20 – 13:30 16進数
13:30 – 13:40 バイナリエディタ
13:40 – 13:50 gcc
13:50 – 14:00 休憩
14:00 – 14:10 エンディアンと整数型
14:10 – 14:30 DOSスタブ
14:30 – 14:50 ヘッダの確認 (1)
14:50 – 15:00 休憩
15:00 – 15:20 ヘッダの確認 (2)
15:20 – 15:30 objdump
15:30 – 15:35 メモリ
15:35 – 15:50 セクション
15:50 – 16:00 休憩
16:00 – 16:10 逆アセンブル
16:10 – 16:40 バイナリエディタでPE作成
16:40 – 16:50 インポートセクション
16:50 – 17:00 休憩
17:00 – 17:30 手書きハローワールド
17:30 – 17:35 資料説明
17:35 – 17:40 次回予告
17:40 – 18:00 片付け・退室
18:00 – 20:00 懇親会(希望者のみ)
  • このコメントは全員が閲覧、すべてのログインユーザが投稿することができます
あえとす
あえとす - (2011/01/11 (火) 16:38)
どうしてVC++じゃないんだろうか…
7shi
7shi - (2011/01/11 (火) 20:49)
私がclやlinkなどのコマンドラインオプションに詳しくないので、サポートできないためです。もし詳しい方にサポートしていただけるのであれば、VC++も対象にしたいと思います。
takuto_h
takuto_h - (2011/01/11 (火) 21:32)
gccはCygwinのものでも構わないでしょうか?
7shi
7shi - (2011/01/11 (火) 21:50)
はい、Cygwinでも構わないです。-mno-cygwinオプションを付けるとMinGWと同じ出力になります。
あえとす
あえとす - (2011/01/17 (月) 14:12)
コマンドラインオプションはそれなりに理解しているつもりです。
んが、ここは gcc に合わせておいたほうが無難かなあとも思っております。チキンなので。
参加者の中に「VC++がいい!」って方がいらっしゃるかな…?
7shi
7shi - (2011/01/17 (月) 16:18)
実際にどのようなことを行うかの叩き台を作成しました: http://bit.ly/g6NKs6
この内容に合わせてcl.exeやlink.exeでのケースを加筆していただけるのでしたら、正式にVC++も対象とさせていただきたいと思います。
よろしくお願いします。
あえとす
あえとす - (2011/01/18 (火) 10:15)
言い出しといて申し訳ないですけど、ちょっと時間が取れそうにないので、今回は VC++ 対応はパスします。すいません。
7shi
7shi - (2011/01/18 (火) 11:04)
了解しました。また機会があればよろしくお願いします。
masaki.iwata
masaki.iwata - (2011/01/21 (金) 05:00)
残念ながら補欠者なのですが、いくつか。

根本的に gcc の想定している ABI と Win32 のそれが異なるため SEH の説明が困難になるかと。
LE に関しては逆順と見るかは難しい問題で、アラインメントに寛容で、可変長語長を読み取れる命令セットでは LE のほうが効率がよい。逆転という表現はどうなんでしょ?
ファイルとメモリを一致させない理由としてゼロパディングを省略~の節は不適切 (Windows 95/98 では正しい)。
Windows は DLL を呼ばないと何もできない、は正
masaki.iwata
masaki.iwata - (2011/01/21 (金) 05:01)
ぶ、長文は切られるのね。まいっか。
7shi
7shi - (2011/01/21 (金) 19:57)
今回はバイナリエディタを始めて使う人を対象に、なるべく直感的に説明することが目的ですので、ある程度は割り切っています。

SEHを取り上げられるほど先に進めるかどうか、今は分かりません。gccを使う理由としては、勉強会ではMac率が非常に高いため、Windows以外のOSを使っている人にも参加してもらいたかったというのがあります。今回もMacユーザーの方が何人か参加しておられるようです。今後はPEだけでなく、a.outやELFやMach-Oを取り上げたりするのも面白いです。

コメントを投稿するには、ログインしてください。

掲載されるイベント情報は、利用者の皆様によりご提供いただくものであり、株式会社リクルートホールディングスは本情報の正確性や内容について、一切保証するものではございません。詳しくは利用規約をご参照ください。