C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: アルゴリズムについて


(過去ログ 24 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■10728 / inTopicNo.1)  アルゴリズムについて
  
□投稿者/ 秀璽 (1回)-(2007/11/24(Sat) 20:32:26)

分類:[.NET 全般] 

ツールの類のプログラムを作ってみようと思っています。
例えば、システムファイルの一部が破損したときに、それを警告したり、
修復するといったツールですが、

まず、第1に、これはかなり難易度の高いシロモノでしょうか
   第2に、このアルゴリズムを日本語で記述していくとどうなるのでしょうか?

自分なりに考えてみましたが、

1システムファイルをチェックする
 チェックの仕方ですが、この部分は、どのような関数を使うのでしょうか?

2破損があれば警告をmsBoxで表示する
 どのような状態を破損と認識するのか?
どなたか日本語でこのプログラムのアルゴリズムを書くことのできるかたはいらっしゃますか?
引用返信 編集キー/
■10736 / inTopicNo.2)  Re[1]: アルゴリズムについて
□投稿者/ επιστημη (679回)-(2007/11/24(Sat) 22:42:28)
επιστημη さんの Web サイト
2007/11/24(Sat) 23:35:44 編集(投稿者)

そのファイルを"読んでいい"のなら:
- 壊れていない状態でのチェックサム(たとえばCRC)をどっかに記録しておく。
- んでもって任意の時点でチェックサムを計算し、記録と異なればたぶん壊れてる。

引用返信 編集キー/
■10737 / inTopicNo.3)  Re[1]: アルゴリズムについて
□投稿者/ Jitta on the way (44回)-(2007/11/24(Sat) 23:10:12)
No10728 (秀璽 さん) に返信
> ツールの類のプログラムを作ってみようと思っています。
> 例えば、システムファイルの一部が破損したときに、それを警告したり、
> 修復するといったツールですが、
>
> まず、第1に、これはかなり難易度の高いシロモノでしょうか
>    第2に、このアルゴリズムを日本語で記述していくとどうなるのでしょうか?
>
> 自分なりに考えてみましたが、
>
> 1システムファイルをチェックする
>  チェックの仕方ですが、この部分は、どのような関数を使うのでしょうか?
>
> 2破損があれば警告をmsBoxで表示する
>  どのような状態を破損と認識するのか?
> どなたか日本語でこのプログラムのアルゴリズムを書くことのできるかたはいらっしゃますか?

Windowsのシステム ファイルなら、Windows がやってくれてると思いますよ。バージョンによるけど



それはそれとして

分解が足りないと思います。
チェックのほうですが、「チェックする」で止まってしまうと、そういう部品を探してしまいます。もう一歩、どうなっていたらチェックできるかまで考えていたら、例えば「コピーを取っておいて、コピーと1バイトずつ比較する」とかまでは分解できたのではないでしょうか。
引用返信 編集キー/
■10741 / inTopicNo.4)  Re[2]: アルゴリズムについて
□投稿者/ カンタービレ (100回)-(2007/11/25(Sun) 00:29:28)
No10737 (Jitta on the way さん) に返信
> 分解が足りないと思います。
> チェックのほうですが、「チェックする」で止まってしまうと、そういう部品を探してしまいます。
> もう一歩、どうなっていたらチェックできるかまで考えていたら、
> 例えば「コピーを取っておいて、コピーと1バイトずつ比較する」とかまでは分解できたのではないでしょうか。

ぎゃぴ・・・チェックする部品探してしまっていた私。。(汗)
後学までに便乗で教えて下さい。

例えばEXEファイルのCRCをチェックするとして、
http://support.microsoft.com/kb/65122
によると、ファイル上のCRCが保存されている場所が記述してありマス。
チェックサムを計算するにはCheckSumMappedFileあたりを使うことになるでしょうか??(自信ナシ)
んでこのCRC値とチェックサムで導いたCRC値が同一でなければ破損・改造の恐れアリと、なりマス?
定期的にアップデートされるようなEXEの場合、以前のCRC値を保存しておいてもチェックできるのかしら・・?

引用返信 編集キー/
■10747 / inTopicNo.5)  Re[3]: アルゴリズムについて
□投稿者/ れい (244回)-(2007/11/25(Sun) 07:13:10)
2007/11/25(Sun) 07:26:25 編集(投稿者)

No10737 (Jitta on the way さん) に返信
> 分解が足りないと思います。

どんな関数、コンポーネント、ライブラリがあるか分からない場合は
一個分解してその機能が提供されて無いか確認して、もう一個分解して…
という感じで開発すると思いますし、
初めから全部細かくせずに、開発しながら分解していく人もいますから、
「チェック」と「表示」の二つに分けるのは最初の一歩としてはベストの手だと私は思います。

