So-net無料ブログ作成
検索選択

アンパッキング(IAT再構築を手動で) [RCE]

アンパックの作業通常、下記のような流れになる。

①OEP(Original Entry Point)の探索
②メモリのダンプ
③IAT(Import Address Table)の再構築

①については、UPXのような単純なパッカーであれば
PUSHADとPOPADの対象性に着目すれば難なくOEPに到達できる。
そうでない場合、データセグメントにjmpしたり、
mallocやVirtualAllocした領域にjmpしたりというのを注意深く見ていれば
OEPを探すことができる(ことが多い)。
ちゃんとOEPに到達していれば、コンパイラが出力したような
コードが見えてくるはず。Reverse Engineerの眼力を鍛えておきたい。

②はOllyDdbのプラグインであるOllyDumpの出番。

問題は③。

いつもは「Ollydbg」+「OllyDump」+「ImportRec」で
ささっとIATを再構築するものの、たまにうまくできないこともある。
というより、どうやってIATを再構築しているのかを理解しておくことが
大事なのだが、ツールに頼っていると、ここがいささかおろそかになる。

というわけで、今回はIAT再構築を手動で行うことにする。

参考:http://ruffnex.oc.to/kenji/crackme/reverse_engineering.html

やることはそんなに難しくない。
・ダンプしたバイナリをバイナリエディタで読み込み
・IATの場所を探す
・IATの値をロード前の状態に戻す

そもそも、なぜIATを再構築する必要があるのか。

IATには、プログラムがローダに読み込まれたときに
Importされている関数のアドレスが解決された結果が格納されている。
ローダに読み込まれる前は、INT(Import Name Table)と同様の値が
IATにも書き込まれている。
OllyDumpでダンプしたバイナリは、既にローダによって
読み込まれたメモリ領域のダンプなので、IATには
ローダで解決された実際のアドレスが入っていることになる。
そこで、IATを再構築、つまりローダによって改変されたIATの値を
改変される前の状態にすればよいということになる。
したがって、IATの各々が、対応するIMAGE_IMPORT_BY_NAME
値をさすようにしてやればよい。

・OllyDbgでIATを確認し、それぞれがどのAPIに対応しているかメモ。
・バイナリエディタでIATのところにいき、対応するIMAGE_IMPORT_BY_NAME
 の値をさすように修正。
※注意※
IMAGE_IMPORT_BY_NAMEは
typedef struct _IMAGE_IMPORT_BY_NAME {
  WORD Hint;
  BYTE Name[1];
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;

という形をしているので、修正するときには注意する。
直接APIの文字列のアドレスを入れると失敗する。

--

本当はもっとチュートリアルライクに書きたいけど、
面倒になってきたのでまた今度。。。

Winsock socket [Windows]

いつも忘れてしまうsocket周りのメモ。

WSAStartup:バージョン指定

socket
 ・SOCK_STREAM:TCP
 ・SOCK_DGRAM:UDP

sockaddr_inのデータをセット
 ・sin_port:htons(destport)
 ・sin_addr.S_un.S_addr:INADDR_ANY / inet_addr(destaddr)

~サーバ~
 bind:引数・・・sockaddr
 listen:引数・・・backlog
 accept
クライアント
 connect

closesocket
WSACleanup

vimプラグイン [Linux]

久し振りの書き込み。

仕事でVimを使ってCやらPythonやらを書くのだが、
便利なプラグインを見つけたのでメモ。

・autocomplpop.vim
Vimでスクリプトなどを編集しているときに補完候補を出してくれる。
便利過ぎる。
本家:
http://vim.g.hatena.ne.jp/keyword/autocomplpop.vim
参考:
http://blog.blueblack.net/item_164

・MRU
最近使ったファイルに簡単にアクセスできる。
なくてもいいけど、あると便利。
配布元:http://www.vim.org/scripts/script.php?script_id=521
参考:http://nanasi.jp/articles/vim/mru_vim.html

他にも、project.vimとかtaglist.vimも便利だけど、あまり使ってないので省略。
#taglist.vimは使ったほうがいい気がするけどなあ。


Emacs Museのメモ③ [Linux]

どんどんいきます。次はキーストローク。
マニュアルを元に記載。(一部は飛ばしました)
このぐらいを覚えていれば何とかなりそう。

・C-c C-a
  全museページのindexを表示
・C-c C-b
  当該ページに対してリンクを張っているページを検索
・C-c C-e
  既に配置されているリンク上で実行すると、リンクの変更が可能
・C-c C-f
  museページを開く
・C-c C-i l または C-c TAB l
  インタラクティブモードでファイルに対するリンクを挿入
・C-c C-i t または C-c TAB t
  インタラクティブモードでタグを挿入
・C-c C-i t または C-c TAB u
  インタラクティブモードでURLリンクを挿入
・C-c C-l
  font lock / highlighting の切り替え
  リンクの編集がし難いときに便利
・C-c C-p
  プロジェクト全体のパブリッシュ
・C-c C-s
  プロジェクト内でgrep
・C-c C-t
  現在編集中のページをパブリッシュ
・C-c C-v
  ブラウザでパブリッシュの結果を表示
・TAB(S-TAB)
  ページ内のリンク部分に移動
  (TAB:Search NEXT, S-TAB:Search PREVIOUS)
・M-RET
  箇条書き等で、次の行にもitemを追加
・C-<
  インデントを減らす
・C->
  インデントを増やす

Emacs Museのメモ② [Linux]

メモ①があまりにもザックリしすぎなので、もうちょっと詳細を。

インストール

オフィシャルサイトからアーカイブを取得

②muse-modeの設定@.emacs
.emacsに下記を追記
ちなみに、とりあえずHTMLでのパブリッシュをできるようにしておく。
(add-to-list 'load-path "path to Muse")
(require 'muse-mode)
(require 'muse-html)

なお、ファイル名が"~.muse"というものを開くと、自動的にMuse Modeになる。

③プロジェクトの設定@.emacs
.emacsに下記を追記
ちなみに、複数のプロジェクトを設定することも可能。
プロジェクトを設定しておくと、設定したディレクトリ配下のファイルを
Muse-Modeで編集、パブリッシュするときに一括管理できるので楽。
(setq muse-project-alist
'(("Web" ("~/web" :default "index")
(:base "html" :path "~/web/public_html"))))


ここまでできればとりあえずインストールは完了なはず。

Emacs Museのメモ① [Linux]

自分のメモを取るツールにいくつかのツールを使っています。
よく使うのは下記の2つ。

howm: Hitori Otegaru Wiki Modoki
Emacs Muse

howmは作業の日誌的な使い方をして、毎日使っているものの、
知識として後で参照するならEmacs Museの方がいいかな、
という使い分けです。
今のhowmの使い方は、元々の「書き散らかすメモ」というのとは
ちょっと違う使い方ですが、まあ、そのうち書き散らかすようにするかな。

で、今回はEmacs Museの使い方。
昔はemacs-wikiなんて言われ方をしていたのだが、
気がついたらEmacs Museというプロジェクトになっていた模様。
emacs-wikiを使おうと思って、しばらく放置していたら
リンクが見当たらなくなって、何でかなーと思っていたらこんなオチ。

あまりEmacs Museの使い方に慣れていないので、いくつかのコマンドをメモ。

C-c C-p・・・パブリッシュ
C-c C-v・・・ページをブラウザで表示
C-c C-a・・・全てのページを表示
C-c C-b・・・バックリンクの表示
C-c i l・・・リンクの挿入

とりあえず使いそうなやつだけ。
ちなみに、この辺が参考になる。

TODO:読書 [本]

いろいろ本を買っているが、
かなりの数がstackに詰まれたままで、
pushするものの、popしていないという現状。。。

整理のために、stackを表示。
#そういや英語通信教育もしなきゃいけなかった。。。


集合知プログラミング

集合知プログラミング





Reversing: Secrets of Reverse Engineering

Reversing: Secrets of Reverse Engineering

  • 作者: Eldad Eilam
  • 出版社/メーカー: John Wiley & Sons Inc (Computers)
  • 発売日: 2005/04/30
  • メディア: ペーパーバック





Reverse Engineering Code With IDA Pro

Reverse Engineering Code With IDA Pro

  • 作者: Justin Ferguson
  • 出版社/メーカー: Syngress Media Inc
  • 発売日: 2008/03/12
  • メディア: ペーパーバック





Rootkits: Subverting the Windows Kernel

Rootkits: Subverting the Windows Kernel

  • 作者: Greg Hoglund
  • 出版社/メーカー: Addison-Wesley (C)
  • 発売日: 2005/07/22
  • メディア: ペーパーバック




The art Of  Computer Virus Research And Defense

The art Of Computer Virus Research And Defense

  • 作者: Peter Szor
  • 出版社/メーカー: Addison-Wesley (C)
  • 発売日: 2005/02
  • メディア: ペーパーバック





Programming the Microsoft Windows Driver Model

Programming the Microsoft Windows Driver Model

  • 作者: Walter Oney
  • 出版社/メーカー: Microsoft Pr
  • 発売日: 2002/12/31
  • メディア: ペーパーバック




Binary Hacks ―ハッカー秘伝のテクニック100選

Binary Hacks ―ハッカー秘伝のテクニック100選

  • 作者: 高林 哲
  • 出版社/メーカー: オライリー・ジャパン
  • 発売日: 2006/11/14
  • メディア: 単行本(ソフトカバー)




ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

  • 作者: ジュニア,ヘンリー・S. ウォーレン
  • 出版社/メーカー: エスアイビーアクセス
  • 発売日: 2004/09
  • メディア: 単行本



やべー、かなりたまってるな。。。

ブログ再始動 [雑感]

大学時代にこの「so-netブログ」を書いてみたものの、
三日坊主になってしまいました。。。

ということで、ブログ再始動!

基本的な中身は下記。
・日々の雑感
Securityに関する話題
・自身のメモ(Security、RCE)

基本、自分のメモとして使います。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。