> ネットでどんなに調べても試用制限のかけ方がわかりません。
そんな肝となる部分を載せるような御方は殆んどいないのでは?
それにひとつ間違えればクラッキングされることになると思います。
> 誰かわかる方教えてください。
他の方々が仰るように制限方法はご自身で考えるのがベストです。
個人的にはフリーのソフトウェアかオープンソースしか使わないので
シェアウェアの機能制限について詳しいことは存じませんが。
考えられる方法として記述します。
やり方としては任意の文字列をキーとして、それが一致した場合に
製品版として動き、未登録の場合は試用版として動作する。
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 のシリアル番号が
考えられると思われます。
# 個人的には、機能制限に労力を使うよりソフトウェアの機能を充実された
# ほうがよろしいかと思います。
# 制限がなくても良いものであればそれに見合った対価を支払ってくれると
# 思います。