• ベストアンサー

DLLで期限付きライセンス

こんにちは。 WinXP,SDKで開発しています。 DLLで期限付きライセンスを作成しようと思っています。 こちらで指定した日付を超えたらこのDLLをリンクするアプリケーションが使えなくなるようにしたいです。 どのような作りが良いのでしょうか? よく、30日限定だったり、12月31日までだったりする期限付きの試用版プログラムを見ますが、パソコンの日にちを修正してしまえばまた使えたりするのもあると思います。 相当そのあたりに精通した使用者であればもう諦めるしかないのかもしれませんが、ある程度不正を防ぐ事が出来るとしたら、どのような作りが良いのかアドバイスを頂きたいと思います。 宜しくお願い致します。

  • mm666
  • お礼率92% (58/63)

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8520/19368)
回答No.2

0.インストーラーを使用しないと、使えないようにする。単にDLLファイルをフォルダにコピーしても動作しない。 1.インストーラーでの処理インストール処理は以下のようにする。 (1)インストーラーが「まだインストールされてない」と判断した場合に限り、インストーラーの中で、レジストリの「HKEY_LOCAL_MACHINE\Software\社名\ソフト名\」の下に「暗号化したインストール日付」と、同じ値で「暗号化した前回起動日時」も書き込む。 インストール済みと判断した場合は「アンインストールか修復インストール(上書きインストール)」を選ばせ、アンインストールか修復インストールを行う。 (2)暗号化は「暗号化済みデータが日付の大小に比例しない」ようにして、かつ、チェックコードを入れて、データの改変を検知出来るようにする。 これにより「レジストリの改変」に対応できる。 (3)上記(1)で書き込むレジストリ値は「アンインストールしても消えない」ようにしておく(インストーラーの「アンインストール時に自動的に消去するレジストリ値」に含めない) (4)インストール時に、既に「暗号化したインストール日付」か「暗号化した前回起動日時」がレジストリに存在した場合は、書き替えたりせず、そのままにする。 上記(3)(4)により「アンインストールして、再インストール」をしても「最初の1回目のインストール日」だけが保持されたままになる。 但し「システムの復元」を行って「レジストリをインストール前に戻された場合」には対処出来ない。 2.プログラムが起動されたら、レジストリを見て「正式登録」されている(有料ソフトの支払いが済んでいる)場合は、以下3~4のチェックはせず、フルに使用出来るようにする。 3.レジストリを見て「未登録」と判断した場合は、レジストリから「暗号化したインストール日付」と「暗号化した前回起動日時」を読み込む。 4.上記3の後、以下(1)~(8)のような場合には「期限切れ」として扱う。 (1)レジストリから読み込んだ暗号化日付データが、チェックコードエラーなどで復号化出来ない。 (2)レジストリから、片方または両方が読み取れなかった、または、片方または両方が消されていて読み取れなかった。 (3)「PCの時計の現在日時」が「インストール日付」よりも前だった。 (4)「PCの時計の現在日時」が「インストール日付」よりも後だが、使用期限を越えていた。 (5)「PCの時計の現在日時」が「前回起動時日付」よりも前だった。 (6)「前回起動時日付」が「インストール日付」よりも前だった。 (7)「前回起動時日付」が「インストール日付」よりも後だが、使用期限を越えていた。 (8)自分自身のファイルのCRCチェック値を計算し、自分自身の中に埋め込んである値と一致しなかった時。 5.上記4のすべてにパスして「試用期間内」と判定した場合は、「前回起動時日付」の値を「現在日時」で更新する。4のチェックで引っ掛かった場合は、レジストリは更新しない。

mm666
質問者

お礼

chie65535さま、ありがとうございます。 有名なソフトなどはこのような作りになっているのでしょうか? 私には分かっているようでいて、考えられなかった内容です。 細かくアドバイス頂いて、とても参考になりました。 これから利用させて頂く事になりそうです。 ありがとうございました。

その他の回答 (3)

  • chie65535
  • ベストアンサー率43% (8520/19368)
回答No.4

追記の追記。 「日付の暗号化」と「日付の復号化」には「Windows本体のプロダクトIDなど、Windows1つ1つ固有の値」を使って計算を行って、別のPCにレジストリをコピペして持って来ても動かないようにした方が良いでしょう。 また、暗号化の際には「乱数で作った無意味なデータを、ビット単位で有効データの間に挟む」などの処理をして、データ全体が一様に変化するようにしましょう。そうしないと「年月日の『日』が変わったら、データのここが変化したから、この部分が『日』だな」など、暗号解読されやすくなってしまいます。

mm666
質問者

お礼

最初の回答をじっくり読みお礼させて頂いている間に、更にアドバイスありがとうございます! どのアドバイスもとてもありがたいです。 多分…いえ絶対自分では気付きませんでした。 感謝です!

  • chie65535
  • ベストアンサー率43% (8520/19368)
回答No.3

追記。 >2.プログラムが起動されたら、レジストリを見て DLLの場合、期限切れを検知したら、DLLの初期化ルーチンで「初期化失敗」を返すようにして下さい。 「初期化失敗」を返すと、ロードされたDLLはアンロードされ、DLLの呼び出し元には「ERROR_DLL_INIT_FAILED」が返されます。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

レジストリやINIファイルに自分が起動された日付を記憶しておくといった手法でしょう DllMainでfdwReasonが DLL_PROCESS_ATTACHの場合に 前回起動された日付を取得(レジストリ/INIファイル) 記憶された日付より現在の日付が古くかったらFALSEを返す 規定の日付以前なら記憶先の更新をする といった具合で これでもIniファイルやレジストリーキーを削除されてしまえば再使用されてしまいそうですが ...

mm666
質問者

お礼

redfox63さま、アドバイスありがとうございます! INIファイルなどはすぐにバレそうなイメージがありますが、これをダミーに使うという手?もありそうですね。 fdwReasonの値の事などもよく分かっていなかったので助かります。 ありがとうございました!

