GEEKy Script Writer [perl and more!]
You should permit the JavaScript!!
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Pariteとの戦い (2)
プログラムが正しく実行できないということは、Parite感染前とまったく同じに修復できていないということになる。完全に修復できていないのはそのexeファイルなのか、他のファイルやレジストリなのか、
それはまだわからない。
とりあえず、VPC上のWindows XPでPariteを実行し、適当なexeファイルに感染させ、KISで駆除(修復)してみる。そしてそれをオリジナルのファイルと比較して完全に修復されているのか確かめた。
赤く強調されているのが差異部分
parite_repair_kingsoft

どうやらKISはPariteに感染したexeファイルをまったく元通りには直してくれないようだ。

上画像の差異部分は全てPEヘッダ内の値で、以下がその駆除前も含めた差異部分のデータ。

フィールド名 | 感染前 | 駆除前 | 駆除後 |
-----------------------------------------------------------------------------------------------
NumberOfSections | 0002 | 0003 | 0003 |
SizeOfImage | 00004000 | 00005000 | 00005000 |

感染前のセクションテーブルエントリ
No | Name | VSize | VOffset | RSize | ROffset | Charact. |
01 | .text | 000004AE | 00001000 | 00000600 | 00000200 | E0000020 |
02 | .data | 00001208 | 00002000 | 00000000 | 00000000 | C0000040 |

駆除前のセクションテーブルエントリ
No | Name | VSize | VOffset | RSize | ROffset | Charact. |
01 | .text | 000004AE | 00001000 | 00000600 | 00000200 | E0000020 |
02 | .data | 00001208 | 00002000 | 00000000 | 00000000 | C0000040 |
03 | .rol | 00001000 | 00004000 | 00000600 | 00000800 | E0000020 |
* | ExtraDat | | | 0002AFD6 | 00000E00 | |

駆除後のセクションテーブルエントリ
No | Name | VSize | VOffset | RSize | ROffset | Charact. |
01 | .text | 000004AE | 00001000 | 00000600 | 00000200 | E0000020 |
02 | .data | 00001208 | 00002000 | 00000000 | 00000000 | C0000040 |
03 | .rol | 00001000 | 00004000 | 00000000 | 00000800 | E0000020 |

(詳しいPE FormatはMSの公式資料参照。その日本語訳→http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html)

NumberOfSectionsはその名の通りセクションの数。
Pariteによって3つ目のセクションが追加されているため3に書き換えられている。
SizeOfImageはメモリにロードされたときのPEヘッダを含めた全てのサイズ。
Pariteによって0x1000 bytesのセクションが追加されたので0x5000に書き換えられている。

駆除前のセクションテーブルエントリにあるExtraDatは、ファイルのケツにくっついてる
メモリにはロードされないデータで、ここにParite本体のプログラムが格納されている。

同じく駆除前のセクションテーブルエントリにある.rolは、Pariteが追加した感染ルーチンを
含むセクションで、感染後はここからプログラムが開始されるようにエントリポイントが書き換えられる。

駆除後のセクションテーブルエントリを駆除前と比較すると、.rolのRSize(raw size)が0x600から0になっているが、これは.rolのデータ本体は削除されたことを意味している。
バイナリエディタで見ると実際に.rolとExtraDatのデータは削除されていることが確認できる。

セクションのエントリは残っているが、セクションのデータは消されていて、
エントリポイントは感染前に戻されているためプログラムの動作自体には影響はないというわけだ。
だがこれを見ると、セクションのエントリも消そうと思えば消せそうだ。
そうすれば感染前とまったく同じに戻せる。


  • .rolをセクションテーブルエントリから削除する(0で上書き)

  • .rolを削除するのでNumberOfSectionsの値から1を引く

  • .rolのVSizeは0x1000なのでSizeOfImageから0x1000を引く



つまりPariteの感染によってオリジナルの情報が失われて原理的に修復不可能なのではなく
単にKISの駆除(修復)処理が手抜きだったわけだ。

しかし、手抜きなのはKISだけなのか。他社のソフトも手抜きかもしれない。

というわけで次は他社のAVソフトでも駆除を行って比較してみたい。
続く。

テーマ:セキュリティ - ジャンル:コンピュータ

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2005 GEEKy Script Writer [perl and more!] all rights reserved.
Powered by FC2ブログ.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。