PDA

View Full Version : سوال: ترفندی برای فعال و غیرفعال کردن برنامه بدست خود کاربر (مثلا برنامه ای که هنوز هزینش دریافت نشده!)



aftabeshargh
سه شنبه 15 فروردین 1391, 10:59 صبح
سلام

چطور میشه برنامه ای رو که به دست مشتری تحویل میدیم و هنوز ثبت نهایی نکردیم و مثلا پولش رو نگرفتیم و بخوایم به طور موقت ازش استفاده کنه رو طوری تنظیم کنیم که برای مثلا 1 هفته چندتا دکمه اصلیش فعال باشن و بعد enable شان false شه و اگر خواست مثلا به همکارش یا کسی دیگه ای برنامه رو معرفی کنه باز دوباره برنامه به طور موقت براش فعال بشه (بدون تماس با برنامه نویس)

hakim22
سه شنبه 15 فروردین 1391, 12:11 عصر
به نظر من شما دوتا نسخه داشته باشید ، یکیش دمو باشه و بعضی قابلیتهاش غیر فعال ، بعد هر کسی که جهت دریافت برنامه اصلی درخواست داد نسخه اصلی رو بهش بدید ، البته اگه حجم برنامش کمه

Hybrid
سه شنبه 15 فروردین 1391, 12:15 عصر
سلام ،

با نظر دوستمون موافقم ، شما 2 تا نسخه طراحی کنین که در نسخه تریال بعضی از کنترل ها غیر فعال باشین یا اصلا Visible شون False باشه ،

و نسخه ی اصلی تمام قابلیت ها رو در اختیار کاربر قرار بدین

JaVa
سه شنبه 15 فروردین 1391, 12:18 عصر
با سلام...

شما می تونید از Settings (http://barnamenevis.org/showthread.php?331456-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-Settings-(%D8%AD%D8%AA%D9%85%D8%A7-%D8%A8%D8%AE%D9%88%D9%86%DB%8C%D8%AF)&highlight=setting) استفاده کنید.
به این شکل که بعد از اجرای برنامه اول چک کنه که آیا مدت زمان استفاده از برنامه به پایان رسیده یا نه ؟
یا بعد از استفاده یک هفته از برنامه دکمه ها رو غیر فعال کنه.

پیروز باشید.*

JaVa
سه شنبه 15 فروردین 1391, 12:21 عصر
یه پیشنهاد دیگه هم به ذهنم رسید اینه که از ریجیستری ویندوز استفاده کنی.با توضیحات پست بالایی.

aftabeshargh
سه شنبه 15 فروردین 1391, 12:26 عصر
راستش میخوام تمام قابلیت های برنامه برای مدت مشخصی برا کاربر قابل استفاده باشه و بعد از مثلا یک هفته چندتا دکمه اصلیش غیر فعال بشن " مثلا یه شرطی رو تو setting بزارم که با یه کلمه عبور قابل تغییر باشه که مثلا اگه my.settings.kod="no" بود برنامه بع از یک هفته قابلیتاش غیر فعال بشه و وقتی یه کلمه معتبر رو وارد کرد (توسط برنامه نویس) بعدش my.setting.kod="ok" بشه " چطور میشه اون زمان یک هفته رو تنظیم کرد


یه پیشنهاد دیگه هم به ذهنم رسید اینه که از ریجیستری ویندوز استفاده کنی.
چطور ؟

ممنون

JaVa
سه شنبه 15 فروردین 1391, 12:37 عصر
برنامه بع از یک هفته قابلیتاش غیر فعال بشه و وقتی یه کلمه معتبر رو وارد کرد (توسط برنامه نویس) بعدش my.setting.kod="ok" بشه " چطور میشه اون زمان یک هفته رو تنظیم کرد

یه پیشنهاد هم برای این برات دارم.

اولین باری ک برنامه رو کاربر اجرا میکنه تاریخ در Settings یا در ریجستری ذخیره بشه. و بعد از اجرای هر بار تاریخ سیستم رو با تاریخ اولین بار اجرای برنامه مقایسه بشه که فکر کنم تابع هم داشته باشه برای مقایسه کردن دو تا تاریخ.
تابعش هم اینه : حالت کلی:

datediff(interval,date1,date2,[Firstweekofweek])


یا اصلا یه کاری دیگه بکن.

یه شمارنده در Setting برنامت قرار بده و بعد از اجرا برنامه یکی به شمارنده اضافه بکن. و مثلا بعد از اجرا 10 بار برنامه برنامه دیگه باز نشه.

پیروز باشید .*

JaVa
سه شنبه 15 فروردین 1391, 12:51 عصر
به نظر من شما دوتا نسخه داشته باشید ، یکیش دمو باشه و بعضی قابلیتهاش غیر فعال ، بعد هر کسی که جهت دریافت برنامه اصلی درخواست داد نسخه اصلی رو بهش بدید ، البته اگه حجم برنامش کمه

شما یه برنامه تجاری برای من مثال بزن که این ویژگی رو داشته باشه.
الانه هر برنامه ای نمونش Adobe Photo Shop یک ماه اجازه استفاده به کاربر میده تا اینکه شماره سریال رو وارد کنی در غیر اینصورت بعد از یک ماه Access denid میزنه.

Hybrid
سه شنبه 15 فروردین 1391, 12:53 عصر
یه پیشنهاد هم برای این برات دارم.

اولین باری ک برنامه رو کاربر اجرا میکنه تاریخ در Settings یا در ریجستری ذخیره بشه. و بعد از اجرای هر بار تاریخ سیستم رو با تاریخ اولین بار اجرای برنامه مقایسه بشه که فکر کنم تابع هم داشته باشه برای مقایسه کردن دو تا تاریخ.
تابعش هم اینه : حالت کلی:
1
2
datediff(interval,date1,date2,[Firstweekofweek])





یا اصلا یه کاری دیگه بکن

این روشیه که همیشه استفاده میشه ، ولی اشکالاتی داره که باید حل بشن مثلا شا داخل برنامتون شرط میکنین که اگه اختلاف تاریخی که در Setting ذخیره شده با تاریخ فعلی مثلا 5 روز بود برنامه کار کنه خوب کاربر میاد میگه من اصلا نمیزارم ، تاریخ بره جلو و همیشه ازش استفاده میکنم مثلا نمیزارم از 24 به بعد بره ، در این حالت نسخه ی تریال به نسخه ی دائمی تبدیل میشه !! :)

یکی از راه حل ها اینه : بیای 3 تا Setting تعریف کنین که برنامه به تاریخ فعلی 10 روز اضافه کنه و داخل یکی از Setting ها ذخیره کنه ، تا الان یک Setting پر شد ، و Settingدیگه هر روزی که جلو میره یک عدد بهش اضافه بشه و وقتی که عدد موجود در این فیلد با اختلاف تاریخی که در فیلد دوم ذخیره شد برابر بود فیلد سوم مثلا مقدار True رو بگیره مبنی بر اینکه تاریخ این برنامه تموم شده و دیگه نشه ازش استفاده کرد.

یا اینکه بیای به قول دوستون بیای روی تعداد اجرای برنامه شرط بزاری که کار راحتی هست ( هر چند غیر رایج هست ) ، ولی کارتون رو راه میندازه

hakim22
سه شنبه 15 فروردین 1391, 12:55 عصر
استفاده از رجیستری که خیلی مشکل داره ، چون با یک نرم افزار مونیتورینگ رجیستری شما به راحتی میتونید تغییرات اون رو بدست بیارید و برنامه به راحتی کرک میشه
setting هم همون رجیستریه و هیچ فرقی نداره فقط کلیدهاش به صورت خودکار در یک مسیر خاص ذخیره میشوند. اون هم از نظر امنیتی مشکل داره

هرکسی میتونه بره توی رجیستری و مثلا my.setting.kod رو روی yes تنظیم کنه !

JaVa
سه شنبه 15 فروردین 1391, 12:58 عصر
یکی از راه حل ها اینه : بیای 3 تا Setting تعریف کنین که برنامه به تاریخ فعلی 10 روز اضافه کنه و داخل یکی از Setting ها ذخیره کنه ، تا الان یک Setting پر شد ، و Settingدیگه هر روزی که جلو میره یک عدد بهش اضافه بشه و وقتی که عدد موجود در این فیلد با اختلاف تاریخی که در فیلد دوم ذخیره شد برابر بود فیلد سوم مثلا مقدار True رو بگیره مبنی بر اینکه تاریخ این برنامه تموم شده و دیگه نشه ازش استفاده کرد.


این خیلی بهتر و کار آمد تره به نظر من.
دیگه هم فکر نکنم مشکلی پیش بیاد.

یه سئوال : آیا سیستم به غیر از این ساعت داخل نوار وظیفه ساعت دیگه ای هم داره؟ که خودش باهاش کار کنه؟

hakim22
سه شنبه 15 فروردین 1391, 13:01 عصر
در ضمن اگر کاربر تاریخ سیستمش رو توی همون بازه ی زمانی امتحانی نگاه داشت چی !؟
برنامه ی شما تا ابد کار میکنه !

aftabeshargh
سه شنبه 15 فروردین 1391, 13:01 عصر
یکی از راه حل ها اینه : بیای 3 تا Setting تعریف کنین که برنامه به تاریخ فعلی 10 روز اضافه کنه و داخل یکی از Setting ها ذخیره کنه ، تا الان یک Setting پر شد ، و Settingدیگه هر روزی که جلو میره یک عدد بهش اضافه بشه و وقتی که عدد موجود در این فیلد با اختلاف تاریخی که در فیلد دوم ذخیره شد برابر بود فیلد سوم مثلا مقدار True رو بگیره مبنی بر اینکه تاریخ این برنامه تموم شده و دیگه نشه ازش استفاده کرد.


هر روزی که جلو میره یک عدد بهش اضافه بشه
این قسمتش چطور میشه ؟ مگه نگفتید ممکنه تاریخو ثابت نگه دارن ؟

JaVa
سه شنبه 15 فروردین 1391, 13:01 عصر
استفاده از رجیستری که خیلی مشکل داره ، چون با یک نرم افزار مونیتورینگ رجیستری شما به راحتی میتونید تغییرات اون رو بدست بیارید و برنامه به راحتی کرک میشه
setting هم همون رجیستریه و هیچ فرقی نداره فقط کلیدهاش به صورت خودکار در یک مسیر خاص ذخیره میشوند. اون هم از نظر امنیتی مشکل داره

هرکسی میتونه بره توی رجیستری و مثلا my.setting.kod رو روی yes تنظیم کنه !

حالا که اینو گفتی بیا داخل بانک اطلاعاتی ذخیرش کن.

یا یه چیز دیگه:
می تونی برای ذخیره کردن از فایل تصادفی استفاده کنی.

aftabeshargh
سه شنبه 15 فروردین 1391, 13:06 عصر
دوستان این قسمت رو توضیح بدید لطفا

یکی از راه حل ها اینه : بیای 3 تا Setting تعریف کنین که برنامه به تاریخ فعلی 10 روز اضافه کنه و داخل یکی از Setting ها ذخیره کنه ، تا الان یک Setting پر شد ، و Settingدیگه هر روزی که جلو میره یک عدد بهش اضافه بشه و وقتی که عدد موجود در این فیلد با اختلاف تاریخی که در فیلد دوم ذخیره شد برابر بود فیلد سوم مثلا مقدار True رو بگیره مبنی بر اینکه تاریخ این برنامه تموم شده و دیگه نشه ازش استفاده کرد.


هر روزی که جلو میره یک عدد بهش اضافه بشه ؟؟؟ یعنی این یک روزی که جلو میره رو از تاریخ سیستم چک کنه ؟ خب مگه نگفتید ممکنه تاریخ ثابت نگه داشته بشه ؟

Hybrid
سه شنبه 15 فروردین 1391, 13:13 عصر
استفاده از رجیستری که خیلی مشکل داره ، چون با یک نرم افزار مونیتورینگ رجیستری شما به راحتی میتونید تغییرات اون رو بدست بیارید و برنامه به راحتی کرک میشه
setting هم همون رجیستریه و هیچ فرقی نداره فقط کلیدهاش به صورت خودکار در یک مسیر خاص ذخیره میشوند. اون هم از نظر امنیتی مشکل داره

هرکسی میتونه بره توی رجیستری و مثلا my.setting.kod رو روی yes تنظیم کنه !

حرفتون منطقیه ولی همه ی مردم که هکر و بر نامه نویس نیستند ، شما هر روشی رو که بگین هکر های محترم میتونین دورش بزنن پس هیچ روشی از لحاظ امنیت 100 درصد نیست.


؟؟؟ یعنی این یک روزی که جلو میره رو از تاریخ سیستم چک کنه ؟ خب مگه نگفتید ممکنه تاریخ ثابت نگه داشته بشه ؟

اینم سوال من هست ، روش باید کار بشه ، چون به قول شما ممکنه تاریخ ثابت نگه داشته بشه، اگه اینترنت داشته باشه و تاریخ از اینترنت گرفته بشه خوب خیلی راحت میشه ولی اکثر سیستم ها که اینترنت ندارن !

دارم روش کار میکنم اگه به نتیجه رسیدم داخل همین تاپیک قرار میدم

aftabeshargh
سه شنبه 15 فروردین 1391, 13:20 عصر
با فرض هکر نبودن و ثابت نگه داشته نشدن تاریخ " کد نویسی گفته زیر به چه صورته ؟

هر روزی که جلو میره یک عدد بهش اضافه بشه

Hybrid
سه شنبه 15 فروردین 1391, 13:36 عصر
با فرض هکر نبودن و ثابت نگه داشته نشدن تاریخ " کد نویسی گفته زیر به چه صورته ؟

