PDA

View Full Version : چطور امنیت نسخه trial برنامه را تامین کنم؟



iekrang
دوشنبه 11 خرداد 1394, 08:51 صبح
سلام دوستان
برنامه ای دارم که نیاز داره به مشتری نسخه تست بدهم و نمیخواهم برای نسخه تست هم از قفل سخت افزاری استفاده کنم.چطور میتونم یه نسخه 30 روزه بدهم و امنیت برنامه را تامین کنم؟
میخواهم در برابر تغییر تاریخ سیستم،عوض کردن ویندوز و شگردهایی مثل این منقضی بشه.
ممنون میشم اگر پیشنهادی دارید بفرمایید.

محمد رضا فاتحی
دوشنبه 11 خرداد 1394, 09:13 صبح
در برابر عوض کردن ویندوز اگه سیستم به جای معتبر تری مانند اینترنت وصل نباشه فکر نکنم بشه کاری کرد.

Javad_raouf
دوشنبه 11 خرداد 1394, 09:27 صبح
اگر تعصب ندارید که نسخه Trial بر اساس بازه تاریخی باشه راهکار بهتری هست که من از اون استفاده می کنم
البته این مشروط بر اینه که نرم افزارتون Databaseی باشه
راهی که من استفاده می کنم اینه که بررسی می کنم تا زمانی که تعداد رکوردهای جدول اصلی دیتابیس کمتر از 200 تا است نرم افزار بدون نیاز به قفل سخت افزاری کار می کنه و زمانی که رکوردها به 200 میرسه نرم افزار دیگه کار نمی کنه:لبخند: به همین راحتی
مزیتشم اینه که مشتری حتی ویندوزشم عوض کنه مجبوره دوباره از همین دیتابیس استفاده کنه :چشمک: و هیچ جوری نمیشه دورش زد
-----------------------------------------------------------
اما اگر روی تاریخی بودن نسخه تریال تعصب دارید یا نرم افزار دیتابیس نیست
راهکارهایی وجود دارد که قطعی نیست
به عنوان مثال:
هر دفعه نرم افزار اجرا می شود تاریخ سیستم را در رجیستری ذخیره کنید البته قبلش بررسی کنید که تاریخ سیستم جدید تر یا همان تاریخ قبلی درون رجیستری باشد وگرنه معلوم میشه کاربر تاریخ سیستم رو برده عقب:متفکر:
ولی اینم با تعویض ویندوز قابل پیچوندنه که باز میشه مثلا علاوه بر رجیستری توی درایو هایی غیر از درایو ویندوز هم به صورت یک فایل مخفی تاریخ رو ذخیره کرد
و هزار تا راه دیگه که هیچ کدومشون صد در صدی نیستن
----------------------------------------------------------
یک راه دیگه هم همونطور که فرمودن اینه که استفاده از نسخه تریال رو بدون اتصال به اینترنت اجازه ندی و برنامه رو طوری بنویسی که برای استفاده از نسخه تریال اتصال به اینترنت اجباری باشه و آنلاین تاریخ رو از سایت های معتبر بگیری

iekrang
دوشنبه 11 خرداد 1394, 09:37 صبح
ممنون از پاسختون
خودم به محدودیت در ثبت رکورد فکر کرده بودم اینم یه مشکلی داره اینکه با یه اسکریپت میتونه جدول و آی دی را ریست کنه و دوباره شروع کنه 200 تا رکورد ثبت کنه

محمد رضا فاتحی
دوشنبه 11 خرداد 1394, 09:49 صبح
ممنون از پاسختون
خودم به محدودیت در ثبت رکورد فکر کرده بودم اینم یه مشکلی داره اینکه با یه اسکریپت میتونه جدول و آی دی را ریست کنه و دوباره شروع کنه 200 تا رکورد ثبت کنه
خوب اینطوری که اطلاعات قبلیش از بین میره اگهه برای مشتریتون اطلاعاتش مهمه که اینکار رو نمی کنه

Javad_raouf
دوشنبه 11 خرداد 1394, 09:58 صبح
ببخشید رک میگم مگه مشتریتون مغز خر خورده باشه که اطلاعاتش رو Delete کنه:لبخند:
هدفم از زدن پست این نبود که اینو بگم اینو آقای فتاحی هم فرمودن
می خواستم بگم یکی از مزیت های این روش اینه که اگر کاربر مثلا ماه اول وقت نکنه از نرم افزار استفاده کنه نرم افزارش از کار نمیفته و بینهایت زمان وقت داره تا کار با سیستم رو شروع کنه
حالا این مزیتش چیه؟ مزیتش اینه که نرم افزار تریال از کار نمیفته مگر دقیقا وقتی که کاربر معتاد سیستم شده:شیطان:

