آشنایی با نحوه ساخت قفل های نرم افزاری

مشاهده : 196
آشنایی با نحوه ساخت قفل های نرم افزاری کامپیوتر و موبایل
تا وقتی که قانون Copyright نرم افزار در ایران به صورت کامل اجرا نمی شود، لزوم پرداختن به بحث قفل های نرم افزاری بیشتر احساس می شود.در این مقاله سعی بر این است تا علاوه بر آشنایی با انواع قفل های نرم افزاری و بررسی اختلاف آن ها با قفل های سخت افزاری، بتوانیم به […]
تا وقتی که قانون Copyright نرم افزار در ایران به صورت کامل اجرا نمی شود، لزوم پرداختن به بحث قفل
های نرم افزاری بیشتر احساس می شود.
در این مقاله سعی بر این است تا علاوه بر آشنایی با انواع قفل های نرم افزاری و بررسی اختلاف
آن ها با قفل های سخت افزاری، بتوانیم به عنوان طراح یک قفل نرم افزاری از محصولات نرم افزاری خودمان
حمایت کنیم.
ضمنا علاوه بر آشنایی با مفاهیم فوق، نوشتن روتین های ضد دیباگ (Debug) و همچنین نحوه کد کردن اطلاعات نیز
تا حدی مورد بررسی قرار خواهد گرفت.
● قفل های نرم افزاری و سخت افزاری قفل های نرم افزاری به برنامه هایی گفته می شود که کنترل
کپی نمودن آنها فقط از طریق نرم افزار و بدون نیاز به سخت افزار اضافی، قابل انجام باشد.
قفل های سخت افزاری به برنامه هایی اطلاق می شود که کنترل کپی نمودن آنها از طریق سخت افزار اضافی
(که بر روی سیستم نصب می گردد) صورت می پذیرد.
با توجه به توضیحات فوق می توان به تفاوت قفل های سخت افزاری و نرم افزاری پی برد.
قفل های سخت افزاری با اضافه کردن یک سخت افزار جدید به کامپیوتر (اغلب از طریق ارتباط با پورت چاپگر)
برنامه خود را کنترل می کنند.
برنامه قبل از اجرا، ابتدا با مراجعه به آدرس سخت افزار نصب شده (اضافه شده با استفاده از دستور Port
) به سخت افزار مورد نظر خود مراجعه کرده و در صورت یافتن آن، تست های مختلف اعم از تست
رمز، خواندن اطلاعات و …
را انجام داده و در نهایت می تواند تصمیم گیری نماید.
اما در قفل های نرم افزاری برنامه، بدون نیاز به سخت افزار اضافی و با کنترل رسانه ذخیره سازی، تصمیم
گیری می کند.
ضمنا لازم به توضیح است که هدف از طراحی قفل های نرم افزاری/سخت افزاری این نیست که هیچکس توانایی شکستن
(باز کردن ) آن را ندارد بلکه هدف بالا بردن سطح کنترل کپی های غیر مجاز تا حد ممکن می
باشد.
● طریقه استفاده از قفل نرم افزاری در برنامه مورد نظر با توجه به نوع کاربرد برنامه (کوچک و قابل
کپی بر روی یک دیسکت, تحت شبکه و …
) می توانیم از انواع روش هایی که جهت حفاظت از نرم افزار در نظر داریم (و متعاقبا توضیح داده
خواهد شد) استفاده کنیم.
اما مساله قابل بحث این است که چه قفلی را انتخاب نمائیم؟ جواب این سوال متغییر و وابسته به شرایط
زیر می باشد: الف) اعتقاد طراح نرم افزار به اینکه حتما باید کاربر آن را خریداری نماید تا از امکانات
آن مطلع گردد.
در این حالت قفل نرم افزاری در ابتدای شروع به کار برنامه کنترل می گردد حتی طراح می تواند در
مواقع حساس نیز قفل را مجددا کنترل کند و یا حتی در حالتی که طراح واقعا سخت گیر باشد، می
تواند در زمان های مشخصی نیز از وجود قفل اطمینان حاصل نماید (مثلا هر ۴ ثانیه یک بار).
البته در این حالت طراح باید روشی را که جهت کنترل قفل استفاده می کند، نیز در نظر بگیرد.
ب) اعتقاد طراح نرم افزار به این که کاربر می تواند از نرم افزار به عنوان نسخه نمایشی نیز استفاده
کند.
طراح در این حالت می بایست در مکان های خاصی از برنامه، قفل را کنترل کند.
مثلا در یک برنامه حسابداری می توان تمام بخش های سیستم را آزاد گذاشت (یعنی در بخش های برنامه قفل
وجود نداشته باشد) اما در گزارشگیری ها قفل گذاشت.
یعنی در صورتی که کاربر مایل به استفاده از امکانات گزارشگیری سیستم باشد، قفل نرم افزاری در خواست گردد.
مزیت این روش بر روش قبلی این است که دیگر نیاز به طراحی نسخه نمایشی خاصی جهت مشاهده کاربران وجود
ندارد.
● آشنایی با نحوه قفل گذاری بر روی یک برنامه الف) طراح به سورس برنامه دسترسی دارد.
در این حالت طراح پس از انتخاب روش قفل گذاری، کافی است آن را به زبان مورد نظر خود پیاده
سازی نموده و در برنامه خود بگنجاند.
(که مکان های قرار دادن قفل در عنوان قبلی توضیح داده شد). ب) طراح (مجری پروژه) به سورس برنامه دسترسی
ندارد.
گاهی اوقات به یک سری برنامه های ارزشمندی برخورد می کنیم که فاقد قفل هستند و بنا به دلایلی نیاز
به قفل گذاری وجود دارد.
(البته این حالت بیشتر در کشور ما و چند کشور دیگر که در آن ها قانون Copyright اجرا نمی شود،
کاربرد دارد). جهت تزریق قفل به این گونه برنامه ها، نیاز به آشنایی کامل با ساختار فایل های اجرایی (EXE,
COM, SYS, …) وجود دارد چرا که باید برنامه ای طراحی کنیم تا همانند یک ویروس کامپیوتری به فایل اجرایی
مشخصی بچسبد.
البته جهت این کار بهترین زبان برنامه نویسی، اسمبلی می باشد.
(به دلیل توانایی دخالت در روند اجرای برنامه و برای مطالعه بیشتر در مورد برنامه نویسی اسمبلی به سایر مقالات
سایت میکرو رایانه مراجعه نمایید) البته در رابطه با نحوه نوشتن این گونه برنامه ها، روش های زیادی وجود دارد
که خود بحثی مجزا را می طلبد و از حوصله این مقاله خارج است.
ضمنا برای بالا بردن سطح امنیت برنامه، لازم است تا یکسری کد های ضد دیباگ نیز در برنامه گنجانده شوند.
کدهای ضد دیباگ، دستوراتی به زبان اسمبلی هستند که در حالت اجرای عادی برنامه، هیچ تغییری در روند اجرا نمی
گذارند بلکه در مواقعی که برنامه توسط دیباگرها اجرا می گردند، قادر هستند تا از اجرای آن جلوگیری نمایند.
با اضافه کردن کد های ضد دیباگ به ابتدای برنامه (یا قبل از کنترل قفل) می توان احتمال دست کاری
در برنامه را پائین آورد.
(نحوه نوشتن کد های ضد دیباگ در زیر آورده شده است). ● آشنایی با روش های قفل گذاری و نحوه
طراحی آن ها ۱) قفل گذاری با استفاده از شماره سریال اصلی دیسکت همانطور که می دانید، سیستم عامل جهت
هر دیسکت یک شماره سریال واحد (UNIQUE) اختصاص می دهد، بطوریکه شماره سریال هر دو دیسکت با هم یکی نیستند.
بنابراین همین خود یک راه تشخیص دیسکت کلید (قفل) می باشد.
جهت استفاده از این قفل می بایست شماره سریال دیسکت را خوانده و سپس در داخل برنامه آنرا کنترل نمائیم.
یک راه ساده جهت خواندن شماره سریال، اجرای دستور VOL بصورت شکل زیر است: VOL >>C:DOSLCK.TMP بعد با باز کردن
فایل LCK.TMP می توانیم به محتویات آن دسترسی پیدا کنیم.
راه دیگر مراجعه به Boot Sector جهت کنترل قفل می باشد.
ضریب اطمینان این قفل در مورد دیسکت ها ۵% ۲% بوده و در رابطه با هارد دیسک ۶۰% ۵۰% می
باشد.
دلیل این اختلاف این است که در حالت قفل دیسکتی، با عمل کپی Boot Sector، قفل بر روی دیسکت دیگر
قرار خواهد گرفت اما در رابطه با هارد دیسک اینکار به سادگی انجام پذیر نیست.
۲) قفل گذاری با استفاده از مشخصات سیستم در این نوع قفل نرم افزاری، برنامه قبل از اجرا ابتدا مشخصات
سیستم را خوانده (که اینکار از طریق مراجعه به بخش های خاصی از حافظه و یا مراجعه به اطلاعات BIOS
انجام می شود). سپس آن را با فایلی که قبلا توسط نویسنده نرم افزار بر روی کامپیوتر کپی گردیده، مقایسه
می کند و در صورت عدم برابری، اجرای برنامه پایان می پذیرد.
این نوع قفل هنوز هم در بسیاری از برنامه ها استفاده می گردد، اما نکته قابل ذکر این است که
جهت اطمینان بیشتر به قفل، لازم است فایل حاوی مشخصات بصورت کد شده نوشته شده باشد تا امکان دستکاری آن
توسط قفل شکنان به حداقل ممکن برسد.
درصد اطمینان این نوع قفل ۷۵% ۶۵% می باشد.
۳) قفل با استفاده از موقعیت فایل روی هارد دیسک این نوع قفل فقط بر روی هارد دیسک قابل استفاده
بوده و به این صورت است که فایل اجرایی به موقعیت خود بر روی هارد حساس می باشد چرا که
قبل از اجرا ابتدا موقعیت خود را از روی سکتورهای ROOT خوانده و سپس شماره کلاستر اشاره گر به خودش
را بدست می آورد، سپس آن را با شماره کلاستری که قبلا توسط برنامه نویس بر روی یکی از فایل
های برنامه (ممکن است به صورت کد شده باشد) قرار داده شده، مقایسه کرده و در صورت برابر بودن اجرا
می شود.
این نوع قفل نسبت به قفل قبلی (شماره ۲) استفاده کمتری دارد، چون در صورتی که برنامه از روی بخشی
از هارد به ناحیه دیگری انتقال یابد، اجرا نخواهد شد و این از نظر کاربر بسیار ناپسند می باشد.
(ضمنا امکان Defra, Scandisk, و …
نیز وجود ندارد چرا که شماره کلاستر اشاره گر به فایل تغییر خواهد کرد). ضریب اطمینان این نوع قفل نیز
۸۰% ۷۰% می باشد.
۴) قفل با استفاده از فرمت غیر استاندارد این شیوه یکی از رایج ترین قفل های نرم افزاری است که
هنوز هم بصورت جدی مورد استفاده قرار می گیرد.
برخی از دلایل اهمیت آن عبارتند از: امکان استفاده از روش های متفاوت در این روش راحتی و سرعت زیاد
به هنگام استفاده از آن وجود ضریب اطمینان بالا و انعطاف پذیری زیاد آن عدم وجود نرم افزار خاصی جهت
باز کردن این نوع از قفل ها همان طور که می دانید سیستم عامل جهت دسترسی به اطلاعات یک دیسکت
از فرمت خاصی (۱۸ سکتور در هر تراک) استفاده می کند، اما اگر یه تراک به صورت غیر استاندارد فرمت
شود، (مثلا ۱۹ سکتور در تراک) سیستم عامل دیگر توانایی استفاده از سکتورهای غیرمجاز را نخواهد داشت (برای مطالعه بیشتر
دراین مورد به سایر مقالات سایت میکرو رایانه مراجعه نمایید) و بنابراین تمام نرم افزارهای تحت سیستم عامل مزبور نیز
از سکتورهای مخفی استفاده نکرده، در نتیجه امکان کپی برداری از آنها بسیار ضعیف است.
پیشنهاد ما استفاده از همین روش جهت طراحی قفل است.
به طوری که تراک آخر دیسک را مثلا بهصورت یک سکتوری و با شماره ۲۰ فرمت کنید.
سپس جهت کنترل دیسکت به سکتور فوق مراجعه کرده و در صورت وجود آن کنترل و اجرای برنامه را پی
بگیرد.
البته غیر از تغییر شماره سکتور می توان از اندازه غیر مجاز نیز استفاده کرد، یعنی بجای اینکه سکتورها را
بصورت ۵۱۲ بایتی فرمت کنیم، از اندازه ۱۰۲۴, ۲۰۴۸ و …
استفاده کنیم.
( قفل نرم افزاری Copy Control که معروفترین در نوع خود می باشد، از همین روش استفاده می کند). این
قفل فقط جهت فلاپی دیسک قابل استفاده می باشد و در صد اطمینان در این روش حدود ۹۵% ۸۵% می
باشد.
۵) قفل با استفاده از شماره سریال ساختگی این روش قفل گذاری که قویترین قفل می باشد، بصورت مخلوطی از
روش های ۱ و ۴ می باشد.
یعنی ابتدا تراک خاصی را بصورت غیر استاندرد فرمت کرده و سپس اطلاعات خاصی را درون آن قرار می دهند
(شماره سریال فرضی).
این قفل فقط جهت فلاپی دیسک قابل استفاده بوده و ضریب اطمینان آن حدود ۹۸% ۹۰% می باشد.
● آشنایی با روتین های ضد دیباگ Anti Debug Procedures همان طوری که توضیح داده شد، روتین های ضد دیباگ
جهت جلوگیری از اجرای برنامه های دیباگر و یا حداقل جهت مشکل تر کردن کار دستکاری قفل توسط قفل شکنان،
استفاده می شود.
در زیر چند روش به عنوان مثال آورده شده است: الف) غیر فعال کردن وقفه ها جهت جلوگیری از اجرای
مرحله به مرحله ( Trace کردن ) برنامه: می توان وقفه های کنترلر ۸۳۵۹ را غیر فعال ساخت.
(در مورد وقفه ها بحث های نسبتا مفصل و کاملی در سایت میکرو رایانه انجام شده برای مطالعه بیشتر دراین
مورد به سایر مقالات سایت میکرو رایانه مراجعه نمایید) آدرس این کنترلر ۲۱h بوده و IRQ های ۷ ۰ را
کنترل می کند IRQ۱ همان وقفه مربوط به صفحه کلید می باشد.
پس با غیر فعال کردن این وقفه می توان صفحه کلید را غیر فعال نمود.
طریقه استفاده: CS:۰۱۰۰ E۴۲۱ IN AL,۲۱ CS:۰۱۰۲ ۰C۰۲ OR AL,۰۲ CS:۰۱۰۴ E۶۲۱ OUT ۲۱,AL ب) تغییر بردار وقفه ها یکی
از روش های ساده و راحت جهت ضد دیباگ کردن برنامه ها تغییر برداری است که دیباگر از آن استفاده
می کند.
(۰۳ ) حتما بخاطر بسپارید که در پایان برنامه دوباره آدرس بردار وقفه تغییر داده شده را بازیابی کنید.
طریقه استفاده: CS:۰۱۰۰ EB۰۴ JMP ۰۱۰۶ CS:۰۱۰۲ ۰۰۰۰ ADD [BX SI],AL CS:۰۱۰۴ ۰۰۰۰ ADD [BX SI],AL CS:۰۱۰۶ ۳۱C۰ XOR AX,AX CS:۰۱۰۸ ۸EC۰
MOV ES,AX CS:۰۱۰A ۲۶۸B۱E۰C۰۰ MOV BX,ES:[۰۰۰C] CS:۰۱۰F ۸۹۱E۰۲۰۱ MOV [۰۱۰۲],BX CS:۰۱۱۳ ۲۶۸B۱E۰E۰۰ MOV BX,ES:[۰۰۰E] CS:۰۱۱۸ ۸۹۱E۰۴۰۱ MOV [۰۱۰۴],BX CS:۰۱۱C ۲۶C۷۰۶۴C۰۰۰۰۰۰
MOV Word Ptr ES:[۰۰۰C],۰۰۰۰ CS:۰۱۲۳ ۲۶C۷۰۶۴E۰۰۰۰۰۰ MOV Word Ptr ES:[۰۰۰E],۰۰۰۰ ج) گیج کردن دیباگر این راه یکی از قویترین تکنیک
های ضد دیباگ بوده که در آن به وسط یک دستور، پرش می شود و اینکار باعث قفل کردن (Hang)
دیباگر خواهد شد.
طریقه استفاده: CS:۰۱۰۰ E۴۲۱ IN AL,۲۱ CS:۰۱۰۲ B۰FF MOV AL,FF CS:۰۱۰۴ EB۰۲ JMP ۰۱۰۸ CS:۰۱۰۶ C۶۰۶E۶۲۱۰۰ MOV Byte Ptr [۲۱E۶],۰۰
CS:۰۱۰B CD۲۰ INT ۲۰ د) کنترل پرچم های CPU این روش در برابر دیباگرها بسیار مفید می باشد و به
این صورت است که ابتدا پرچم Trace از CPU را خاموش کرده و در بین برنامه آنرا کنترل کنیم.
در صورتی که این پرچم روشن شده باشد، مشخص است که دیباگر در پشت صحنه در حال اجراست.
طریقه استفاده: CS:۰۱۰۰ ۹C PUSHF CS:۰۱۰۱ ۵۸ POP AX CS:۰۱۰۲ ۲۵FFFE AND AX,FEFF CS:۰۱۰۵ ۵۰ PUSH AX CS:۰۱۰۶ ۹D POPF
و در بین برنامه از دستورات ذیل استفاده کنید: CS:۱۵۲۳ ۹C PUSHF CS:۱۵۲۴ ۵۸ POP AX CS:۱۵۲۵ ۲۵۰۰۰۱ AND AX,۰۱۰۰
CS:۱۵۲۸ ۷۴۰۲ JZ ۱۵۲C CS:۱۵۲A CD۲۰ INT ۲۰ ه) متوقف ساختن دیباگر این روش باعث متوقف شدن دیباگر می شود
که با اجرای دستور ساده INT ۰۳ می توان این کار را انجام داد.
طریقه استفاده: CS:۰۱۰۰ B۹۶۴۰۲ MOV CX,۰۲۶۴ CS:۰۱۰۳ BE۱۰۰۱ MOV SI,۰۱۱۰ CS:۰۱۰۶ AC LODSB CS:۰۱۰۷ CC INT ۳ CS:۰۱۰۸ ۹۸ CBW
CS:۰۱۰۹ ۰۱C۳ ADD BX,AX CS:۰۱۰B E۲F۹ LOOP ۰۱۰۶ ***** ● روش های کد کردن اطلاعات Data Coding Procedures الف) افزودن
یک عدد به کد های یک فایل در این روش جهت کد کردن یک فایل، ابتدا آن را خوانده و
سپس یک مقدار خاص، مثلا ۲۰ را به مقدار هر بایت فایل اضافه می کنیم.
این یکی از ساده ترین روش ها بوده و نسبتا کارایی خوبی نیز دارد.
جهت خارج کردن فایل از حالت کد شده (Decode) نیز، کافیست مقدار فوق را از تمام بایت های فایل کم
کنیم.
ب) XOR کردن کل فایل در این روش نیز پس از خواندن کل فایل، تمام بایت های آن را با
رشته کاراکتری یا عدد ثابت خاصی XOR کرده و سپس مقدار جدید را در فایل حاصل ضبط می نمائیم.
جهت خارج کردن فایل از حالت کد شده، دقیقا عکس آن را انجام می دهیم.
tebyan.net
2011-08-12 / گردآوری:
گزارش خطا در خبر
نظر خود را بنویسید - نظرات کاربران (۰)
فیلم پرشین وی
برای رشد کسب و کار خود، فالوور بخرید !! برای رشد کسب و کار خود، فالوور بخرید !!
خرید فالوور اینستاگرام، بهترین روش برای افزایش فالوور ارزان
سوژه های روز رو این جا ببینید !
فال روزانه
تعبیر خواب
با دنیای بی نظیر و پر از خلاقیت گوشی های موبایل همراه شوید
گوشی دست دوم بخریم یانه؟ (نکات مهم خرید گوشی دست دوم)
کمی در رابطه با تاریخچه و اطلاعات گوگل کروم بخوانیم
کیفیت و وضوح بالای تلویزیون ۵۵ اینچ سونی به همراه قیمت
تجربه فروش بیشتر با طراحی سایت فروشگاهی
اندروید ۱۰ جدیدترین سیستم عامل گوشی های هوشمند را بیشتر بشناسید
دوربین آیفون ۱۱ را بیشتر بشناسیم
سونی اکسپریا ۵ پرچم دار کوچک سونی
نحوه فهمیدن آنفالو شدن در اینستاگرام توسط سایر کاربران
آیپد پروی جدید و ویژگی های منحصربفردش
آیفون ۱۱ چه چیزهایی برای موفقیت لازم دارد؟
حذف شدن کیبورد گوشی ها با هوش مصنوعی
تعداد لایک در اینستاگرام نمایش داده شود یا نه؟
راه‌ رفتن معلولین با آسانی با شورت ورزشی رباتیک
اسم آیفون آیا از گوشی های اپل حذف خواهد شد؟
بازی‌های رایگان iOS مخصوص فصل تابستان
logo-samandehi