- ベストアンサー
シェアウェアの試用制限のかけ方
visualbasicでソフトを作って、シェアウェアとしてベクターにだしたいと思いますが、ネットでどんなに調べても試用制限のかけ方がわかりません。誰かわかる方教えてください。参考になるページでもいいです。お願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> ネットでどんなに調べても試用制限のかけ方がわかりません。 そんな肝となる部分を載せるような御方は殆んどいないのでは? それにひとつ間違えればクラッキングされることになると思います。 > 誰かわかる方教えてください。 他の方々が仰るように制限方法はご自身で考えるのがベストです。 個人的にはフリーのソフトウェアかオープンソースしか使わないので シェアウェアの機能制限について詳しいことは存じませんが。 考えられる方法として記述します。 やり方としては任意の文字列をキーとして、それが一致した場合に 製品版として動き、未登録の場合は試用版として動作する。 Visual Basic 2005 で記述してありますが、コードの例とすればこんな 感じでしょうか? (この方法はお薦めしません) System.Web.Security というものがあるので、それのハッシュ関数を 利用した例です。 Visual Basic 6.0 の場合は別途にハッシュ生成の関数が必要なのと コード自体の記述がかなり異なります。 ※ strSeed さえ判らなければクラックされにくい例として。 ----------------------------------------------------------------- REM 容易には推測困難な文字列(顧客・作者側ソフトウェア共に同一) Private Const strSeed As String = "%1k#p8&Oz" REM Digest SHA1/MD5 (顧客・製作者側ソフトウェア共に同一) Private Const strFormat As String = "MD5" ----------------------------------------------------------------- REM 認証キー生成関数(作者側ソフトウェアのみ) Private Function KeyGenerator(ByRef strUserName As String) As String If strUserName = "" Then Return "" End If REM Imports System.Web.Security Return InsertHyphen(FormsAuthentication. _ HashPasswordForStoringInConfigFile(strSeed & strUserName, strFormat)) End Function ----------------------------------------------------------------- REM 顧客が読み易い様に区切を挿入する関数(顧客側・作者側ソフトウェア共に必要) Private Function InsertHyphen(ByRef strIn As String) Const iInsStep As Integer = 4 Const strDelimiter = "-" Dim iInsCount As Integer = 0 Dim iCount As Integer = 0 Dim strRet As String = "" If strIn.Length Mod iInsStep <> 0 Then Return "" End If For iCount = 0 To strIn.Length - 1 Step iInsStep strRet = strRet + strIn.Substring(iCount, iInsStep) + strDelimiter iInsCount = iInsCount + 1 Next Return strRet.Substring(0, strIn.Length + iInsCount - 1) End Function ----------------------------------------------------------------- REM 認証キー検証関数(顧客側ソフトウェアのみ) REM 成功: true 失敗: false Private Function Authentication(ByRef strUserName As String, ByRef strUserKey As String) As Boolean If strUserName = "" Or strUserKey = "" Then Return False End If REM Imports System.Web.Security Return (InsertHyphen(FormsAuthentication. _ HashPasswordForStoringInConfigFile(strSeed & strUserName, strFormat)) = strUserKey) End Function ----------------------------------------------------------------- KeyGenerator 関数は作者側にしか必要ありません。 顧客から登録に使う ID を受け取って作者がキーを発行する為の物です。 UserID を KeyGenerator の引数に入れると 0A8D-22A8-13D8-5D51-E620-B70B-9059-EC7C というキーを生成します。ここまでは作者に必要な作業。 顧客側のソフトウェアでは Authentication 関数でキーが正規の物かの 検証して、正しいのであればレジストリや設定ファイルに値を保存して その後の起動からはレジストリや設定ファイルを読み取り製品版として 動作するようにします。 ただし、このやり方は UserID と 登録キーがあれば何台でもインストールして 使えることになると思われます。 他の端末では動作しないようにしたければ、その端末の固有の値を得て それを元にハッシュ値を生成して、それを作者が受け取りキーを生成 して顧客に渡すというような形態になると思われます。 端末の固有な値とは、端末の NIC の MAC アドレス、端末の OS が入った ハードディスクのボリュームシリアル、または Windows のシリアル番号が 考えられると思われます。 # 個人的には、機能制限に労力を使うよりソフトウェアの機能を充実された # ほうがよろしいかと思います。 # 制限がなくても良いものであればそれに見合った対価を支払ってくれると # 思います。
その他の回答 (4)
- Ishiwara
- ベストアンサー率24% (462/1914)
私もシェアウエアを公開していますが、回数制限や日数制限だけでは、現実的に無理です。切れたらダウンロードを何回でも繰り返せばいいのですから。 私は機能制限をかけています。送金されると、パスワードを返します。プログラムは、元のままです。このパスワードは使用のつど入力するのでなく、起動の際にファイルから読み取られます。 パスワードによって、機能制限が解除されるとともに、画面にユーザー様の名前が出るようになっています。
- imogasi
- ベストアンサー率27% (4737/17069)
経験無いが下記に違いないと思う。 ダウンロードしたとき、そのシステム日付を、ソフトの変数に日付を(暗号化するなりして)もぐりこます。 ユーザーが立ち上げた都度その日のシステム日付とダウウロード日を比較し制限日数を越えていたら終了する。 (1)ダウンドーロ時のシステム日付もダウンロード システム日付をユーザー側が細工するとお手上げだが。 (2)立ち上げた時チェックルーチンが処理される エクセルVBAのWorkBook_Open()のようなイメージ。 (3)期限経過後は強制終了 のスキルが必要になる。 上記では甘いかな。 ーー 機能制限は、ソフトの内容で試用版と正式版で別にして差をつけているのでは。 1本で済まそうというのかな。
- iekustam
- ベストアンサー率42% (32/76)
ご自分で考えるのがベストだと思いますが、 http://www.vector.co.jp/soft/win95/prog/se419679.html のようにシェアウェア作成をサポートするソフトも存在しますので探してみることをお勧めします。
- SAYKA
- ベストアンサー率34% (944/2776)
どうやって機能制限を果たすのか、どうしたら正式版として動作するのか を作っていって、そこに日付制限を組み込めば良いだけなんじゃないかな。 どうやって機能制限を実現するかって? それは自分で考えないと意味がないのでは・・・