NasimBamdad
دوشنبه 11 خرداد 1394, 16:41 عصر
بهترین روش اینه که نرم افزار رو ناقص بدی . یعنی کامل تمام امکانات رو نده

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

ebrahim.rayatparvar
دوشنبه 11 خرداد 1394, 17:28 عصر
سلام مهندس
برای اینکه مشتری برنامه رو تست کنه و به قدرت برنامه پی ببره و ایمان بیاره که کار با این برنامه چقدر کارش رو راجت میکنه به نظرم برای یه مدت باید برنامه رو چک کنه و من با نظر مهندس جواد موافقم اینجوری دیگه مشکل نصب ویندوز رو هم نداری.

Javad_raouf
دوشنبه 11 خرداد 1394, 20:51 عصر
از دیتابیس استفاده نکن و از متغییر استفاده کن . به صورتی که نرم افزار وقتی بسته بشه دیگه متغییر ها خالی شدند و تمام !
این کار عملی نیست داداش به هزار دلیل...!
همینقدر بگم که همه کد هایی که ما می نویسیم کار با دیتابیس هست حالا طبق گفته شما باید علاوه بر طراحی دیتابیس طراحی متغیر ها رو هم داشته باشیم و کلی هم کد برای کار با این متغیر ها بزنیم:عصبانی++:
حداقل اگر می گفتید هر دفعه هنگام ورود به نرم افزار تریال ابتدا دیتابیس تخلیه بشه منطقی تره و قابل انجام
ولی اینم به درد نمی خوره چون کاربر هم اعتمادش رو به سیستم از دست میده و هم معتاد نمیشه


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

ghasem110deh
شنبه 06 تیر 1394, 00:15 صبح
ببخشید رک میگم مگه مشتریتون مغز خر خورده باشه که اطلاعاتش رو Delete کنه:لبخند:
هدفم از زدن پست این نبود که اینو بگم اینو آقای فتاحی هم فرمودن
می خواستم بگم یکی از مزیت های این روش اینه که اگر کاربر مثلا ماه اول وقت نکنه از نرم افزار استفاده کنه نرم افزارش از کار نمیفته و بینهایت زمان وقت داره تا کار با سیستم رو شروع کنه
حالا این مزیتش چیه؟ مزیتش اینه که نرم افزار تریال از کار نمیفته مگر دقیقا وقتی که کاربر معتاد سیستم شده:شیطان:

سلام به همه ...
این قضیه معتاد کردن مشتری ، خلاف اصول مشتری مداریه ... ولی مجبوریم دیگه :شیطان:
آقا جواد ، واسه فعال کردنش (برنامه) چطور عمل میکیند ؟
.
.
.
اون چند خط کد رو میگم که جدول مورد نظر رو چک میکنه !

TeacherMath
شنبه 06 تیر 1394, 10:54 صبح
برنامه advanced installer نسخه تریل درست می کنه. بهتره با اون درست کنید.

ghasem110deh
شنبه 06 تیر 1394, 10:59 صبح
برنامه advanced installer نسخه تریل درست می کنه. بهتره با اون درست کنید.

احتمالا با توجه به تاریخ این کار رو میکنه !؟
یا چیز دیگه ای ...

Javad_raouf
شنبه 06 تیر 1394, 11:08 صبح
سلام به همه ...
این قضیه معتاد کردن مشتری ، خلاف اصول مشتری مداریه ... ولی مجبوریم دیگه :شیطان:

آقا جواد ، واسه فعال کردنش (برنامه) چطور عمل میکیند ؟
.
.
.
اون چند خط کد رو میگم که جدول مورد نظر رو چک میکنه !
مثلا فرض کنید برنامه حسابداری نوشتید
مسلما جدول اصلی جدول سند هست دیگه
یک همچین کدی می نویسیم:
Select COUNT(*) As Count From TblSanad
بعد نتیجه رو چک می کنیم به عنوان مثلا اگر تعداد بیشتر از 200 رکورد بود نرم افزار رو می ترکونیم:لبخند:

TeacherMath
شنبه 06 تیر 1394, 11:09 صبح
به نظرم از ریجستری استفاده میکنه

ghasem110deh
شنبه 06 تیر 1394, 11:23 صبح
مثلا فرض کنید برنامه حسابداری نوشتید
مسلما جدول اصلی جدول سند هست دیگه
یک همچین کدی می نویسیم:
Select COUNT(*) As Count From TblSanad
بعد نتیجه رو چک می کنیم به عنوان مثلا اگر تعداد بیشتر از 200 رکورد بود نرم افزار رو می ترکونیم:لبخند:

دقیقا همون کد منظورم بود ...
که چطور بعد از فعالسازی اون کد شمارش رو غیر فعال مینید که دیگه شرط را لحاظ نکنه ؟

Javad_raouf
شنبه 06 تیر 1394, 11:47 صبح
دقیقا همون کد منظورم بود ...
که چطور بعد از فعالسازی اون کد شمارش رو غیر فعال مینید که دیگه شرط را لحاظ نکنه ؟
سادست دیگه داداشی
شما باید ببینی روش فعال سازیت چیه
بعد با یک IF می تونی بررسی کنه که اگر تابع بررسی Activition مقدار true برگردوند قسمت بررسی تعداد رکورد ها دیگه اجرا نشه
اما اگر منطورتون اینه که بهترین روش برای ساخت کد فعالسازی چیه به نظر من بهترین روش اینه که بر اساس سریال CPU و یک الگوریتم کدینگ، یک کد فعالسازی منحصر به فرد بسازید
اگر سرچ کنید تاپیک زیاده

ghasem110deh
شنبه 06 تیر 1394, 11:52 صبح
نه میخوام رو همین روش شمارش سطرهای جداول دیتابیس کار کنم ...
منتها رو چند تا جدول (بیکاریه دیگه)

----

البته میشه از ترکیب هر دو هم استفاده کرد :متفکر:

ebrahim.rayatparvar
شنبه 06 تیر 1394, 12:51 عصر
یه راه حل دیگه اینکه کد آقا جواد رو پروسیجر کنی و رمانی که مشتری خواست از برنامه استفاده کنه یه آپدیت میفرستی که برنامه فعال بشه که کارش باشه کد پروسیجر رو تغییر بده و مقدار برگشتی رو تغییر بده.
مثلان تو پروسیجر مینویسی اگه تعداد سطر ها بالای 200 شد مقدار false رو برگردون وگرنه true نه اینکه بیام مقدار تعداد سطر رو برگردونم که تو برنامه این عمل چک کردن رو انجام بدیم اون زمون باید exe هم تغییر کنه ولی اگه تو برنامه فقط شرط true بودن بزاریم حالا با مقدار برگشتی پروسیجر قبل و بعد خواستن مشتری میشه بازی کرد البه این یه راه کار ساده بود حالا ببینید دوستان چه راه کار دیگه ای میدن که حذفه ای باشه.

ghasem110deh
پنج شنبه 01 مرداد 1394, 23:51 عصر
بجای اینکه از پروسیجر استفاده کنم ، یه dll درست کردم !
واسه فعالسازی هم یه dll که دیگه این شرط رو نداره جایگزین میکنیم ... روش درستی هست !؟

Javad_raouf
شنبه 03 مرداد 1394, 08:48 صبح
نه پروسیجر روش درستیه نه DLL
شما اصلا نباید کد برنامت رو رو عوض کنی عزیز دلم
در روش پروسیجر کاربر میتونه خیلی راحت پروسیجر رو عوض کنه یا اینکه دیتابیس Full رو با دیتابیس Trial عوش کنه
در روش DLL هم که خیلی راحته یک بار که DLL خوبه رو به یک نفر بدی اون می تونه به همه بده.....
برای فعالسازی برنامه که نباید برنامه خودتو کرک کنی:عصبانی++:
ببین روال کار اینجوریه:
از سیستم طرف یک کد بر می داری(مثلا شماره سریال CPU) به عنوان کد قفل
بعد توی برنامت یک الگوریتمی پیاده سازی می کنی که بر اساس این کد قفل یک کد کلید بسازه
مثلا فرض کن الگوریتمت اینجوریه که کد قفل رو ضربدر 8 می کنی میشه کد کلید
حالا زمانی که برنامه اجرا میشه نرم افزار کد قفل رو به کاربر نشون میده و میگه کد کلید رو وارد کن
بعد کاربر اگر نرم افزار رو خریده باشه کد قفل رو برای شما می خونه و شما باید کد کلید رو بر اساس اون کد قفل بهش بدی: مثلا کد قفلش 7 هست برای شما می خونه شما با نرم افزار KeyGen که مخصوص خودته این رو تبدیل می کنی به کد کلید که میشه 56 (چون در حالت ساده فرض کردیم الگوریتم تبدیل قفل به کلید فقط ضربدر 8 هست)
بعد کاربر 56 رو وارد نرم افزارش می کنه و نرم افزار بدون هیچ مشکلی برای همیشه کار می کنه
تا اینجاش میشه روش ثبت نرم افزار
حالا وقتی کاربر نرم افزار رو نخریده کد کلید رو نداره و در قسمت فعال سازی بر روی دکمه نسخه آزمایشی کلیک می کنه
اینجاست که نرم افزار چک می کنه ببینه رکوردهای دیتابیس چند تا است و اگر مثلا کمتر از 100 تا بود فرم اصلی رو باز می کنه وگرنه خطا می ده که مدت زمان نسخه آزمایشی تمام شده است.
من خودم از این روش استفاده می کنم و هیچ جوری نمیشه دورش زد
به همین راحتی به همین خوشمزگی
فکر کنم توضیحات کامله اگر متوجه نشدید دوباره بخونید

amir_pro
شنبه 03 مرداد 1394, 11:59 صبح
نه پروسیجر روش درستیه نه DLL
شما اصلا نباید کد برنامت رو رو عوض کنی عزیز دلم
در روش پروسیجر کاربر میتونه خیلی راحت پروسیجر رو عوض کنه یا اینکه دیتابیس Full رو با دیتابیس Trial عوش کنه
در روش DLL هم که خیلی راحته یک بار که DLL خوبه رو به یک نفر بدی اون می تونه به همه بده.....
برای فعالسازی برنامه که نباید برنامه خودتو کرک کنی:عصبانی++:
ببین روال کار اینجوریه:
از سیستم طرف یک کد بر می داری(مثلا شماره سریال CPU) به عنوان کد قفل
بعد توی برنامت یک الگوریتمی پیاده سازی می کنی که بر اساس این کد قفل یک کد کلید بسازه
مثلا فرض کن الگوریتمت اینجوریه که کد قفل رو ضربدر 8 می کنی میشه کد کلید
حالا زمانی که برنامه اجرا میشه نرم افزار کد قفل رو به کاربر نشون میده و میگه کد کلید رو وارد کن
بعد کاربر اگر نرم افزار رو خریده باشه کد قفل رو برای شما می خونه و شما باید کد کلید رو بر اساس اون کد قفل بهش بدی: مثلا کد قفلش 7 هست برای شما می خونه شما با نرم افزار KeyGen که مخصوص خودته این رو تبدیل می کنی به کد کلید که میشه 56 (چون در حالت ساده فرض کردیم الگوریتم تبدیل قفل به کلید فقط ضربدر 8 هست)
بعد کاربر 56 رو وارد نرم افزارش می کنه و نرم افزار بدون هیچ مشکلی برای همیشه کار می کنه
تا اینجاش میشه روش ثبت نرم افزار
حالا وقتی کاربر نرم افزار رو نخریده کد کلید رو نداره و در قسمت فعال سازی بر روی دکمه نسخه آزمایشی کلیک می کنه
اینجاست که نرم افزار چک می کنه ببینه رکوردهای دیتابیس چند تا است و اگر مثلا کمتر از 100 تا بود فرم اصلی رو باز می کنه وگرنه خطا می ده که مدت زمان نسخه آزمایشی تمام شده است.
من خودم از این روش استفاده می کنم و هیچ جوری نمیشه دورش زد
به همین راحتی به همین خوشمزگی
فکر کنم توضیحات کامله اگر متوجه نشدید دوباره بخونید

آقا جواد راه حلتون درست. اگه کاربر برنامه را کپی کرد و با کد قفل به من داد و من نصب کردم اون وقت چی؟ برا منم کد کلید میسازه. به نظرتون نباید با یک تعاملی مثلا مک طرفا برداشت و از اونم تو برنامه استفاده کرد؟

NasimBamdad
شنبه 03 مرداد 1394, 12:06 عصر
نه پروسیجر روش درستیه نه DLL
شما اصلا نباید کد برنامت رو رو عوض کنی عزیز دلم
در روش پروسیجر کاربر میتونه خیلی راحت پروسیجر رو عوض کنه یا اینکه دیتابیس Full رو با دیتابیس Trial عوش کنه
در روش DLL هم که خیلی راحته یک بار که DLL خوبه رو به یک نفر بدی اون می تونه به همه بده.....
برای فعالسازی برنامه که نباید برنامه خودتو کرک کنی:عصبانی++:
ببین روال کار اینجوریه:
از سیستم طرف یک کد بر می داری(مثلا شماره سریال CPU) به عنوان کد قفل
بعد توی برنامت یک الگوریتمی پیاده سازی می کنی که بر اساس این کد قفل یک کد کلید بسازه
مثلا فرض کن الگوریتمت اینجوریه که کد قفل رو ضربدر 8 می کنی میشه کد کلید
حالا زمانی که برنامه اجرا میشه نرم افزار کد قفل رو به کاربر نشون میده و میگه کد کلید رو وارد کن
بعد کاربر اگر نرم افزار رو خریده باشه کد قفل رو برای شما می خونه و شما باید کد کلید رو بر اساس اون کد قفل بهش بدی: مثلا کد قفلش 7 هست برای شما می خونه شما با نرم افزار KeyGen که مخصوص خودته این رو تبدیل می کنی به کد کلید که میشه 56 (چون در حالت ساده فرض کردیم الگوریتم تبدیل قفل به کلید فقط ضربدر 8 هست)
بعد کاربر 56 رو وارد نرم افزارش می کنه و نرم افزار بدون هیچ مشکلی برای همیشه کار می کنه
تا اینجاش میشه روش ثبت نرم افزار
حالا وقتی کاربر نرم افزار رو نخریده کد کلید رو نداره و در قسمت فعال سازی بر روی دکمه نسخه آزمایشی کلیک می کنه
اینجاست که نرم افزار چک می کنه ببینه رکوردهای دیتابیس چند تا است و اگر مثلا کمتر از 100 تا بود فرم اصلی رو باز می کنه وگرنه خطا می ده که مدت زمان نسخه آزمایشی تمام شده است.
من خودم از این روش استفاده می کنم و هیچ جوری نمیشه دورش زد
به همین راحتی به همین خوشمزگی
فکر کنم توضیحات کامله اگر متوجه نشدید دوباره بخونید


این روشا خوبه ، اما اگه من سورس شما رو Decompile کنم ، تمام این توابع رو حذف می کنم و شما هم خبر دار نمیشی


1- از CallBack همیشه استفاده کنید
2- سورس کدتون رو مبهم کنید با نرم افزار های مبهم ساز

ghasem110deh
شنبه 03 مرداد 1394, 12:51 عصر
برای فعالسازی برنامه که نباید برنامه خودتو کرک کنی:عصبانی++:

آقا حرفم رو پس میگیرم ... dll بی dll



1- از CallBack همیشه استفاده کنید

یکم بیشتر توضیح میدین !
من همین رو متوجه شدم ازش : در زبان برنامه نویسی C# (یا VB.NET) می توان Callback را با استفاده از function pointer یا delegate پیاده سازی کزد.
چجوری تو نسخه تریال و فعالسازی ازش استفاده کنیم ؟



2- سورس کدتون رو مبهم کنید با نرم افزار های مبهم ساز

دات نت رفلکتور خوبه ؟

NasimBamdad
شنبه 03 مرداد 1394, 13:14 عصر
آقا حرفم رو پس میگیرم ... dll بی dll



یکم بیشتر توضیح میدین !
من همین رو متوجه شدم ازش : در زبان برنامه نویسی C#‎ (یا VB.NET) می توان Callback را با استفاده از function pointer یا delegate پیاده سازی کزد.
چجوری تو نسخه تریال و فعالسازی ازش استفاده کنیم ؟



دات نت رفلکتور خوبه ؟

دات نت رفلکتور که میاد سورس شما رو DeCompile می کنه . یه سرچ بزن نرم افزار زیاده

توی قسمت های مختلف نرم افزارت یه الگوریتم بذار که نسخه قانونی از غیر قانونی نرم افزارت رو مشخص کنه

بستگی به خودت داره . مثلا زمان لاگین یا لود کردن بعضی گزارشات ، یا در قالب Thread

Javad_raouf
سه شنبه 06 مرداد 1394, 09:45 صبح
آقا جواد راه حلتون درست. اگه کاربر برنامه را کپی کرد و با کد قفل به من داد و من نصب کردم اون وقت چی؟ برا منم کد کلید میسازه. به نظرتون نباید با یک تعاملی مثلا مک طرفا برداشت و از اونم تو برنامه استفاده کرد؟
عرض منو خوب متوجه نشدید یا متن رو خوب نخوندید
منم اینجا همینو گفتم دیگه:

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

این روشا خوبه ، اما اگه من سورس شما رو Decompile کنم ، تمام این توابع رو حذف می کنم و شما هم خبر دار نمیشی



1- از CallBack همیشه استفاده کنید
2- سورس کدتون رو مبهم کنید با نرم افزار های مبهم ساز
فرمایش شما صحیحه ولی یک قضیه دیگه است
شما هر کدی هم بنویسی اگر طرف بتونه برنامت رو هک کنه هیچ کار نمی تونی بکنی
ما بحثمون روی نحوه ساخت نسخه تریال بود
در هر صورت حف شما صحیحه و تاپیک هم در این باره زیاده

===========================================

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