むしろ気になるのは、
No10728 (秀璽 さん) に返信
> 1システムファイルをチェックする
>  チェックの仕方ですが、この部分は、どのような関数を使うのでしょうか?
> 2破損があれば警告をmsBoxで表示する
>  どのような状態を破損と認識するのか?

この分解が変なことです。
「どのような状態を破損と認識するのか?」は
「1システムファイルをチェックする」に入ってないと変です。

No10741 (カンタービレ さん) に返信
> ぎゃぴ・・・チェックする部品探してしまっていた私。。(汗)
> ...
> 後学までに便乗で教えて下さい。
> ...
> チェックサムを計算するにはCheckSumMappedFileあたりを使うことになるでしょうか??(自信ナシ)

現在Windowsで使われてるのはPEフォーマットで、その仕様書は
http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
ここにあります。
カンタービレさんのリンク先はたぶん3.1時代のもので、「NE」フォーマットです。
#懐かしい:D

で、PE内部のCheckSumはWindowsSpecificHeaderにあって、アルゴリズムは非公開です。
CheckSumMappedFileかMapFileAndCheckSum辺りを使えば変更が確認できたのですが、
最近はAuthenticode関連で修正が入ってるので、私にはよくわかりません。
たぶん、Authenticodeで署名するとCheckSumは一致しなくなります。
Authenticodeの部分を抜いてCheckSumを取るのだと思いますが、方法も真偽のほども知りません。

MapFileAndCheckSumはイメージを読みこまないとCheckSumを確認できません。
ImageHlp.dllの関数たちは遅くてやたらリソースを食います。

しかも、PEのCheckSumは必須でないので、
間違ってるdllやexeがたくさんあります。(昔は。今は分からない。)

そんなわけですので、この辺を使うのはお勧めしません。

結局、

>1システムファイルをチェックする

>ぎゃぴ・・・チェックする部品探してしまっていた私。。(汗)

はJittaさんの言うように、より細かく分解しないとだめだと思います。

追記。
> □投稿者/ カンタービレ (100回)-(2007/11/25(Sun) 00:29:28)
100回!

引用返信 編集キー/
■10754 / inTopicNo.6)  Re[4]: アルゴリズムについて
□投稿者/ カンタービレ (102回)-(2007/11/25(Sun) 14:36:24)
No10747 (れい さん) に返信
> 現在Windowsで使われてるのはPEフォーマットで、その仕様書は
> http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
> ここにあります。
> カンタービレさんのリンク先はたぶん3.1時代のもので、「NE」フォーマットです。
> #懐かしい:D
フムフム・・・私探したの、かなり古杉デスね・・・(汗)
昔のDOS系から辿ったのが失敗デス。
MSのCRCはなんか変という記事も以前読んだ記憶がありマス。
今は大分違うんデスね〜・・勉強になりました。

> 追記。
>>□投稿者/ カンタービレ (100回)-(2007/11/25(Sun) 00:29:28)
> 100回!
>
気がつくと私そんなに駄レスを(ぁ)・・・
最初に質問させていただいた時に即レスがついて、感謝のあまり
色々私も知ってる範囲で書き込んでたら随分逝きましたネ(笑)
控えめにしなきゃ・・・
引用返信 編集キー/
■10769 / inTopicNo.7)  Re[4]: アルゴリズムについて
□投稿者/ Jitta (432回)-(2007/11/25(Sun) 20:26:13)
Jitta さんの Web サイト
No10747 (れい さん) に返信

> ■No10737 (Jitta on the way さん) に返信
>>分解が足りないと思います。
>
> どんな関数、コンポーネント、ライブラリがあるか分からない場合は
> 一個分解してその機能が提供されて無いか確認して、もう一個分解して…
> という感じで開発すると思いますし、
> 初めから全部細かくせずに、開発しながら分解していく人もいますから、
> 「チェック」と「表示」の二つに分けるのは最初の一歩としてはベストの手だと私は思います。

 おっしゃるとおりです。ただ、「その先」を考えておくと、検索しやすいと思います。
検索の手を広げるという意味で。(広げすぎると逆効果ですが)


 「システム ファイル」の範囲がわからないのですが、署名されていたりすれば、Windows がチェックしてくれるのではないでしょうか。
また、主要な DLL なんかはバッファだったかプールだったかにバックアップが取られていたりするし。。。

 で、「システム」が、自分が提供するシステムのことなのかな?とか思ってみたり。。。
(いや、「顧客がコードを修正するから、改造前に必ず顧客のところからコードを吸い上げてこい」というシステムがあったので、なんとなく。)
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -