No.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 のシリアル番号が
考えられると思われます。
# 個人的には、機能制限に労力を使うよりソフトウェアの機能を充実された
# ほうがよろしいかと思います。
# 制限がなくても良いものであればそれに見合った対価を支払ってくれると
# 思います。
No.4
- 回答日時:
私もシェアウエアを公開していますが、回数制限や日数制限だけでは、現実的に無理です。
切れたらダウンロードを何回でも繰り返せばいいのですから。私は機能制限をかけています。送金されると、パスワードを返します。プログラムは、元のままです。このパスワードは使用のつど入力するのでなく、起動の際にファイルから読み取られます。
パスワードによって、機能制限が解除されるとともに、画面にユーザー様の名前が出るようになっています。
No.3
- 回答日時:
経験無いが下記に違いないと思う。
ダウンロードしたとき、そのシステム日付を、ソフトの変数に日付を(暗号化するなりして)もぐりこます。
ユーザーが立ち上げた都度その日のシステム日付とダウウロード日を比較し制限日数を越えていたら終了する。
(1)ダウンドーロ時のシステム日付もダウンロード
システム日付をユーザー側が細工するとお手上げだが。
(2)立ち上げた時チェックルーチンが処理される
エクセルVBAのWorkBook_Open()のようなイメージ。
(3)期限経過後は強制終了
のスキルが必要になる。
上記では甘いかな。
ーー
機能制限は、ソフトの内容で試用版と正式版で別にして差をつけているのでは。
1本で済まそうというのかな。
No.2
- 回答日時:
ご自分で考えるのがベストだと思いますが、
http://www.vector.co.jp/soft/win95/prog/se419679 …
のようにシェアウェア作成をサポートするソフトも存在しますので探してみることをお勧めします。
No.1
- 回答日時:
どうやって機能制限を果たすのか、どうしたら正式版として動作するのか
を作っていって、そこに日付制限を組み込めば良いだけなんじゃないかな。
どうやって機能制限を実現するかって?
それは自分で考えないと意味がないのでは・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 国家公務員・地方公務員 公務員試験の勉強依存性です。年齢制限過ぎているのにやたら大卒程度の警察官採用試験や都庁採用試験に拘っ 1 2022/03/29 14:33
- PDF こんなPDF作れますか? 6 2022/05/13 11:14
- タブレット 子供のタブレットのペアレンタルコントロール 1 2023/04/14 14:34
- iPhone(アイフォーン) iPhone12Proでいわゆる『リンゴループ』になってしまい、ネット情報を参考に色々と試してみまし 1 2022/11/22 14:10
- インターネット広告・アフィリエイト アフェリエイトサイト 作成について 5 2022/05/13 21:31
- Yahoo!メール YahooIDをパスワード形式にしただけなのに、利用規約違反とされて電話番号が使えなくなりました 3 2023/03/25 04:08
- Yahoo!メール YahooIDをパスワード形式にしただけなのに、利用規約違反とされて電話番号が使えなくなりました 1 2023/03/15 20:44
- 仕事術・業務効率化 使用中のソフトで、インボイス制度に対応する為の作業料が30万以上。普通? 4 2023/06/15 21:26
- ファイアウォール 小学生のインターネット利用 3 2022/05/03 14:52
- その他(悩み相談・人生相談) 現在定時制高校に通う高1です。高校卒業後(19歳) 自衛隊候補生採用試験を受けようと考えています。 1 2022/11/07 00:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
会員登録のシステムについて
-
月の第一週とは
-
よくある 『 第○(1・2・3・4・...
-
6月の第2 第4火曜日は何日...
-
今週とは何曜日から何曜日まで...
-
FORMのFILEでフォルダ(ディレ...
-
[Excel] ある日の曜日が当月の"...
-
エクセルで毎月第2週日の水曜日...
-
日本語問題 昨日は何曜日ですか...
-
Webで取得できる情報
-
週2回のペースって だいたい何...
-
c言語の質問です。 ある月のカ...
-
jcode.plが読み込めない
-
perlのrequireの動き方について...
-
第○曜日であるかを取得する関数
-
apacheで403を404のように見せる
-
土曜日の26時って何曜日の何時...
-
C言語でわからないところがが...
-
はじめまして、レンタルサーバ...
-
お台場合衆国の混んでない時間...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
1日1回しかアクセスできないページ
-
フォームの文字数制限を解除したい
-
無料掲示板で書き込みは特定の...
-
会員登録のシステムについて
-
ホームページへのパスワード設...
-
PHP・セッションでのユーザー認...
-
フォーム要素の文字数制限について
-
Perlでブラウザのようにクッキ...
-
Perlでマックアドレスの取得
-
クエリーが含まれるURLを特定の...
-
ASP+Access(Jet4.0)のユーザ...
-
perl/cgi セッションについて
-
シェアウェアの試用制限のかけ方
-
HPのアドレス統一?
-
fc2無料HPのディレクトリアクセ...
-
基本認証でどのようにユーザー...
-
月の第一週とは
-
6月の第2 第4火曜日は何日...
-
よくある 『 第○(1・2・3・4・...
-
DBを10件毎に表示ページング...
おすすめ情報