PDA

View Full Version : گذاشتن فیلتر بر روی برنامه



F.zeinali
یک شنبه 09 بهمن 1390, 12:35 عصر
سلام دوستان
من یه برنامه دارم که می خوام بیشتر از 3ماه برای کاربر کار نکنه و بعد از 3ماه پیغام بده که شما دیگر حق استفاده ندارید

حالا چند روش پیشنهاد کنید که بعد از 3 ماه به هیچ وجه نتونه از برنامه استفاده کنه
یه روش که خودم استفاده کردم از dateTime بود
حالا دوستان چه پیشنهادی دارن؟

parvizwpf
یک شنبه 09 بهمن 1390, 13:13 عصر
قطعا همین روشه ولی با تغییر همه چی بهم میریزه.

F.zeinali
یک شنبه 09 بهمن 1390, 13:56 عصر
قطعا همین روشه ولی با تغییر همه چی بهم میریزه.

ممنون دوست عزیز ، ولی باید روش های دیگه ای هم باشه

دوستان دیگه هم نظر بدن

mandanim
یک شنبه 09 بهمن 1390, 14:25 عصر
اصلا روش خوبی نیست
طرف اگه تاریخشو ببره عقب مشکلش حل میشه
روش بهتر این هستش که یه فایل text در یکی از پوشه های سیستم عامل درست بکنی و بعد تاریخ مورد نظر سیستم رو همون لحظه ثبت بکنی و بعد هر بار که برنامه رو run می کنه اون تاریخ رو بخونه .
به همبن راحتی
:متفکر:

modern_amin
یک شنبه 09 بهمن 1390, 14:51 عصر
منم درگیر همین کارم
10تا راه رو رفتم ولی مطمئن نیستم
.
براساس:

تایمر معکوس
فیلد دیتابیس
کپی فایل
میزان اطلاعات ورودی
شناسه سخت افزاری
فلش سخت افزاری
دادن user,pass در هنگام لاگین
و ...
.
.
اینا هرکدوم ضعف هایی دارند
اگه نتیجه گیری کنیم که چه کاری بهتره واقعا عالیه
نظر دوستان چیه؟

F.zeinali
یک شنبه 09 بهمن 1390, 17:24 عصر
من در حال حاضر از روش های زیر استفاده کردم ، اما هر کدومشون مشکلات خاص خودشونو دارن

1_DateTime
2_ذخیری عددی که نشان دهنده تعداد موارد استفاده از برنامه هست در DataBase

Esmail Solhkhah
یک شنبه 09 بهمن 1390, 17:28 عصر
از وب سرویس استفاده کنید و تاریخ رو از اون بخونید تا کاربر نتونه تغییرش بده (البته به شرط موجود بودن اینترنت)

http://barnamenevis.org/showthread.php?12018-%D9%85%D9%86%D8%A7%D8%A8%D8%B9%D8%8C-%D9%85%D8%B1%D8%A7%D8%AC%D8%B9-%D9%88-%D9%85%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D9%85%D9%81%DB%8C%D8%AF-%D8%AA%D8%A7%D9%84%D8%A7%D8%B1&p=1320876&viewfull=1#post1320876

موفق باشید.

modern_amin
یک شنبه 09 بهمن 1390, 17:45 عصر
خوبه! ولی منطقی نیست
خوب بعضی جاها که اینترنت نیست چیکار باید کرد ، یا قطع باشه یا سرعتش خیلی کم باشه و..
.
باید همه جا جواب بده

m2_farzan
یک شنبه 09 بهمن 1390, 17:49 عصر
من با modern_amin موافقم.

ببین از این مهملات چیزی حالیت میشه؟! به نظرم اومد ممکنه به درد بخوره ولی راستش خودم درست نفهمیدم...

It's not exactly related to cracking it, but it's worth noting that if this is an app that can be used internationally, it'll show as being 'expired' for many users before they've even had a chance to try it at all. The values returned by DateTime reflect the local users culture, so DateTime.Now.Year returns 1431 for Arabic cultures and 2553 for the Thai culture for instance. Months can similarly differ, so you shouldn't hardcode values for them without checking the culture first.

You can get round this by using the InvariantCulture each time ,e.g.

DateTime.Now.Year.ToString(System.Globalization.Cu ltureInfo.InvariantCulture);

Esmail Solhkhah
یک شنبه 09 بهمن 1390, 17:51 عصر
خوبه! ولی منطقی نیست

بنده هم نگفتم روش قطعی ، گفتم به شرطها و شروطها

