1398-12-03 22:02 برنامه بعد از مدت زمانی غیر فعال شود
esmaelgandomi

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

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

خودم اومد یه تایمر گذاشتم یه datetime دادم به برنامه با تاریخ فرضا 15روزه ( تاریخ سیستم فرد هم میلادی ) و اطلاع زیادی در این موارد نداره )
این شکلی که وقتی نرم افزار باز بشه تایمر شروع به کار کنه تا زمانی که به تاریخ مورد نظر برسه وقتی که رسید خوب کار می کنه و قسمت های که می خوام غیر فعال میشه اما مشکل فعال سازی دوبارشونه

ببینید همچین قفل رو تا الان نزدم که تایم دار باشه وقتی به زمان مورد نظر می رسه نرم افزار غیر فعال میشه وقتی کاربر رو textbox عدد مورد نظر رو وارد کنه برنامه فعال میشه ولی همین که برنامه رو ببندم بازش کنم چون تایمر دوباره فعال میشه دوباره برنامه غیر فعال میشه و این روند ادامه دار میشه

تو دکمه تعریف کردم تایمر غیر فعال بشه اما نه نمی شه

بعد تو ویندوز فورم زدم اما همچنان هست

چند راهی رو زدم اما همان آش همان کاسه راستش وقتی خوب بهش فکر می کنم می بینم این روند طبیعتا باید همین جوری ادامه دار باشه و به این شکل با این حالت تایمر همیشه باید فعال باشه اگه نمونه برنامه یا لینکی دارید که می تونه کمکم کنه ممنون میشم راهنمایی کنید
1398-12-11 22:23
حاجی شریفی
مؤسس سایت
 
سلام
نکته اول) برای نسخه های زمان دار بطور معمول از تایمر به معنی واقعی آن استفاده نمیشود ولی به مفهوم داشتن زمان و تشخیص پایان و... از کلمه تایمر استفاده میشود.
حالا دقیق نمیدانم منظورتان از تایمر ، شیء Timer است یا منظورتان مفهوم داشتن تایم است.

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

خوب اجازه دهید به مسائل فنی تر برسیم:

به طور کلی برای این منظور باید تاریخی که نرم افزار قرار است Expire شود را جایی ذخیره کنید و داشته باشید و در هر شروع اجرا مقدار تاریخ ذخیره شده را با تاریخ موجود مقایسه کنید و آن را در بالا آمدن و کارکرد برنامه لحاظ کنید.
( به عنوان مکمل میتوان تعداد اجرای برنامه را هم نگهداری کرد ، مثلا برای یک برنامه 15 روزه میتوان 1500 بار اجرا را فرض کرد ! ولی در این حالت مشکل زیادی با محل ذخیره سازی این عدد و بروزرسانی آن پیش خواهد آمد و قابل دور زدن خواهد بود ...)

پس واضح است که باید در کدفعال سازی و یا بهتر از آن، در فایل فعال سازی تاریخ نهایی کارکرد نرم افزار را ذخیره کنید و به برنامه ارسال کنید، تا برنامه آن را گرفته و ذخیره کند و در اجرا های بعدی معیار قرار دهد.
1398-12-11 22:24
حاجی شریفی
مؤسس سایت
 
روش اول:
اگر بخواهید کد-فعال سازی به کاربرتان بدهید، باید از الگوریتم های رمزنگاری متقارن مانند DES و AES استفاده کنید
تاریخ (و Hash ای از سریال سخت افزاری رایانه و...) را میتوانید با این شیوه رمز کنید و مثلا در قالب یک کد متنی 26 الی 32 کاراکتری برای کاربر ارسال کنید
( با توجه به تعداد کم کاراکترها در این روش، میتوان کدها را پیامک کرد یا تلفنی(صوتی) برای کاربر ارسال کرد و... )
ولی این شیوه با دسترسی به سورس کدهای شما و خواندن کدها و متوجه شدن آنها قابل دور زدن است.
یعنی هرکاری کنید، بالاخره کلید رمزنگاری متقارن در کدهای شما وجود دارد و قابل استخراج است و میتواند برنامه Key-Generator ای برای آن ساخت.
خلاصه
=====
برنامه از سخت افزار کاربر یک کد هش تهیه و به کاربر میدهد تا آن را به شما بدهد
( این باعث میشود کد فعال سازی نهایی روی سایر رایانه ها کار نکند )
ClientApp->HardwareSerial->Hash->Send to Company/Programmer