関連するQ&A

  • 使用期限付きDLL

    使用期限付きDLLの開発を考えています。 起動してから何日間ではなく、○年○月○日まで、という期限です。 単純に日付を比較しただけでは、システムの日付を変えられてアウトだと思います。 何か方法などありますでしょうか? Linux/c,c++/DLL です。

  • 試用期限の過ぎたエクセル2013について

    1年ほど前に、マイクロソフトのOffice 365をダウンロードして1ヶ月間試用しました。 試用期限終了後はライセンスの購入はしておりません。 なんですが、いまだにOffice 365で利用できるエクセル2013やワード2013が使えています。 (アクティベーションの警告などが一切出ておりません。) 不正な行為などは一切していないのですが、なぜ使えているのか謎です。 こういう事ってあるんでしょうか? windows7 pro 64bitで使っています。

  • ライセンス認証を取らないとログインできない!

    OSがWindows Server2003のPCで、1日くらいで終わるからと思い、 ライセンス認証せず開発していましたが、 今日朝立ち上げると、ログインできなくなっていました。 どうやら日付をいじったせいらしいのですが、 データだけでも取り出せる方法ってないのでしょうか? どうぞ、ご教授よろしくお願いしますm(_ _)m

  • Windowsのライセンス認証と30日間の使用について

    Windows Vista/XPのライセンス認証をしないで、期限の30日間のみ使用する(PCの動作テスト、試し、スクリーンショットを撮るため、など)ことはライセンス違反でしょうか?(試用が終わったらすぐ消す。) また、Windows Vista Starter Editionなどを使用したりできる裏技があると聞いているのですが、これも30日以内のテスト使用でもライセンス違反でしょうか? よろしくお願いします。

  • 見積書の有効期限について

    イベントコンパニオンを派遣する際、見積書の「見積もり有効期限」の欄に日にちを記入しなければならないのですが、通常は何日を目安に記入するものなのでしょうか? イベント当日の日付にするのか、それとも1週間くらい前?1ヶ月以上先のイベントなら、とりあえず1ヶ月間を期限にするのか、よくわからないので教えてください。

  • VisualStudio2005でのDLL作成

    開発環境 OS:WindowsXP SP2 SDK:VisualStudio2005 StandardEdition 言語:VC++ Win32コンソールアプリケーションのDLLを選択 空のプロジェクトを使用 作成したいのはVBなどから呼び出せるWin32DLLです。 他のホームページを参考にして以下のようなファイルを作成し ビルド->コンパイルしたところdllファイルはできましたが AccessVBAから参照設定ができませんでした。 どこを修正すればよいか教えてください。 <dlltest.cpp> #define EX __declspec (dllexport) #include <iostream> #include <windows.h> EX int fnWindowHook(void); BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call){ case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } EX int hundred(){ return 100; } <dlltest.def> LIBRARY "dlltest1" EXPORTS disp @1

  • リモートデスクトップの有効期限が切れた?

    WindowsStrageServer2003に、WinXP Proからリモートデスクトップ接続していますが、突然接続できなくなりました。 mstsc.exeを実行すると、 「プレリリース版のリモートデスクトップ接続有効期限が切れました。製品版のリモートデスクトップ云々」と表示されます。 サーバー構築後120日くらい経過しており、ライセンス期限切れと思いましたが、接続できないのは特定のクライアントだけです。 何が原因なのでしょうか。

  • ノートン 消せばインストールライセンスは復活する?

    ここ数年、ノートンを使用しています。 ネット経由で毎年延長更新しています。 ノートンは、インストールライセンスが3つあり、1つの契約で3台のPCにインストールすることができます。 現在、メインのデスクトップのWinXP機と、ノートのWinVista機の2台にインストールしてあります。 ノートンアカウントにサインインして確認してみると、2台のPCにインストールしてあるため、 インストールライセンスが3、利用可能なダウンロード数が1と表示されています。 先日、仕事で使用するため、小型ノートのWin8機を購入し、続いて WinXPのサポート終了に伴いデスクトップのWinXP機の引退を決め、デスクトップのWin8機を購入しました。 2台のWin8機は、今は購入時に入っていたマカフィーが使えていますが、90日で期限が切れてしまうので、遅かれ早かれノートンに乗り換えなければなりません。 WinXP機は引退するので、ノートンが不要となり、 ノートンが必要なPCは3台になるわけですが、 インターネットに接続状態でWinXP機からノートンをアンインストールすると、ノートン側で認識し、 利用可能なダウンロード数は現在の1から2に増えるものなのでしょうか? それとも、WinXP機は、3つのインストールライセンスのうち1つを抱いたまま引退となってしまうのでしょうか?

  • 「賞味期限を書いておいて」。。

    と言われるのですが。。 スーパーの惣菜部で働いています。 10月から新しい体制になるので、今までのやり方が一新されます。 惣菜部で扱われるすべての食材と調味料に、賞味期限を、専用のシールに手書きすることになりました。 食材によっては賞味期限がよくわからないものがあります。 その場合、仕入れた日付を書くことになったのですが、「賞味期限を書いて」と言われます。 調理をする時に賞味期限なのか仕入れ日なのかわからなくなり、古い物から使えなくなるからと言われ、目安で賞味期限も書いています。ただマニュアルがないので、2日から30日の幅で記入しています。1か月でだいたいすべての食材、調味料を使い切るからです。 この記入の仕方で、混乱が起きています。「書いた人の目安」なのでみんな自分の感覚で書いています。統一したいのですが、チーフが「すぐ使い切るんだから」といってマニュアル作りに乗り気ではありません。 勝手にマニュアル、作っていいんでしょうか。。 賞味期限ではなく、仕入れ日を書くことで統一したらどうかという案も出ています。 以前、ホテルの調理場で働いていた時はそうしていました。野菜などはラップの上にマジックで 古い物はアニキと書いていました。ただ、チーフが決めることですよね。。どう提案すればいいですか?チーフに言うと「そんな賞味期限なんて気にしてられないよ」「豆腐ともやし、にらだけは足が速いから気をつけて」とそれだけです。何度も言うとあ~~~って怒ります。

  • ソースファイル

    自分で開発したソフトのライセンス販売ですが、相手が自分でソフトの改変や修正をしたいのでソースファイルもつけてくれと言われています。通常、無期限のライセンス料にどれくらい上乗せすべきでしょうか?また、ソースファイルの仕様書も要求されています。ソフトは結構複雑でオープンソースのソフトなども組み込まれています。

専門家に質問してみよう