فهرست مطالب
موضوع شماره صفحه
صفحه تقدیر و تشکر 5
چکیده 6
مقدمه 7
فصل اول: قفلهای نرم افزاری و سخت افزاری 9
تاریخچه 10
قفل سخت افزاري ( Hardware lock ) 11
قفل نرم افزاري (Software Lock) 14
1) محدوديت در تعداد كپي(Copy Limited) 14
2) استفاده از ديسكت، در هنگام اجراي برنامه (Disk Required) 15
3) قفل سي دي (اجرا از روي سي دي) 15
انواع قفلهای محافظ نرم افزار از دیدگاهی دیگر 17
قفل سختافزاری 17
▪ قفلهای روی CD 18
▪ قفلهای نرمافزاری بر پایه DLL 19
▪ قفلهای اینترنتی 20
فصل دوم: نحوه ساخت قفلهای نرم افزاری 21
آشنایی با نحوه ساخت قفل های نرم افزاری 22
قفل هاي نرم افزاري و سخت افزاري 22
طريقه استفاده از قفل نرم افزاري 23
آشنايي با نحوه قفل گذاري بر روي يك برنامه 24
آشنايي با روش هاي قفل گذاري و نحوه طراحي آن ها 27
1- قفل گذاري با استفاده از شماره سريال اصلي ديسكت 27
2- قفل گذاري با استفاده از مشخصات سيستم 27
3- قفل با استفاده از موقعيت فايل روي هارد ديسك 28
4- قفل با استفاده از فرمت غير استاندارد 29
5- قفل با استفاده از شماره سريال ساختگي 31
آشنایی با روتين هاي ضد ديباگ Anti Debug Procedures 31
تغيير بردار وقفه ها 33
ج:گيج كردن ديباگر 33
د: كنترل پرچم هاي CPU 34
ه: متوقف ساختن ديباگر 35
روش هاي كد كردن اطلاعات Data Coding Procedures 36
الف: افزودن يك عدد به كد هاي يك فايل 36
ب: XOR كردن كل فايل 36
مثالی از یک برنامه قفل گذار Pascal Source To Learn 37
برنامه شماره (1) 38
برنامه شماره (2) 40
فصل سوم: نحوه ساخت قفلهای سخت افزاری 43
چگونه می توان يك قفل سخت افزاري ساخت ؟ 44
تشریح پورت موازی Parallel 46
اینجا در ابتدا به معرفی پین های این پورت می پردازیم : 47
کد مربوط به قفل سخت افزاری مدار صفحه قبل 52
ارتباط Visual Basic با پورت موازی 57
فصل چهارم: چند پیشنهاد برای بالا بردن ضریب محافظت از نرم افزارها در برابر کپی 62
قفل سخت افزاری برای امنیت نرم افزار 63
۱) استفاده از Special ID در قفل سخت افزاری 63
۲) چک کردن قفل در درون کد نرم افزار بدون Timer 64
۳) چک کردن قفل به صورت تصادفی 65
۴) ذخیره کردن داده های مهم نرم افزار در قفل 65
۵) چک کردن قفل درون یک Thread 66
فصل پنجم: محافظت در برابر كپي گرفتن نرم افزارهای ارائه شده بر روی CD 73
قفل سخت افزاری USB 78
قفل سخت افزاری (Tiny Dongle) قابل اتصال به پورت USB 79
منابع و مواخذ 81
• کتب و مجلات 81
• وب سایتهای اینترنتی 81
چکیده
تحقیق جاری به مقوله محافظت از نرم افزارهای به منظور جلوگیری از کپی برداری غیر مجاز می باشد. در این تحقیق هر چند کوتاه ولی به صورت تخصصی به این مقوله پرداخته شده است و قفلهای نرم افزاری و سخت افزاری و روشهای جلوگیری از کبی برداری بررسی شده و چند نمونه Source Code به عنوان نمونه برای آشنائی هر چه بیشتر قرار داده شده است.
در فصل اول به تعریف انواع روشهای جلوگیری از کپی غیر مجاز نرم افزارها به صورت کلی پرداخته شده است. در فصل دوم این تحقیق به بررسی و ارائه نمونه ای از ساخت قفل های نرم افزاری پرداخته شده است. در فصل سوم این تحقیق به بررسی و ارائه نمونه ای از ساخت قفل های سخت افزاری پرداخته شده است.
در فصل چهارم به بعد به بررسی نحوه جلوگیری از کپی برداری از نرم افزارهایی که بر روی انواع CD ها به بازار عرضه می گردند پرداخته شده است و در انتها نتیجه گیری کلی به عمل آمده است. در ادامه به بررسی روزهاش جلوگیری از کپی برداری خواهیم پرداخت.
مقدمه
همانطور که میدانید در اغلب کشورهای جهان و به ویژه کشورهای صنعتی، قوانین ویژهای جهت حمایت از حقوق مادی یا معنوی پدیدآورندگان نرمافزار (و سایر محصولات یا ایدهها) وجود دارد. این قوانین طیف گستردهای از موضوعات حقوقی را در بر میگیرند و به تولیدکنندگان اجازه میدهند در صورت نیاز از آنها جهت حفظ منافع خود استفاده نمایند. قوانین حمایت از حقوق پدیدآورندگان شامل حق ثبت اختراعات، حق طبع و نشر، نشانهای تجاری، آدرس اینترنتی (Domain) و بسیاری موارد دیگر میشود.
مشکل کپی غیر مجاز نرم افزار، تقریبا در تمامی کشورهای دنیا کم و بیش وجود دارد. هزینه ای که برای تولید یک نرم افزار صرف می شود (شامل زمان، سرمایه گذاری مالی و علمی و ...) گاهی اوقات بسادگی بواسطه کپی غیرمجاز آن، به هدر می رود.
این مشکل در کشوری مثل ایران که حتی قانون کپی رایت و اهرم اجرائی آن هنوز که هنوز است مشخص و فعال نیست قاعدتا نمود بیشتری پیدا خواهد کرد. جالب اینجاست که گاهی اوقات هزینه جزئی محافظت از نرم افزار، آنچنان برای تولید کننده سنگین و بدون توجیه به نظر می رسد که غافل از ضرر هنگفت ناشی از کپی نرم افزار خود می گردد.
فصل اول: قفلهای نرم افزاری و سخت افزاری
تاریخچه
در جنگ جهانی دوم اولین کامپیوترهای قابل برنامهنویسی (Colossus) برای رمزگشایی پیغامهای جنگ ساخته شد. از نظر پیدایش چنین تکنیکی جنگ جهانی بیفایده هم نبوده و برای جلوگیری از دزدیده شدن اطلاعات ارسالی جنگی چنین فناوری نصیب بشر شد.
اطلاعات آماری و دادهها، امنیت را برای ما به ارمغان آوردند. تصور کنید که اگر امنیت در حفظ اطلاعات وجود نداشت و هر کس به هر آماری دسترسی داشت چه بلایی برسر جامعه گذشته و حال میآمد.
«برنادر پارسن» مدیر ارشد بخش فناوری شرکت امنیت نرمافزار BeCryp، در این باره توضیح میدهد که دو روش اصلی رمزگذاری مجزا وجود دارد.
روش رمزنگاری متقارن که به دوران امپراطوری روم برمیگردد و رمزنگاری نامتقارن که قدمت چندانی ندارد. با افزایش درک عمومی نسبت به فعالیتهای رمزشناسی، الگوریتمهای زیادی مبتنی بر مسایل پیچیده ریاضی به این تکنولوژی وارد شد. درنتیجه برای رمزگشایی اینگونه الگوریتمها در اواسط دهه ۷۰ و با ظهور کامپیوتر سرعت رشد الگوریتمها و رمزگشایی پیشرفت کرد و به تدریج استاندارهای این رشته به بازار معرفی شد.
با گذشت زمان روشهایی برای رمزگذاری و جلوگیری از استفاده غیرمجاز از مسائل مهم قلمداد شد و نتیجه آنرا در قالب قفلهای نرمافزاری و سختافزاری میبینیم .
واقعیت این است که اینگونه قفلها هیچ شباهتی با قفلهای ضد سرقت اتومبیل و منزل و یا صندوق پول ندارند اما وظیفه آنها یکسان است، جلوگیری از عدم دزدیده شدن و استفاده غیر مجاز. ناگفته نماند مطمئنا از همان آغاز رمزنگاری، افراد یا ابزارهای مبارز برای این تکنیکها پیدا شده است و پا به پای یکدیگر پیر شدهاند. به همین دلیل هم هست که هر بار مجبوریم روشهای جدید را تجربه کنیم یا بشنویم.
راه جلوگيري از استفاده غيرمجاز از برنامه ها ويا تكثيرغيرقانوني آنها، اصطلا حا به آنها قفل مي زنند. قفل گذاري كلا به دو روش نرم افزاري و سخت افزاري انجام مي شود .
قفل سخت افزاري ( Hardware lock )
چنانچه ازسخت افزارخاصي براي قفل گذاري استفاده شود، به آن قفل سخت افزاري مي گوييم. اين قفلها بعضي به صورت يك رابط ، بر روي پورت پارالل سيستم نصب مي شوند كه البته هر دو نوع آن عملكرد مشابه دارند.
بخش اصلي قفل، از يك حافظه قابل پاك شدن تشكيل شده كه با توجه به نوع و حجم آن، داراي عملكردي متفاوت مي باشد و عمدتا به يكي از دو روش زير عمل مي كند :
الف) روش اول قفل گذاري به اين صورت است كه توليد كننده نرم افزار يك يا چند بايت از اطلاعات را در قفل نوشته و برنامه در هنگام اجرا آن را چك مي كند. در صورتيكه قفل وجود داشته باشد، برنامه به كار خود ادامه مي دهد و اگر قفل وجود نداشته باشد و يا اطلاعات خوانده شده از روي قفل صحيح نباشد، برنامه متوقف شده و با اعلام خطا، از اجراي صحيح، سرباز مي زند. اين نوع قفل ها داراي ساختاري ساده، حافظه اي در حد چند بايت، و قيمتي ارزان هستند. استفاده از اين قفل ها بسيار ساده بوده و نياز به تخصص خاصي ندارد،تنها كافيست كه نرم افزار ويژه قفل را ( كه توسط شركت توليد كننده قفل ارائه شده ) اجرا نمود. در ابتدا كه قفل فاقد اطلاعات است، اول يك كلمه دلخواه، به عنوان كلمه عبور درخواست كرده و سپس با توجه به نوع قفل، يك يا چند كلمه اطلاعات را دريافت و در حافظه قفل ثبت كنيد. در دفعات بعد مي بايست كلمه عبوري كه اولين بار ثبت شده، وارد شود تا بتوان به اطلاعات دروني قفل دسترسي داشت. البته بعد از ورود به برنامه اين كلمه قابل تغيير است.
در هر صورت، پس از ثبت اطلاعات در قفل، توليد كننده نرم افزار، اطلاعات ثبت شده در يك برنلمه چك مي كند كه نحوه چك كردن اطلاعات، با توجه به نوع قفل متفاوت است. در بعضي فقط اطلاعات درون قفل چك مي شود و در بعضي ديگر، در مرحله اول وجود قفل چك شده و در مرحله بعدي، اطلاعات درون آن چك مي شود.
ب) روش ديگر قفل گذاري به اين صورت است كه توليد كننده نرم افزار، بخش كوچكي از برنامه را در حافظه قفل قرار مي دهد كه در اين حالت، چنانچه قفل وجود نداشته باشد برنامه به هيچ وجه، قادر به اجرا و ادامه كار نخواهد بود. اين نوع قفل ها، داراي ساختاري كمي پيچيده، حافظه اي بعضا تا چند كيلو بايت، و قيمتي نسبتَََا گران هستند. استفاده از اين قفل ها، به سادگي نوع قبلي نيست. البته نحوه كلي كار مشابه روش قبلي است. با اجراي نرم افزار ويژه قفل و وارد نمودن كلمه عبور، بايد نام فايلي را كه مي خواهيم بر روي آن قفل بزنيم، مشخص كنيم، تا بخشي از آن در قفل ثبت گردد. البته در بعضي ديگر از اين نوع قفل ها، كه حفاظت بيشتري را انجام مي دهند، مي بايست توسط توليد كننده نرم افزار دقيقا كنترل شود كه چه بخش هايي از فايل بايد در قفل ثبت گردد كه ابته انجام اين كار نياز به تخصص و تجربه كافي دارد، چرا كه بعضا ممكن است كه خطا در انجام كار، باعث بروز اشكال در برنامه توليدي بشود.
چون با اين كار در واقع بخشي از برنامه در قفل ثبت مي گردد، واضح است كه هر قفل فقط براي يك نسخه از برنامه مي تواند مورد استفاده قرار بگيرد و به همين علت كاربرد اين قفل، كمتر است. ضمنا نوع ديگري از قفل ها هستند كه هر دو روش فوق استفاده مي كنند، اما طرفدار چنداني ندارند.
قفل نرم افزاري (Software Lock)
چنانچه از روش ها و ترفند هاي نرم افزاري، براي قفل گذاري استفاده شود، به آن قفل نرم افزاري مي گوييم. قفل هاي نرم افزاري داراي تنوع بيشتري بوده و بعضا از لحاظ طراحي و اجرا سليقه اي و ابتكاري مي با شند. اما مي توان نحوه عملكرد اكثر آنها را، توسط يكي از 3 روش ذيل، تشريح نمود:
1) محدوديت در تعداد كپي(Copy Limited)
در اين حالت برنامه نصب كننده نرم افزار، فضاي مشخصي در ديسك را با روش خاصي مرمت كرده، و تعداد مجاز نسخه برداري را در آن درج مي كند. بدين طريق با هر بار كپي كردن برنامه، يك واحد از اين عدد كم مي شود و هنگامي كه تعداد مجاز آن به صفر رسيد، ديگر نمي توان برنامه را بر روي سيستم نصب نمود.
حال ممكن است اين سوال مطرح شود كه مگر نمي توان پس از نصب برنامه، از آن پشتيباني(Back Up) گرفته و سپس از نسخه پشتيبان نيز، بر روي سيستم ديگري استفاده نمود؟ پاسخ منفي است. زيرا هنگام نصب، اطلاعاتي راجع به سخت افزار سيستم كه مي تواند مثلا شامل نوع قطعات و يا شماره سريال قطعات باشد، در جايي، در محدوده قفل ذخيره مي شود و از اين پس هر بار در هنگام اجراي برنامه، اين اطلاعات به دقت چك مي شود و در صورت هرگونه تغيير، برنامه اجرا نمي شود.
2) استفاده از ديسكت، در هنگام اجراي برنامه (Disk Required)
در اين حالت، ديسكت مورد نظر، يا به روش خاصي فرمت مي شود و سپس در هنگام اجرا، اطلاعات روي آن بررسي مي شود، و يا اينكه قسمتي از ديسكت را بصورت فيزيكي و عمدي خراب مي كنند و در اينجا، در واقع همان صدمه اي كه به عمد، بر سطح ديسكت وارد شده است، به عنوان قفل و محافظ نرم افزار عمل مي كند. از اين پس براي انتقال برنامه از يك سيستم به سيستم ديگر، اين فلاپي مانند قفل سخت افزاري عمل مي كند و مي بايست مختصات آن توسط برنامه تاييد شود و چنانچه اين فلاپي در درايو نباشد، برنامه اجرا نخواهد شد.
3) قفل سي دي (اجرا از روي سي دي)
با متداول شدن سي دي ويا لوح فشرده، روش جديدي در قفل گذاري ابداع شد و آن اجراي برنامه از روي سي دي است. در اين حالت برنامه هنگام اجرا، به سي دي رجوع كرده و نقاط خاصي از آن را چك مي كند. اين نقاط بخش هايي هستند كه به صورت فيزيكي علامت گذاري شده اند ودر واقع به نوعي صدمه ديده اند و معمولا اين خرابي با تابش اشعه ليزر انجام مي شود. به اين ترتيب به اصطلاح نقاط معيني از سي دي ليزرسوز مي شود. اين نقطه يا نقاط، به عنوان قفل سي دي عمل مي كند و از عمل تكثير يا كپي برداري و همچنين استفاده غير مجاز از آن جلوگيري به عمل مي آورد.
در خاتمه سوالي كه در مورد سه روش فوق الذكر مطرح است، اين است كه آيا مي توان قبل از نصب، از ديسكت ها و سيدي هاي قفل گذاري شده كپي تهيه كرد و سپس آنها را نصب كرد؟
پاسخ منفي است، زيرا همانگونه كه اشاره شد، يا بخشي از ديسكت و يا تمامي ان، به روش خاصي فرمت مي شود كه قابل كپي برداري نيست و يا اينكه محل ونقاطي كه بر روي ديسكت و يا سي دي، به صورت فيزيكي و عمدي صدمه ديده اند، اجازه كپي برداري را نمي دهند و مانع از انجام اين كار مي شوند.
انواع قفلهای محافظ نرم افزار از دیدگاهی دیگر
قفل سختافزاری
یک قطعه الکترونیکی سختافزاری است که به یکی از درگاه های (Port) کامپیوتر وصل میشوند ( LPT , COM , USB ) و نرمافزار در صورت وجود قفل شروع به کار میکند. شکستن اینگونه قفلها نسبت به قفلهای دیگر سختتر است. این گونه قفلها گران هستند و به دلیل قیمت بالایشان قابلیت استفاده در هر نرمافزاری را ندارند، زیرا در اکثر موارد قیمت قفل چندین برابر قیمت نرمافزار است.
همچنین شرکتی که از این گونه قفلها استفاده میکند هیچ اطلاعاتی از مشتری و کاربر نهایی دریافت نمیکند. از طرفی فروش آنلاین محصولاتی که از قفل سختافزاری استفاده میکنند محدود است زیرا تولیدکننده مجبور به ارسال فیزیکی قفل میباشد. در واقع نحوه عملکر قفلهای سختافزاری به دو روش است:
۱) سازنده نرمافزار یک یا چند بایت از اطلاعات را در قفل سختافزاری (Dongle) نوشته و برنامه در هنگام اجرا شدن برنامه آن را چک میکند. در صورتی که قفل وجود داشته باشد، برنامه به کار خود ادامه میدهد در غیر اینصورت برنامه متوقف شده و با اعلام خطا، از ادامه کار باز میایستد. این نوع قفلها دارای ساختاری ساده، به همراه حافظهای در حد چند بایت، و قیمتی ارزان هستند. در بعضی از اینگونه قفلها فقط اطلاعات درون قفل چک میشود و در بعضی دیگر، در مرحله اول وجود قفل چک شده و در مرحله بعدی اطلاعات درون آن چک میشود.
۲) روش دیگر قفلگذاری این امکان را به سازنده برنامه میدهد تا بخش کوچکی از برنامه را در حافظه قفل قرار دهد، در این حالت چنانچه قفل وجود نداشته باشد برنامه به هیچ وجه قادر به اجرا نخواهد بود. این نوع قفلها، دارای ساختاری کمی پیچیدهتر از قفلهای دسته اول دارند و حافظهای بعضا بیشتر و قیمتی نسبتَََا گرانتر.
▪ قفلهای روی CD
در این روش اطلاعات به صورت خاصی روی CD ذخیره میشوند که کپی CD به روشهای شناخته شده ممکن نباشد.
اینگونه قفلها ارزان هستند ولی به سادگی میتوان آنها را شکست (حتما با نرمافزارهایی مانند Clone CD آشنا هستید). برای شکستن اینگونه قفلها حتی نیازی ندارید که متخصص کامپیوتر باشید.
در واقع مسابقهای میان کسانی که اینگونه قفلها را تولید میکنند و کسانی که نرمافزارهای کپی CD را مینویسند در جریان است. اگر نسخه فعلی نرمافزار Clone CD شما بعضی CD ها را که از اینگونه قفلها دارند را کپی نمیکند، کافی است منتظر نسخه جدید آن باشید.
مشکل دیگر قفلهای روی CD وابستگی آنها به CD میباشد. چون در این روش نمیتوان از CD کپی کرد، اگر CD خراب شود هیچ راهی به غیر از خرید دوباره نرمافزار نیست.
احتمال خراب شدن CD با گذشت زمان بسیار بالاست چون برای چک قفل برای هر اجرا نیاز به CD میباشد. به همین دلیل کاربران نهایی تمایلی به خرید محصولاتی که به این روش قفلگذاری شدهاند ندارند.
این قفلها نیز مانند قفلهای سختافزاری هیچ گونه اطلاعاتی از مشتری و کاربر نهایی دریافت نمیکند و از طرفی فروش آنلاین محصولاتی که از این قفلها استفاده میکنند محدود است زیرا تولید کننده مجبور به ارسال فیزیکی CD میباشد.
▪ قفلهای نرمافزاری بر پایه DLL
استفاده از قفلهای موجود که بر پایه DLL هستند بسیار مشکل است و نیاز به برنامهنویسی و تغییر در کد برنامه دارد، در این روش قفلگذار با استفاده از یک زبان برنامهنویسی توابعی که مربوط به قفل است را از DLL فراخوانی مینماید.
در واقع مسئولیت اصلی راهاندازی و نصب اینگونه قفلها به عهده برنامهنویس است. برای نمونه استفاده کننده باید اطمینان حاصل کند که آیا DLL مورد استفاده عوض شده یا خیر. معمولا هکرها با عوض کردن DLL به راحتی قفل نرمافزار را باز میکنند. یکی دیگر از عیبهای مهم اینگونه قفلها این است که کد نرمافزار حتما باید موجود باشد.