人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

自己復元の暗号化ソフトの作り方について例)http://www.geocities.jp/lupin_home/download/index.htmlにある「FileLockManager 0.1.0.1」では、複合化時に自分のPCにソフトがインストールされていなくても、フォームが開いてパスワードを要求します。VisualBasicで暗号化ソフトを作っているのですが、同じ機能を持たせたいと思っています。VBで実現可能ですか?

●質問者: ibun08
●カテゴリ:ウェブ制作
✍キーワード:VB VisualBasic インストール ソフト パスワード
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● s-mroi
●50ポイント

なんとか可能だと思います。

仕様上、EXEファイルの後ろにデータを追加しても問題なかったはずですので、そこに暗号化データを持たせれば良いと思います。

暗号化ツールをA.EXEとし、A.EXEが作り出す「自己復元型EXE」をB.EXEとします。

1)まずB.EXEを作ります(処理内容は4)です)。この時、B.EXEのサイズを確認しておきます。

2)A.EXEにB.EXEの内容を持たせます(バイナリリソースで良いでしょう)。

3)A.EXEはB.EXEをファイルとして出力した後、その後ろに暗号化したデータを追加出力します。B.EXEは [EXE本体]+[暗号化データ] という構造になります。

4)B.EXEは自分自身の本来のファイルサイズ以降に暗号化したデータがあることが分かっているので、そこからデータを読み込んで復元するように作っておきます。

問題になりそうなの部分を挙げてみますと、、、

VBだけでバイナリリソースが作れたかどうかですが、Visual Studioをお持ちならCDには入っていたと思います。どうしても無理なら、B.EXEの内容をPublicな配列として持っておくとか、エンコードして文字列として持っておく、といった荒技も可能です。B.EXEを別ファイルとして置いておけるなら最も簡単ですね。

B.EXEは自分自身のファイルサイズを固定値として知っておかないいけないので、コンパイル->サイズ確認->固定値修正->コンパイル の手順で試行錯誤が必要かもしれません。多分、最初は固定値にダミー値を持たせておいて、コンパイルしてサイズ確認後、固定値をその値に書き換えて再コンパイルすれば問題ない(サイズは変わらない)と思います。

パスワードをB.EXE毎に持たせるなら、暗号化データの前に固定サイズで出力しておけば良いと思います。例えば固定サイズを20バイトとするなら、暗号化データは「B.EXEのサイズ+21バイト」目から始まることになります。最初の2バイト程度をパスワード長として使えば可変サイズにも出来ますね。

最後に、もしかするとこれが最も重要かもしれませんが、「B.EXEはVBのランタイムを必要としないこと」が条件であれば、B.EXEを別のツールで作らないといけないので「VBだけでは無理」ということになります。Windows2000以降あたりだと最初からVBのランタイムが入っていたかもしれませんが…… 確認できませんでした。

長々とちょっとクドかったかもしれませんが、最後の1点を除いて無理な部分はないように思います。

◎質問者からの返答

ご回答ありがとうございます。私の開発環境は幸いVisulaStudioですので、バイナリファイルを扱えそうです。ただこれまでに私が一度もバイナリ化等をしたことがないため、これは大きな挑戦になりそうです。(バイナリとう文字をオンラインヘルプで見る度に読み飛ばしてきた。)ご提案いただいた方式でトライしてみようと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