این حالت که خیلی آسونه ، من دارم رو این کار میکنم که کاربر تاریخ رو هم ثابت نگه داره ، واسه شما مثلا :

Hybrid
سه شنبه 15 فروردین 1391, 13:39 عصر
دوستان لینکه جالبی رو پیدا کردم ، نحوه ی درست کردن برنامه های Trial با استفاده از .net ،

http://www.codeproject.com/Articles/15496/Application-Trial-Maker

سورس رو هم داره ،

البته به زبان سی شارپ هست ولی راحت میشه به وی بی دات نت تبدیل کرد

فرید نجفلو
سه شنبه 15 فروردین 1391, 13:55 عصر
دوست عزیز یه با تو تاپیک زیر در مورد همین مسئل گفتگو کردیم

مشکل حیاتی لایسنس (http://barnamenevis.org/showthread.php?330431-مشکل-حیاتی-لایسنس&highlight=%D9%84%D8%A7%DB%8C%D8%B3%D9%86%D8%B3)

تاپیک در اینجا پیگیری فنی تر شده:

موزش ایجاد دوره زمانی trial و کد فعال سازی برای برنامه با سطح امنیت بالا

arash020
چهارشنبه 16 فروردین 1391, 00:50 صبح
سلام
هیچ روشی صددرصد جواب نمیده
من قدیم ندیما روش رجیستری و یه ترفند دیگه که ایده ی اون موقع خودم بود رو توی یه برنامه استفاده کردم.
برنامه رو دادم دست اساتید قسمت "امنیت نرم افزار " همین سایت
کرک شده شو برام فرستادن!!!
به نظر خودم که تنها راه کرک کردن اون برنامه(خارج کردن از حالت غیرفعال) تغییر کد اصلی برنامه بود
نمیدونم چطوری این کارو کردن
برنامه exe بهشون داده بودم...
یه سوال دارم راجع به برنامه مورد نظرت که می خوای این امکان رو براش بزاری:
برنامت با اینترنت تعاملی داره یا نه؟منظورم اینه که امکانش هست برنامه ت برای هربار اجرا برای چند ثانیه ارتباط اینترنتی برقرار کنه یا نه حتی با سرعت پایین؟؟
یه جورایی اجباری باشه؟
اگه بشه , میشه یه روش محکم برای این منظورت پیاده سازی کرد.
به نظر من همیشه نیاز نیست ما همون راهی رو که قبلا بعضیا رفتن رو دنباله روی کنیم...

aftabeshargh
چهارشنبه 16 فروردین 1391, 00:56 صبح
سلام
نه متاسفانه هیچ رابطه ای با نت نداره .

arash020
چهارشنبه 16 فروردین 1391, 01:47 صبح
خب یه روش دیگه مثلا میتونه این باشه:
به تعداد روز ههای موردنظر در اولین اجرا, متغیر با نام راندوم ایجاد کن
کدی بنویس که هر روز یه فایل بسازه به نام تاریخ همون روز.
"""با استفاده از get attrib file میشه تشخیص داد که فایل چه تاریخی ساخته شده."""
باید در هربار اجرا ,برنامه ایجاد کنه فایل اون روزش رو حتما.
حالا هم میتونی از روی تعداد فایل های ایجاد شده و ... چیزای دیگه که فعلا به ذهنم نمیرسه به چیزی که می خوای برسی .
(سعی کن الگوریتمی بری جلو , عجله نکن و یه کاغد دستت باشه نتایج رو بنویس)
---------------
محل فایل رو هم جایی لابه لایه پوشه های ویندوز انتخاب کن
به تابعی برای جستجوی فایل هم شاید نیاز داشتی؛بگردی هست...
4یا 5 خط بیشتر نیستش...
فایل های ساخته شده رو باید هربار لیست بگیری و توی حلقه تاریخ ایجادشونو با تاریخ امروز چک کنی,اگه نبود فایل امروز ساخته بشه.
و بقیه ماجرا

امیدوارم تونسته باشم منظورمو برسونم.
با ارزوی موفقیت

hakim22
چهارشنبه 16 فروردین 1391, 15:14 عصر
عزیز من چرا راه دور میری ! دوتا نسخه درست کن و خودتو خلاص کن ، اونی که پول میده دیگه نمیشینه کرکش کنه ، مفتی هم نمیده به جماعت دیگه ! حالا یک در هزار هم اینکارو کرد ، اینو باید قبول کنید.

بد نیست برید سراغ قفل های سخت افزاری ، همونایی که با یک فلش یا چیزهایی مثل این کار می کنند.
در ایران راه خوبی به نظر میرسه