سرور یا برنامه کدساز شما سریال را با تاریخ مخلوط و رمزمیکند و تحویل کاربر میدهید
ServerApp->HardwareSerialHash+ExpireDate->DESEncrypt->ActiveCode

برنامه رمز را بازکرده و کد سخت افزار و تاریخ را خارج میکند و با اعداد رایانه جاری تطبیق میدهد
ActiveCode->DESDecrypt->HardwareSerialHash+ExpireDate
1398-12-11 22:25
حاجی شریفی
مؤسس سایت
 
روش دوم:
کدهای تولید شده در این روش بلندتر و طولانی تر هستند و با SMS و تلفن (خواندن کد) و... قابل استفاده نیستند.
در این روش باید به جای کدها ، یک فایل کوچک (یکی دو کیلوبایتی) جابجا شود.
داده حجم بسیار کمی دارد ولی نمیتوان خواند یا پیامک کرد.

در این روش بجای الگوریتم DES یا AES از الگوریتم نامتقارنی مانند RSA استفاده میشود که امنیت بسیار بالاتری دارد
حتی دو فایل رد و بدل شده هم میتواند Text عادی و قابل خوانده شدن باشد.
مثلا در یک خط فایل خیلی شفاف و راحت قید شود که برنامه تا چه تاریخی کار خواهد کرد.
در انتها فایل RSA-Sign میشود.
فایل فعال سازی میتوانید چیزی شبیه این باشد:
<hardserial>xxxxxxxxx</hardserial>
<expiredate>2020-03-20</expiredate>
<rsasign>xxxxxxxxxxxxx</rsasign>


کاربر میتواند اطلاعات داخل فایل را ببینید ولی اگر تغییر دهد، امضا تطبیق نمیکند و در واقع نمیتواند آنها را تغییر دهد!
حتی برنامه خودتان در رایانه کاربر هم کلید امضاء کننده را ندارد.
یعنی اگر سورس کامل برنامه کلاینت را به کسی بدهید، باز هم نمیتواند الگوریتم را بشکند.

تنها راه کرک این برنامه تغییر کدهای exe و حذف دستورات چک کننده لایسنز و کامپایل مجدد برنامه است.
که به سطح دانش بالاتری برای کرک نیاز دارد.
یعنی کرک کننده باید exe شما را replace کند و if های لایسنز را درآن حذف کند.
ولی برای قفل فوق نمیتوان Key-Generator ساخت.

خلاصه
=====
برنامه از اطلاعات سخت افزار کاربر یک فایل تهیه و به کاربر میدهد تا آن را به شما بدهد
( این باعث میشود کد فعال سازی نهایی روی سایر رایانه ها کار نکند )
ClientApp->HardwareSerial->Hash file->Send to Company/Programmer

سرور یا برنامه کدساز شما سریال را با تاریخ مخلوط و امضاء میکند و تحویل کاربر میدهید
ServerApp->HardwareSerialHash+ExpireDate->RSASignWithPrivateKey->ActiveFile

برنامه رمز را بازکرده و کد سخت افزار و تاریخ را خارج میکند و با اعداد رایانه جاری تطبیق میدهد
ActiveFile->RSAValidationWithPublicKey->HardwareSerialHash+ExpireDate


برای الگوریتم نامتقارن RSA و مفاهیم رمزنگاری و امضاء و... و نمونه کدهای CSharp میتوانید تاپیک زیر را مرور کنید.
/Forum/Home/Topic/14-RSA-X509-Cryptography