電子書籍の厳選無料作品が豊富!

visualbasicでソフトを作って、シェアウェアとしてベクターにだしたいと思いますが、ネットでどんなに調べても試用制限のかけ方がわかりません。誰かわかる方教えてください。参考になるページでもいいです。お願いします。

A 回答 (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 のシリアル番号が
考えられると思われます。

# 個人的には、機能制限に労力を使うよりソフトウェアの機能を充実された
# ほうがよろしいかと思います。

# 制限がなくても良いものであればそれに見合った対価を支払ってくれると
# 思います。
    • good
    • 0

私もシェアウエアを公開していますが、回数制限や日数制限だけでは、現実的に無理です。

切れたらダウンロードを何回でも繰り返せばいいのですから。
私は機能制限をかけています。送金されると、パスワードを返します。プログラムは、元のままです。このパスワードは使用のつど入力するのでなく、起動の際にファイルから読み取られます。
パスワードによって、機能制限が解除されるとともに、画面にユーザー様の名前が出るようになっています。
    • good
    • 0

経験無いが下記に違いないと思う。


ダウンロードしたとき、そのシステム日付を、ソフトの変数に日付を(暗号化するなりして)もぐりこます。
ユーザーが立ち上げた都度その日のシステム日付とダウウロード日を比較し制限日数を越えていたら終了する。
(1)ダウンドーロ時のシステム日付もダウンロード
システム日付をユーザー側が細工するとお手上げだが。
(2)立ち上げた時チェックルーチンが処理される
エクセルVBAのWorkBook_Open()のようなイメージ。
(3)期限経過後は強制終了
のスキルが必要になる。
上記では甘いかな。
ーー
機能制限は、ソフトの内容で試用版と正式版で別にして差をつけているのでは。
1本で済まそうというのかな。
    • good
    • 0

ご自分で考えるのがベストだと思いますが、


http://www.vector.co.jp/soft/win95/prog/se419679 …
のようにシェアウェア作成をサポートするソフトも存在しますので探してみることをお勧めします。
    • good
    • 0

どうやって機能制限を果たすのか、どうしたら正式版として動作するのか


を作っていって、そこに日付制限を組み込めば良いだけなんじゃないかな。

どうやって機能制限を実現するかって?
それは自分で考えないと意味がないのでは・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!