اول اجرای برنامه تاریخ ایجاد فایل اصلی برنامه رو بخونید و بررسی کنید اگه تاریخ جاری قبل از اون بود یعنی ...

ضمنا برنامه رو جوری تنظیم کنید(مشتری بیچاره) که سه ماه به سه ماه نیاز به آپدیت داشته باشه هر چند چیزی تغییر نکرده فقط تاریخ ایجاد فایل تغییر کرده

موفق باشید.

modern_amin
یک شنبه 09 بهمن 1390, 17:53 عصر
من با modern_amin موافقم.

ببین از این مهملات چیزی حالیت میشه؟! به نظرم اومد ممکنه به درد بخوره ولی راستش خودم درست نفهمیدم...

It's not exactly related to cracking it, but it's worth noting that if this is an app that can be used internationally, it'll show as being 'expired' for many users before they've even had a chance to try it at all. The values returned by DateTime reflect the local users culture, so DateTime.Now.Year returns 1431 for Arabic cultures and 2553 for the Thai culture for instance. Months can similarly differ, so you shouldn't hardcode values for them without checking the culture first.

You can get round this by using the InvariantCulture each time ,e.g.

DateTime.Now.Year.ToString(System.Globalization.Cu ltureInfo.InvariantCulture);

ترجمش کردم این معنیش میشه:::متعجب:
{{{{{{{ این دقیقا مربوط به شکافتن آن نیست ، بلکه آن را شایان ذکر است که در صورتی که این نرم افزار است که می تواند مورد استفاده قرار گیرد بین المللی، آن را خواهید عنوان که "منقضی" برای بسیاری از کاربران نشان می دهد قبل از اینکه آنها حتی به حال یک فرصت به آن را امتحان کنید در همه. مقدار بازگردانده شده توسط حسگر ناحیه رنگی یک منعکس کننده فرهنگ محلی کاربران ، می گرداند DateTime.Now.Year 1431 برای فرهنگ های عربی و 2553 برای فرهنگ تایلندی به عنوان مثال. ماه گذشته به طور مشابه می تواند متفاوت است ، بنابراین شما باید مقادیر آنها را بدون چک کردن این فرهنگ برای اولین بار hardcode }}}}}}}
.
.
ولی فکر کنم منظورشو فهمیدم
اونی که من فکر میکنم درست باشه یکی از ابزارهای خود ویژوال استادیو هست برای تریال کردن
.
دوستان کسی اطلاعاتی در اون باره داره

m2_farzan
یک شنبه 09 بهمن 1390, 18:03 عصر
حالا فهمیدم!!!

میگه که کار سخت تر از این حرفاس چون شما ممکنه یه برنامه بنویسید که فرضا تا پایان سال 2012 تریال میشه.

خوب اگه کاربر ویندوزش رو شخصی سازی کرده باشه مثلا اگه سیستمش رو برای تاریخ هجری قمری تنظیم کرده باشه، اونوقت وقتی شما DateTime.Now.Year رو فراخوانی می کنید، عددی دور و بر 1431 برگردونده میشه چون تاریخ هجری قمری از میلادی عقب تره! با این وضع کاربر اگه سیستم رو شخصی سازی کنه، میتونه 500 سال بیشتر از برنامه استفاده کنه.

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

راستی... تولدت مبارک!!!

modern_amin
یک شنبه 09 بهمن 1390, 18:13 عصر
دوستان کار با تایم درست نیست
ساعت سیستم شاید به عقب بیاد، شاید اطلاعات restore بشه ، شاید اصلا ساعت سیستم اشتباه بود بعد خواست درست کنه و ...
.
.
راستی تولد کی؟

Esmail Solhkhah
یک شنبه 09 بهمن 1390, 18:26 عصر
دوست عزیز شما تو پست 1 میگید


من یه برنامه دارم که می خوام بیشتر از 3ماه برای کاربر کار نکنه

بعد تو پست 13 میگید


دوستان کار با تایم درست نیست

خب مومن وقتی شما صحبت از ماه میکنید یعنی کار با تاریخ حالا تو پست 13 میگید



شاید اصلا ساعت سیستم اشتباه بود


در اینصورت اعتباری به ساعت سیستم شما نیست پس باید زمان رو از جایی به غیر از سیستم جاری بگیرید ، بنده هم وب سرویس رو به عنوان یه رفرنس خارج از سیستم جاری گفتم

اگه شبکه بود از سرور بگیرید اگه سرور هم تاریخش درست نبود یعنی : این میشه دیگه از اون حرفا

موفق باشید.

sobaisobai
یک شنبه 09 بهمن 1390, 18:37 عصر
من با modern_amin موافقم.

ببین از این مهملات چیزی حالیت میشه؟! به نظرم اومد ممکنه به درد بخوره ولی راستش خودم درست نفهمیدم...

It's not exactly related to cracking it, but it's worth noting that if this is an app that can be used internationally, it'll show as being 'expired' for many users before they've even had a chance to try it at all. The values returned by DateTime reflect the local users culture, so DateTime.Now.Year returns 1431 for Arabic cultures and 2553 for the Thai culture for instance. Months can similarly differ, so you shouldn't hardcode values for them without checking the culture first.
خودت ترجمه ش کردی یا پروفسور گوگل؟!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

modern_amin
یک شنبه 09 بهمن 1390, 18:39 عصر
کاره پرفسوره!!!
.
.
البته اون "ساعت چرا اشتباه بود " رو من گفتم اون بنده خدا نگفت
اینترنت میگم عالیه ، فقط همه که به اینترنت متصل نیستند در هر لحظه ،من جاهایی برنامه دادم که امنیت و حفظ اطلاعات براشون خیلی مهمه و ثانیه ای برنامه رو به اینترنت وصل نمیکنند و کلا فیش های رابط هم کور کردند (البته اونقدرم فکر میکنید جای خفنی نیست :D )
.
روش هایی رو رفتم اگر بگم خندتون میگیره ، میگید پسر عقلت به اونجا کجا رسید!
.
من دنبال یه راه منطقی که همه جا (نمیگم 100% ، بلکه 95% ) جواب بگیرم هستم
خواهشند قفل سخت افزاری رو پیشنهاد ندهید من که نظر شخصیم اینو قبول ندارم ، البته از جهاتی خوبه ولی
1-پول مفت دان هست ، چون خودمون هم میتونیم
2-برنامه نویسی که نتونه باعث کپی نشدن برنامش (حداقل 95%) بشه ....
3-بعضی اوقات میبینیم اونها هم ک.ر.ک میشن
و...

Esmail Solhkhah
یک شنبه 09 بهمن 1390, 18:49 عصر
من جاهایی برنامه دادم که امنیت و حفظ اطلاعات براشون خیلی مهمه و ثانیه ای برنامه رو به اینترنت وصل نمیکنند

اگه امنیت اطلاعات براشون اینقدر مهمه و تاریخ سیستمشون درست نیس بهتره بگید امنیت اطلاعات براشون مهم نیست

modern_amin
یک شنبه 09 بهمن 1390, 19:00 عصر
اولا من نمیخاستم خدای نکرده پز بدم و کلا اولین باری بود که تو این سایت همچین حرفی زدم ، من هرکی هستم برا خودم هستم
دوما شاید من درست بیان نکردم شایدم شما درست نگرفتید منظورم رو ، من فقط فقط مثال زدم که کار با سیستم ساعت بعضی مشکلات خواسته یا ناخواسته رو داره
سوما منظورم امنیت و حفظ اطلاعات و عدم انتشار اون بود ، صحیح و غلط بودن در درجه بعدی قرار داره
.
بزارید مساله رو کاملتر شرح بدم: ما دقیقا میخواهیم مثلا یک جا که برنامه دادیم و پول رو نگرفتیم یا پول پشتیبانی نداد (البته همه چی طبق قرداد قبلی) برنامه از کار بیفته و هروقت که پرداخت کرد دوباره شروع به کار کنه
(بهتره که قبل از کار افتادن مثلا 2روز قبلش پیغامی بده)
حالا نظر شما اساتید چیه درخصوص انجام این کار؟؟
.
اصلا ویروس کش هاااایی مثل kaspersky که تریااال 30روزه هستند و با تغییر تاریخ سیستم هم همون زمان رو دارند چیکار کرد

modern_amin
یک شنبه 09 بهمن 1390, 19:02 عصر
استفاده از دیتابیس
استفاده از فایل ها و کپی
استفاده از رجیستری
و...
دارای مشکلاتی هستند

modern_amin
یک شنبه 09 بهمن 1390, 19:11 عصر
گویا بازم مثله همیشه این بحث داره بدون نتیجه می مونه
اساتید هرنظر یا ایده ای دارند لطفا بیان کنند

Esmail Solhkhah
یک شنبه 09 بهمن 1390, 19:14 عصر
اولا من نمیخاستم خدای نکرده پز بدم و کلا اولین باری بود که تو این سایت همچین حرفی زدم ، من هرکی هستم برا خودم هستم

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

تو پست 10 گفتم موقع اجرا تاریخ ایجاد فایل اجرایی برنامه رو (یا هر چیزی که خواستید) رو بخونید و با تاریخ جاری مقایسه کنید اگه تاریخ جاری پایینتر بود که پیام بدید تاریخ سیستم صحیح نیست و تمام

اگه تاریخ بالاتر بود و 3 ماه گذشته بود که مورد حله در غیر اینصورت اگه کاربر جنگولک بازی درآورده و با تاریخ بازی کرده مسئولیتش پای خودش



اصلا ویروس کش هاااایی مثل kaspersky که تریااال 30روزه هستند و با تغییر تاریخ سیستم هم همون زمان رو دارند چیکار کرد

موقع نصب تاریخ نصب رو یه جایی ست میکنن (به دور از چشم اغیار) و ملاک رو از این تاریخ میگیرن خب اگه تایرخ رو 30 روز بالا ببرید میشه همونی که گفتم

ضمنا به محظ اتصال به اینترنت تاریخ معتبر رو از سرور خودشون میگیرن

موفق باشید.

modern_amin
یک شنبه 09 بهمن 1390, 19:30 عصر
دقیقا منظورتون رو میفهمم و خودم اینکارو کردم که تو لود میومدم چک میکردم ، حتی یجا مشهد داشتم برنامه میدادم کاری کردم از راه دور در هرلحظه که اراده کنم سیستم طرف دیگه بالا نیاد و هروقت که خواستم دوباره فعال بشه
.
مشکل اینه که بعضی جاها اینترنت ندارند و قضیه تاریخ سیستم هم باید بگم همه که وارد نیستند ، ممکنه اشتباه کنند و من نمیتونم به کاربر بگم اینکارو نکن
.
یچیزی میخام اکثر جاها جواب بده ، کارهایی که کاربر انجام میده هم برام مهم نباشه
درمورده ویروس کش هم باید بگم که مثلا امروز 30روزه تریال شده و من یک پشیبان از ویندوزم میگیرم ، 20روز میگذره و بنابراین من 10روز مهلت دارم ، حالا میام restore میکنم ، ولی باز لایسنس اون همون 10روز میمونه
ولی تو برنامه هایی که حرفه ای نیستند و کمتر حرفه ای هستند با همین شرایط اون عدد به 30 تغییر وضعیت میده

Esmail Solhkhah
یک شنبه 09 بهمن 1390, 19:42 عصر
مشکل اینه که بعضی جاها اینترنت ندارند

خب پس بحث وب سرویس شدنی نیست

در مورد تاریخ هم : کار شما بررسی تاریخه اگه کاربر نمیتونه تاریخ رو درست نیگه داره پس بحث تاریخ رو بیخیال بشید و بر اساس ران تایم برنامه یا تعداد دفعات لایسنس بذارید.


درمورده ویروس کش هم باید بگم که مثلا امروز 30روزه تریال شده و من یک پشیبان از ویندوزم میگیرم ، 20روز میگذره و بنابراین من 10روز مهلت دارم ، حالا میام restore میکنم ، ولی باز لایسنس اون همون 10روز میمونه

خب آنتی ویروس بعد ریستور کردن ویندوز دوباره تاریخ رو میخونه (قبلش موقع نصب تاریخ نصب رو ست کرده بوده پس تو ویندوز قبلی شما این تاریخ به عنوان بیس موجوده) و با تاریخ قبلی مقایسه میکنه

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

شما میتونید از پارتیشن تیبل هم استفاده کنید (دسترسی مستقیم به سکتورهای هارد) ، تاریخ بیس (یا هر چیز لازم) رو میشه تو پارتیشن تیبل های مختلف ست کرد (محدودیت فضا رو هم در نظر بگیرید).

موفق باشید.

modern_amin
یک شنبه 09 بهمن 1390, 19:58 عصر
با تشکر از پاسختون
فکر کنم فراتر از اینا باشه ، اگر قضیه مخفی کاری اونا باشه منم از ذخیره در دیتابیس (مخفی و آشکار)، چک کردن شروط ، کار با فایل ها (txt یا دیگر فایلهای متنی , dll , xml , public folder & file ) نیز استفاده کردم و حتی از چیزی که خیلی ها توجه نمی کنند مثلا ادغام فایل ها و اتربیوت فایل ها هم استفاده کردم (چون اتربیوت فایل ها ویژه گی های خاصی دارند)
.
در ضمن مساله علاوه بر کنترل زمان ، کنترل تعداد نصب بر روی سیستم های مختلف هم هست
بنظر شما برای یک راه مطمئن (مثل تریال در ویروس کش هاا) باید سمت اسمبلی برم؟
میتونید بیشتر راهنمایی کنید
در ضمن شما خودتون کدوم روش رو استفاده کردید و یا انتخاب می کنید؟

F.zeinali
یک شنبه 09 بهمن 1390, 20:37 عصر
از دوستان بابت نظراتشون ممنونم


خب پس بحث وب سرویس شدنی نیست

در مورد تاریخ هم : کار شما بررسی تاریخه اگه کاربر نمیتونه تاریخ رو درست نیگه داره پس بحث تاریخ رو بیخیال بشید و بر اساس ران تایم برنامه یا تعداد دفعات لایسنس بذارید.
.
منم فعلا همین پیشنهاد شما رو انجام دادم
چون در این مورد وب سرویس اصلا جواب نمیده
DateTime اصلا خوب نیست و تنها راه یی که میمونه تعداد دفعاتی هست که کاربر از برنامه استفاده می کنه

Alfred188
یک شنبه 09 بهمن 1390, 21:29 عصر
سلام،
یه پیشنهاد، نظرتون چیه اگه یه فایل عددی با تاریخ تو یه قسمت سیستم یا خود برنامه ایجاد بشه بعد برنامه تو startup سیستم بیاد چک بکنه اگه تاریخ با تاریخی که تو فایل هست یکیه که هیچ اگه نه به عدد یه دونه اضافه بکنه.
تاریخ اولیه رو هم موقع ایجاد فایل توش می زاریم و فرقی هم نمی کنه میلادی باشه یا شمسی یا هرچی چون فقط قراره مثل یه string مقایسه بشه!
اینطوری تنها شانس کاربر برای استفاده بیشتر پیدا کردن این فایل خواد بود!!!

vistacali
یک شنبه 09 بهمن 1390, 21:34 عصر
عجب مسئله خوبی فکر من این بود ولی به بن بست خوردم تو فکرم:قهقهه:



در برنامه یک تایمر ایجاد کنید و بعد وقتی برنامه نصب شد تایمر شروع به کار کند و بعد از یک ماه برنامه اکسپایر شود یعنی ما خودمون میدونیم برنامه رو برای مثلا 30 روز میخوایم و هر روز هم 24 ساعت هست بنابراین 30*24=720 ساعت باید این برنامه کار کند تا اینجا اگر برنامه روی یک سیستم باشه که 24 ساعت روشن باشه مثل اب خوردن هست.

مشکل اینجا شروع میشه که شاید سیستم مورد استفاده در روز خاموش بشود حالا باید چکار کرد اگر من باشم راحت ترین روش اینه که وقتی میام ویندوز رو خاموش میکنم یک چک پوینتی از ساعت خود سیستم میزنم و مقداری هم که خود تایمرم برنامه کار کرده رو ذخیره میکنم البته باید این رو به روش معمول ذخیره نکنم و به صورت کد شده بیام ذخیرش کنم پس اینجا ایجاد میکنه که من بیام برای خودم یک الگوریتم هم بنویسم که نحوی ذخیره درو اون تعریف بشه و بقیش مغزم دیگه نمیکشه نوشتن ویندوز راحت تر از فکر کردن به این بود :لبخند:

F.zeinali
یک شنبه 09 بهمن 1390, 22:48 عصر
سلام،
یه پیشنهاد، نظرتون چیه اگه یه فایل عددی با تاریخ تو یه قسمت سیستم یا خود برنامه ایجاد بشه بعد برنامه تو startup سیستم بیاد چک بکنه اگه تاریخ با تاریخی که تو فایل هست یکیه که هیچ اگه نه به عدد یه دونه اضافه بکنه.
تاریخ اولیه رو هم موقع ایجاد فایل توش می زاریم و فرقی هم نمی کنه میلادی باشه یا شمسی یا هرچی چون فقط قراره مثل یه string مقایسه بشه!
اینطوری تنها شانس کاربر برای استفاده بیشتر پیدا کردن این فایل خواد بود!!!


سلام
این راه حل شما اصلا خوب نیست
چون شاید کاربر از برنامه در طول روز بیش از 1 بار استفاده بکنه

modern_amin
دوشنبه 10 بهمن 1390, 09:13 صبح
من اینکارو کردم ، اگر سیستم restore بشه مشکل پیش میاد
در ضمن برای یک جا کاری کردم مثلا کاربر 1000ساعت مفید از برنامه استفاده کرد قفل بشه که اینم جالب نیست!
.
باید دید شرکت های بزرگتر چیکار کردند و بعد تصمیم گیری کرد یا راه نویی رو رفت "انشاالله"
.
خیلی ها قفل سخت افزاری گذاشتند (که خرج داره و امنیت اون 100% نیست و بعضی اوقات سخت افزار دوچاره مشکل میشه ،البته با حجم بالای فروش اونها کاروش منطقی هست و راحت ترین راه هست و مشکل با چندین نصب نداری)
بعضی ها user pass میدهند (که فوق العاده خطرناک هست)
بعضی ها اطلاعات سخت افزار رو بعنوان شناسه میگیرند ولی ممکنه طرف cpu,ram,hard یا ویندوزش عوض بشه که منطقی نیست (من به شخصه شناسه کارخانه بایوس رو میگرفتم که باز منطقی تر از سخت افزارهای دیگه بود)
بعضی با سرکله زدن با فایل ها ،رجیستری ، کپی اونها (restore میشه)
بعضی ها با میزان اطلاعات table دیتابیس ، یک فیلد با identity=true و گام یک میگیرند و بعد میگن مثلا 100تا آدم بیشتر تو table دیتابیس ثبت نشه و به محضی که بشه 101 خطا میده (که روش خوبی هست ولی بدرد نرم افزارهایی زیاد ثبت ندارند نمیخوره)
بعضی ها با تایمر و دفعات اجرا و ..
خیلی ها با چک کردن زمان در اجرا (داستانش زیاده)
بعضی ها با وب (مثل خیلی نرم افزار های خارجی که روش خوبیه فقط اینترنت باید باشه)
و خیلی روشهای دیگه که نیاز به سخت افزار یا امکانات جانبی داره و بعضی جاها جواب میده
+ و...
.
.
خوب نظر شما چیه؟
چیکار باید کرد؟ در ضمن باید بگم نمیخاهیم مشتری رو کلافه کنیم و یطوری فراریش بدیم
ما میخواهیم در لحظه کنترل کامل داشته باشیم و اگر خواستیم نرم افزار رو با اخطار قبلی غیرفعال کنیم یا فعال کنیم (طبق قرارداد و برای جلوگیری از سواستفاده) و یا اینکه اگر کاربر میخواد شیطنت کنه بفهمیم و ..
ویک سوالم داشتم نظرتون و میخواستم در مورد مثلا ویندوز 7 : چگونگی ک.ر.ک شدنش ، چگونه تشخیص جعلی بودن ویندوز توسط ماکروسافت بعد اتصال سیستم به اینترنت (البته خودم یک چیزایی میدونم که هر کد لایسنس فقط یک بار باید استفاده شده باشه و بیشتر از اون به معنی اصلی نبودن اون هست ولی در کل نظرتون چیه )
.
منظر پاسخ دوستان هستم

Alfred188
دوشنبه 10 بهمن 1390, 09:55 صبح
سلام
این راه حل شما اصلا خوب نیست
چون شاید کاربر از برنامه در طول روز بیش از 1 بار استفاده بکنه

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

modern_amin
دوشنبه 10 بهمن 1390, 10:09 صبح
حق با شماست ولی خوب آقای ALFRED مشکل ما همون فایل هست که چطور ذخیره بشه تا بعدا توسط کاربر تغییرنکنه

kp3116
دوشنبه 10 بهمن 1390, 11:17 صبح
دوست عزیز بهتره از همه روشها همزمان استفاده کنی.
هم فیلد دیتابیس.هم فایل و تاریخ سیستم هم رجیستری و هم دیگر موارد.
اینجوری کاربر اگر بخواد یکی رو دستکاری کنه باز مواردی دیگر هست که تضمین میکنه درستی کار رو.
مثلا یک فایل فقط خواندنی مخفی میسازی که به صورت کد روش ذخیره شده.و همزمان با ان در دیتا هم و رجیستری هم ذخیره بشه.
کاربر اگر فایلو حذف کرد برنامه ات با اجرا کردن دوباره ان را بسازد و همان کد ها رو از روی بانک و رجیستری و تاریخ کامپیوتر بنویسه.
یک روش دیگرم هست ویندوز که نصب میشه تعداد روزایی که کار میکنه رو یاداشت میکنه. اگه بتونی کدشو پیدا کنی روش خوبیه

modern_amin
دوشنبه 10 بهمن 1390, 11:26 صبح
از پاسختون ممنونم
آفرین نظر خوبیه
اتفاقا دیروز داشتم حرف شمارو میزدم که دوجا همزمان ذخیره بشه خوبه ، هم sql و هم xml
من تو روش کپی فایل و چک کردن بودن آنها اینکارو کردم یعنی اومدم مثلا وجود 5تا فایل با نام و نوع های مختلف رو چک کردم

m2_farzan
دوشنبه 10 بهمن 1390, 18:07 عصر
سلام،
یه پیشنهاد، نظرتون چیه اگه یه فایل عددی با تاریخ تو یه قسمت سیستم یا خود برنامه ایجاد بشه بعد برنامه تو startup سیستم بیاد چک بکنه اگه تاریخ با تاریخی که تو فایل هست یکیه که هیچ اگه نه به عدد یه دونه اضافه بکنه.
تاریخ اولیه رو هم موقع ایجاد فایل توش می زاریم و فرقی هم نمی کنه میلادی باشه یا شمسی یا هرچی چون فقط قراره مثل یه string مقایسه بشه!
اینطوری تنها شانس کاربر برای استفاده بیشتر پیدا کردن این فایل خواد بود!!!

اگه کاربر برنامه رو نصب کنه و کامپیوتر رو Restart کنه و تاریخ رو به عقب بکشه چی؟ موقع اجرا برنامه چیکار میخواد بکنه؟

asadegha
دوشنبه 10 بهمن 1390, 22:43 عصر
کامپوننت برای کد و دیکد کردن متن فراوونه. یه کامپوننت بگیر، متنتو کد کنه، تو فایل ذخیره کنه. موقع بازیابیشم دیکدش کنه. تهش اینه یه بار خودت مینویسی و تو برنامه های مختلف استفاده میکنی. از الگوریتم های امنیت مثل ssl و ...

واسه تریال کردنم که همون طور که خودتون گفتین بهترین روش استفاده و ادغام چندین روش مختلفه. هر کدوم نقص اون یکی رو پوشش میده.

میتونی یه برنامه مقیم در حافظه بنویسی، یه proccess (که توی task manager نشون میده) بنویسی. باید جلوی بسته شدن این پروسس رو بگیری که کاربر نتونه close یا end task کنه. مثل nod32(من با نود کار میکنم). حالا کار پروسس شمردن ساعت و ذخیره اونه(دوست داری چند جای مختلف و با روش های مختلف ذخیره کن.). واسه اجرای این پروسس هم باید راههای مختلف رو برای اجراش پیدا کنی(حتی المقدور غیر قابل دستکاری باشه)، هر بار که پروسس اجرا شد از ساعت ذخیره شده شروع به شمردن بکنه تا برسه مثلا به همون 720 ساعت مورد نظر.

از اینور ساعت ذخیره میشه، و از طرف دیگه میتونی تاریخ رو هم ذخیره کنی. این پروسس میتونه بررسی کنه که تاریخ سیستم رو کاربر دستکاری کرده یا نه. و بر اساس این میتونی تصمیم بگیری که برنامه باید به تعداد روز های سیستمت اضافه کنه یا نه. تازه این طوری میتونه بررسی کنه که فرضا اگه چند روز سیستم خاموش بود، تعداد روزهای خاموش بودن کامپیوتر رو حساب می کنه و میاد بجای یک روز به تعداد روز هایی که گذشته از تاریخ کم میکنه یا به کانتر شمارنده تعداد روز اضافه میکنه.

asadegha
دوشنبه 10 بهمن 1390, 22:48 عصر
اگه تعداد ساعت کارکرد برنامه برات مهمه هم میتونی توی اون پروسس بررسی کنی که هر بار برنامت اجرا شد، تایمر شروع به کار کنه. و با یه تابع ساده هم میتونی تعداد ساعت کارکرد رو به سال و ماه و روز و ساعت و دقیقه و ثانیه و صدم ثانیه و هزارم ثانیه و ... تبدیل کنی.

asadegha
دوشنبه 10 بهمن 1390, 22:51 عصر
میتونی مثل بعضی از پروسس های موجود قفل کنی که به هیچ عنوان بسته نشن. مثل پروسس services.exe و یه چیز دیگه اینکه شاید بتونی با ایجاد یه سرویس هم این کارارو بکنی. درباره سرویس ها اطلاعات ندارم اماااا.

Alfred188
چهارشنبه 12 بهمن 1390, 22:30 عصر
اگه کاربر برنامه رو نصب کنه و کامپیوتر رو Restart کنه و تاریخ رو به عقب بکشه چی؟ موقع اجرا برنامه چیکار میخواد بکنه؟

اول که تو استارت آپ چک می کنه بعد یه بار هم موقع اجرا
اونوقت باز هم تاریخ یکی نیست و یه عدد اضافه می شه و از عمر برنامه کم می شه که این به ضرر کاربر هست!
ولی در کل منم با این موافقم که چند روش رو با هم انجام بدیم تا هر کدوم نقص داشت اونایه دیگه پوشش بدن

m2_farzan
پنج شنبه 13 بهمن 1390, 17:52 عصر
واقعا این قدر محتاط کاری برای code و decode کردن لازم نیست. اصل کار باید انجام بشه. در مورد بسته نشدن تایمر هم اسمش رو یه چیزی مثل sysmti بگذارید. دیگه معمولا کسی به فکرش نمیاد که این همون تایمر باشه. لاقل اول اصل کار رو باید انجام داد و بعد به جزئیات آن پرداخت.

modern_amin
یک شنبه 16 بهمن 1390, 14:02 عصر
کد و دیکد و برنامه که endProcess نشه فکر خوبیه
.

دوستان تشکر ، نتیجه گیری کنید و راهکار پیشنهاد بدبد؟

میلاد رئیسی
یک شنبه 16 بهمن 1390, 15:04 عصر
سلام . دوستان برای ذخیره تاریخ یا تعداد دفعات اجرای برنامه نیازی به فایل نیست . می تونید از setting استفاده کنید . همه برنامه ها که بانک ندارن!!!
من یک نمونه کد و آموزش استفاده از setting رو میزارم براتون .


لینک اموزش setting (http://www.miladsoft.net/post_4.aspx)

m2_farzan
یک شنبه 16 بهمن 1390, 15:10 عصر
یه لحظه صبر کن. قبل از نتیجه گیری یه نگاهی هم به این مقاله بنداز. همین امروز پیداش کردم.

http://www.codeproject.com/Articles/8783/Use-System-Events-To-Protect-Your-Application-Data

نتیجه گیری هم با خودت دیگه با توجه به شرایط برنامه بهترین راهکار رو انتخاب کن.

Amir Oveisi
یک شنبه 16 بهمن 1390, 17:00 عصر
یکی از روش هایی که میتونید استفاده کنید استفاده از XML Signing هست. تو این روش که یکی از نمونه های Digital Signing به شمار میره، یک فایل XML دارید که به عنوان فایل License استفاده خواهد شد که میشه پارمترهایی مثل تاریخ انقضا یا تعداد کاربران مجاز برای استفاده از برنامه رو داخلش نگهداری کرد. تو این روش از روش رمزنگاری RSA استفاده میشه.
برای اطلاعات کامل این مطلب رو مطالعه کنید.
http://www.codeproject.com/Articles/4940/Using-XML-Digital-Signatures-for-Application-Licen

پ.ن:
بنده خودم در پروژه هام از این روش استفاده می کنم.

موفق باشید

modern_amin
دوشنبه 17 بهمن 1390, 10:48 صبح
نتیجه گیری جمعی باشه بهتره!
.
سوالات من از 3برنامه بالایی بترتیب:
1---استفاده از setting عالیه و بعضی اوقات بعضی از دی ال ال ها بصورت ویزاردی اونجا برای خودشون سطری میسازند و اگر رو این روش کار بشه خیلی عالیه، درضمن ساده هم هست! میشه فقط بگید آیا setting خودش رو به exe میچسبونه؟
2---کار با DoEvent ها هم خوبه ، میشه درمورد DumLogFile.bin بگید چی فهمیدید؟
3---این روش هم خوبه فقط اگر با الگوریتم خودمون رمزنگاری کنیم خیلی بهتره ، دوست عزیز اگر ریزتر کنید و کمی توضیح بدهید ممنون میشیم

Amir Oveisi
دوشنبه 17 بهمن 1390, 10:54 صبح
کار با setting برای این کار اصلا درست نیست چون یک فایل xml میشه که به راحتی قابل جستجو و تغییره. تو مسیر AppData به اسم برنامه یه فولدر ساخته میشه و فایل Setting اونجا قرار می گیره. امنیتش بسیار پایینه.
برای روش xml signing تو لینکی که دادم کامل توضیح داده. لطفا بخونیدش. یکی از مزیت هاش اینه که حتی اگر یک بیت از فایل تغییر کنه عمل sign انجام نمیشه و به راحتی میشه کنترل کرد که برنامه اجرا نشه در این حالت. در ضمن شما الگوریتم خودتون از RSA قدرتمند تر خواهد بود؟