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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:s-mroi No.1

回答回数23ベストアンサー獲得回数0

ポイント50pt

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

仕様上、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点を除いて無理な部分はないように思います。

id:ibun08

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

2003/12/31 19:36:49

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません