افسونگری Close
تبلیغات در بلاگ اسکای

طریقه گذاشتن تصویر در پنجره ویندوز
با یک مثال طریقه گذاشتن تصویر در پنجره ویندوز را آموزش می دهیم
ما در این مثال می خواهیم تصویر پنجره درایو D را تغییر دهیم
نوت پت را باز کنید و متن زیر را درون آن بنویسید

[{BE098140-A513-11D0-A3A4-00C04FD706EC}]
iconarea_image=D:\photo.jpg

سپس آن را با نام Desktop.ini در درایو D ذخیره کنید
سپس عکس مورد نظرتان را در مسیر D:\photo.jpg قرار دهید

طریقه گذاشتن تصویر در System Properties
برنامه نوت پت را باز کنید و متن زیر را درون آن بنویسید

[General]
manufacturer=آموزش رایانه
Model=دانلود رایگان برنامه های قرآنی
[Support information]
line1="ترفند های ریجستری"
line2="آموزش کامپیوتر "
line3="دانلود رایگان برنامه و آهنگ"
line4="منبع : http://sys.blogsky.com"
.
.
.
lineN="شما می توانید N خط اضافه کنید"

سپس آن را با نام Oeminfo.ini در مسیر زیر ذخیره کنید
C:\WINDOWS\system32

سپس تصویری در اندازه ی 172*172 و با فرمت BMP خلق کنید و آن را با نام Oemlogo.bmp در مسیر زیر ذخیره کنید
C:\WINDOWS\system32

کلید ویندوز و پاوز را همزمان فشار دهید و یا روی my computer کلیک راست کرده سپس Properties را فشار دهید
اگر کارتان را درست انجام داده باشید تصویرتان را خواهید دید

طریقه عوض کردن تصویر دسکتاپ
در مکان خالی از دسکتاپ کلیک راست کنید و کلید Properties را فشار دهید
در پنجره باز شده ، سربرگ Desktop را انتخاب کنید سپس کلید Browse را فشار دهید سپس تصویر مورد نظر را انتخاب و کلید OK را بزنید در انتها کلید OK را فشار دهید
دانلود رایگان برنامه تغییر خودکار تصاویر رایانه


در notpad متن زیر را بنویسید و با نام  toolbar.reg ذخیره کنید.
و به جای آدرس وارد شده آدرس تصویر خودتان را وارد کنید 

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar]
"backbitmapshell"="C:\\SYS\\blogsky\\image.BMP"

تغییر تصویر بوت ویندوز 

1- در ابتدا نیاز به یک فایل تصویری  به نام BMP با رزولوشن 640*480 پیکسل، عمق رنگ 16 رنگ نیاز دارید.
2- فایل تصویری مورد نظر خود را در پوشه اصلی ویندوزتان یا همان SystemRoot که در حالت پیش فرض C:\windows می باشد با نام Boot.bmp کپی نمایید.
3- از منوی Start گزینه run  و سپس در این پنجره cmd.exe را تایپ نمایید و روی Ok کلیک نمایید.
4-در cmd متن زیر را تایپ نمایید و در پایان کلید enter را فشار دهید.
attrib -r -s -h c:\boot.ini
5- سپس notepad c:\boot.ini  را تایپ نمایید و کلید Enter را فشار دهید.
6- در این مرحله فایل boot.ini  برای شما باز خواهد شد در این فایل به دنبال خط
 [operating systems] بگردید. در پایین این خط با عبارتی شبیه زیر روبرو خواهید شد :
multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Professional" /fastdetect
شما باید در انتهای این خط عبارت /bootlogo /noguiboot را اضافه نمایید. در نتیجه عبارت نهایی بصورت زیر خواهد بود:
multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Professional" /fastdetect /bootlogo /noguiboot
7- فایل boot.ini را ذخیره نمایید و برنامه notpad را نیز ببندید.
8- در پنجره cmd متن زیر را تایپ نمایید و کلید enter را فشار دهید.
attrib +r +s +h c:\boot.ini

نکات مهم:
1- دستور attrib از دستورات قدیمی DOS است که خصوصیات فایل از قبیل مخفی، سیستمی یا فقط خواندنی را تغییر می دهد. دستور را آنطور که هست تایپ نمایید.
2-فایل Boot.ini از مهمترین فایلهای سیستمی ویندوز XP می باشد در صورتیکه تغییرات اشتباهی بدهید ویندوز شما بالا نمی آید. در نتیجه بی جهت به خطوط این فایل  دست نزنید.
3-برای اطمینان خاطر از خطی که تغییر می دهید یک کوپی بگیرید و در خط زیر آن قرار دهید
4-دستور /noguiboot که در فایل boot.ini استفاده شد باعث می شود که میله پیشرفت (Progress bar) روی تصویر ظاهر نشود


طریقه ساخت تصویر با این مشخصات :1- در Run بنویسید mspaint.exe تا برنامه پینت اجرا شود
2- در منو بار به آدرس زیر بروید       Image>Attributes>Width
3-  اعداد زیر را وارد کنید     Width=640           Height=480    


4-تصویر مورد نظر را بکشید
5-تصویر را با نوع زیر ذخیره کنید 


16 color bitmap

افزودن آیکون برنامه ی مورد نظر به Control Panel :
جهت افزودن آیکون نرم افزار مورد نظر در Control Panel به شیوه ی زیر عمل کنید .

ادامه مطلب ...

معرفی وبلاگ به موتورهای جستجوگر

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

ادامه مطلب ...

.:: قفل های اکتیو ایکس ::.
تعریف قفل های اکتیو ایکس :
در واقع یک اکتیو ایکس که مانع اجرای برنامه در شرایط خاصی شود را قفل اکتیو ایکس مینامند. این نوع قفل مانند سایر کامپوننتهای برنامه نویسی است . برنامه نویس به سادگی آن را بر روی فرم برنامه خود قرار میدهد و با تنظیم پارامترها و خصوصیات آن ،‌ سبب فعالیت آن میشود. این اکتیو ایکس قبل از قرارگرفتن فرم اصلی در حافظه ، شروع به کار میکند و اگر برای اولین بار اجرا میشود بر حسب اندازه حافظه ، شماره های سریال و سرعت پردازنده کد ویژه ای تولید میکند این کد تولید شده وابسته به خصوصیات کامپیوتر است بنابراین کد برگشتی این اکتیو ایکس بر روی هر سیستمی متفاوت خواهد بود. پس از ارائه کد ، کد معادل آن را از کاربر در خواست میکند. کاربر با ارائه کد تولید شده به شرکت تولید کننده نرم افزار کد معادل آن را دریافت میکند.این کد را کاربر یا از طریق تلفن یا از طریق پست الکترونیکی و یا اینترنت دریافت میکند در صورتیکه کد معادل دریافت شده پس از کد شدن معادل کد ارائه شده باشد یا به عبارتی دیگر کد ارائه شده از طرف کامپیوتر مکمل کد دریافت شده از شرکت باشد اکتیو ایکس اجازه میدهد که برنامه بدون اشکال شروع به کار کند. کاربر نیز میتواند بارها از این کد بر روی کامپیوتر خود(کامپیوتری که کد دریافت کرده) استفاده کند. پس از ورود کد، این کد در مکانی از سیستم مثلا ریجستری یا یک فایل بصورت کد شده قرار میگیرد و هر بار کامپیوتر برنامه را اجرا کند به جای درخواست کد از کاربر ، کد را از رجیستری یا فایل پس از کدیابی مورد استفاده قرار میدهد. نقاط ضعف: 1.قفلهای اکتیو ایکس نیاز به دریافت کد از شرکت دارند یعنی اینکه باید کاربر حتما به نحوی با شرکت تولید کننده تماس بگیرد و نمیتواند برنامه را پس از خرید بلافاصله استفاده کند . خصوصا دسترسی به تلفن و اینترنت ضروری است. 2. قفلهای اکتیو ایکس تنها بر روی یک سیتسم اجرا میشوند و باید برای دریافت کد برای هر کامپیوتر اقدام شود.(دشواری در نصب های تعداد بالا) 3.قفلهای اکتیو ایکس ممکن است با فرمت کردن ، پارتیشن بندی تعغیر یابد که نمیتواند شرکت دقیقا حدس بزند که این قفل برای این سیستم بوده یا واقعا تعغیر کرده . در اکثر قفلهای ساخته شده تعغیرات این کد بسیار مشاهده شده است. 4. با صدمه دیدن قطعه ای در کامپیوتر و یا تعویض یک قطعه برنامه تصور میکند که سیتسم تعغیر یافته است مثلا با تعغیر حافظه سیستم. نقاط قوت: 1- امنیت بالا برای برنامه نویس از نظر کپی برداری با تعداد بالا. 2- دارای بیشترین امنیت نسبت به سایر قفلهای نرم افزای یا سی دی 3- سازگاری بسیار بالا نسبت به سایر قفلهای نرم افزاری. 4- قابلیت آمار گیری فروش برنامه توسط شرکت ارائه کننده کد معادل نحــوه ایجاد قفل برای برنامه نویسان ویژوال بیسیک: اول اینکه این برنامه باید بصورت اکتیو ایکس تولید شود که بتوان از آن به سادگی استفاده نمود. قدم اول برای تولید آن این است که برنامه قبل از فرم اصلی بار شود. قدم دوم ارائه یک کد تولید شده برای سیستم است این بخش تقریبا هسته برنامه را تشکیل میدهد بنابراین در مورد این قسمت توضیحات بیشتری ارائه میکنم کدی که اکتیو ایکس برای یک کامپیوتر خاص تولید میکند باید منحصر بفرد باشد یعنی نباید در سیستمهای دیگر مشابه آن پیدا شود همچنین مهمترین نکته ای که باید برای تولید این کد در نظر گرفته شود این است که با تعغیرات کوچک درون سیستم تغییر نکند بدین منظور میتوان آن را به قسمتهای مختلف کامپیوتر بنا بر نوع انتظار قفل تغییر دهیم مثلا به شماره سریال هارد یا مثلا به مقدار حافظه سیستم یا به نوع کارت گرافیکی و... و یا به مجموع آنها وابسته کنیم. بسیاری سوال کردند در ویژوال بیسیک چگونه میتوان شماره سریال هارد را بدست آورد؟ برای این منظور میتوان از API ها استفاده نمود. یک API خوب برای این منظور GetVolumeInformation است قدم سوم ایجاد کد مکمل است . بصورتهای گوناگون میتوان برای کد تولید شده کد مکمل ایجاد کرد اولین روش استفاده که ساده ترین است استفاده از یک فرمول است مثلا یک مثال ساده این است که اگر کد تولید شده 15663 بود برنامه با جمع کردن اعداد زوج و فرد این عدد و تقسم نمودن و ضرب در 5586 یک کد تولید کند ایراد اینگونه روشها در قابل کشف بودن کد میباشد مگر اینکه واقعا یک ریاضیدان باشید. روش دیگر تولید کد های تصادفی مثلا در ویژوال بیسیک بوسیله Randomize Timer و تشکیل یک بانک اطلاعاتی است که کد معادل و کد ارایه شده برای همه آنها را در آوریم این روش بسیار اطمینان بخش تر است. دیگر تمام است بسادگی یک قفل حرفه ای ساخته ایم . آنهم با ساده ترین زبان دنیا ویژوال بیسیک اگر آن را با برنامه های دیگر تولید کنید که دیگر محشر است ! با کمی رنگ و لعاب دادن به اکتیو ایکس خودمان و تولید همان پایگاه داده و تعیین پارامترهای گوناگون مثلا محدود کردن در تعداد ، نوع وابستگی و ... برای برنامه خود ، حتی میتوانیم آن را بفروش برسانیم !

قفلهای سی دی ها چگونه کار می کنند

روشهای بسیاری برای حفاظت از یک CD در برابر کپی برداری وجود دارد ولی تاکنون هیچ سازنده و طراح قفلی ساختار آن را بصورت واضح بیان نکرده است.

یکی از ساده ترین و عمومی ترین روشهایی که تاکنون برا ی حفاظت از CD دیده شده است افزایش مجازی طول چند فایل درون CDمیباشد به نحوی که آنها تا چند صد مگابایت به نظر میرسند.برای انجام چنین کاری تنظیمات مربوط به طول آن فایل را در Image سی دی بیش از آن چه هست ذکر میکنند.

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

یکی از روشهای نادر و کمیاب برای حفاظت از سی دی ها کنترل بر روی درایو سی دی می باشد از این روش بیشتر در حفاظت بازیها استفاده میشود و نحوه ایجاد آن به دانش بالایی نیاز دارد.روش آن بدین نحو است که اطلاعاتی نادرست(عمدی) در قست ECC (تصحیح خطا) یک سکتور داده نوشته میشود. سی دی نویسهای استاندارد بصورت خودکار این خطاها را هنگام نوشتن تصحیح میکنند در هنگام خواندن ، برنامه سکتور داده را بصورت RAW و بدون تصحیح خطا در حافظه برای تطبیق با داده های اصلی بار میکند و در صورتیکه تناقض با داده های اصلی برنامه اجرا نمیشود.

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

یکی از روشهای غیر حرفه ای ولی موثر در زمانهایی که سی دی به تازگی خود را مطرح ساخته بود ایجاد سی دی های نقره ای غیر استاندارد بود. این سی دی ها بیش از 74 دقیقه(650 مگابایت) ظرفیت داشتند((Over sized و با دستگاههای پرس سی دی تولید میشدند . ولی امروزه CD-RوCD-RW هایی با ظرفیتهای 700 و حتی 800 مگابایت تولید شدند که این روش را بسرعت متوقف نمودند.

امروزه متداول ترین روشی که برای محافظت از سی دی دیده میشود ایجاد فاصله هایی (gaps) غیر استاندارد ما بین تراک های صوتی و قرار دادن اندیسها در مکانهایی دور از انتظار است. سی دی که با این روش قفل گذاری میگردد در بسیاری موارد توسط نرم افزار های کپی برداری معمولی و سی دی نویسهایی که از Disc at once پشتیبانی نمیکنند غیر قابل کپی برداری است. ولی با پیشرفت تکنولوژی سی دی نویسها و نرم افزارها این روش نیز بسرعت در حال کناره گیری است.

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

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

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

امروزه دستکاریToc سی دی بسیار فراگیر است و یک قفل ساز سعی دارد با دستکاری TOC اطلا عاتی دروغین را به سی دی پیوند بزند.(با ساختار Toc در مقاله های آینده بیشتر آشنا خواهید شد.)

امروزه شرکتهایی بیشماری بر روی نحوه قفل گذاری بر روی سی دی ها و روشهای جدید فعالیت دارند به طور مثال شرکت سونی به تازگی ادعا میکند که قادر است با دستگاهی خاص برروی سی دی اطلاعاتی بنویسد یا مارک گذاری کند که با تجهیزات عادی تنها قابل خواندن باشد. ولی از سوی دیگر شرکتهایی سعی در ارائه کد برگردانهایی برای آن هستند. و این مبارزه ادامه دارد

قفل های نرم افزاری چگونه طراحی می شوند؟

با توجه به فزونی نرم افزار در سیستم های کامپیوتری از یک طرف و توانایی کنترل کپی های غیرمجاز ( از دیدگاه اقتصادی آن ) از طرفی دیگر دلیلی محکم جهت بررسی این شاخه از مهندسی نرم افزار می باشد.
از آنجا که متاسفانه قانون Copyright در تمام جهان بجز ایران و چند کشور دیگر اجرا می گردد, بحث کنترل کپی های غیرمجاز حساس تر می شود. در این مقاله سعی بر این است تا علاوه بر آشنایی با انواع قفل های نرم افزاری و اختلاف آن ها با قفل های سخت افزاری, بتوانیم به عنوان طراح یک قفل نرم افزاری از محصولات نرم افزاری خودمان حمایت کنیم. ضمنا علاوه بر آشنایی با مفاهیم فوق, نوشتن روتین های ضد دیباگ و همچنین نحوه کد کردن اطلاعات نیز لحاظ شده است.
لازم به ذکر است که این مقاله حاصل تجربیات چند ساله و زحمات زیادی است که تقدیم می گردد.

 


کلمات کلیدی
Key Lock, Hard Lock, Software Lock, قفل نرم افزاری، Tag Lock, Anti Debug, قفل سخت افزاری


مقدمه
از آنجا که زمان زیادی تا سال 2000 باقی نمانده, اما هنوز در کشور ما ایران, نرم افزار جای خود را به عنوان یک محصول صادراتی پیدا نکرده چرا که یکی از دلایل اصلی آن عدم توجه جدی به حمایت از تولید کنندگان نرم افزار می باشد. به هر حال قصد اینجانب از ارائه مقاله, بررسی کم و کاستی های نرم افزار در ایران نیست بلکه طریقه حل مشکل موجود در این بازار نابسامان می باشد. با توجه به کپی های غیرمجازی که روزانه بصورت کاملا عادی و بدون اطلاع سازنده آن صورت می گیرد, جلوگیری از این عمل و کنترل جدی آن امری ضروری و واجب بنظر می رسد. در ادامه مطلب به توضیح درباره قفل های نرم افزاری و سخت افزاری می پردازیم.

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

تعریف قفل های نرم افزاری: به هر برنامه ای که کنترل کپی آن فقط از طریق نرم افزار و بدون نیاز به سخت افزار اضافی قابل انجام باشد, گویند.
تعریف قفل های سخت افزاری: به هر برنامه ای که کنترل کپی آن از طریق سخت افزار اضافی قابل انجام باشد, گویند.
با توجه به تعاریف فوق می توان به تفاوت قفل های سخت افزاری و نرم افزاری پی برد. قفل های سخت افزاری با توجه به اضافه کردن یک سخت افزار جدید به کامپیوتر ( اغلب از طریق ارتباط با پورت چاپگر ) برنامه خود را کنترل می کنند. برنامه قبل از اجرا ابتدا با توجه به مراجعه به آدرس سخت افزار نصب شده ( اضافه شده با استفاده از دستور Port ) به سخت افزار مورد نظر خود مراجعه کرده و در صورت یافتن آن, تست های مختلف اعم از تست رمز, خواندن اطلاعات و ... می تواند تصمیم گیری نماید. اما در قفل های نرم افزاری برنامه بدون نیاز به سخت افزار اضافی و با کنترل رسانه ذخیره سازی می تواند تصمیم گیری کند. ضمنا لازم به توضیح است که هدف از طراحی قفل های نرم افزاری/ سخت افزاری این نیست که هیچکس توانایی شکستن ( باز کردن ) آنرا ندارد بلکه مقصود بالا بردن سطح کنترل کپی های غیر مجاز تا حد ممکن می باشد. ( چرا که می دانیم اطلاعات همه در یک سطح نیست. )

طریقه استفاده از قفل نرم افزاری در برنامه مورد نظر
با توجه به نوع کاربرد برنامه ( کوچک وقابل کپی بر روی یک دیسکت, تحت شبکه و ... ) می توانیم از انواع روش هایی که جهت حفاظت از نرم افزار در نظر داریم ( و متعاقبا توضیح داده خواهد شد ) استفاده کنیم. اما مساله قابل بحث این است که چگونه از یک قفل منتخب استفاده نمائیم؟
جواب این سوال متغییر و وابسته به شرایط زیر می باشد:
الف: اعتقاد طراح نرم افزار به اینکه کاربر حتما باید آنرا خریداری نماید تا از امکانات آن مطلع گردد.
در این حالت قفل نرم افزاری در ابتدای شروع به کار برنامه کنترل می گردد حتی طراح می تواند در مواقع حساس نیز قفل را مجددا کنترل کند و یا در حالتی که طراح واقعا سخت گیر باشد, می تواند در زمان های مشخصی از وجود قفل اطمینان حاصل نماید ( مثلا هر 4 ثانیه ). البته در این حالت طراح باید روشی را که جهت کنترل قفل استفاده می کند, نیز در نظر بگیرد.
ب: اعتقاد طراح نرم افزار به این که کاربر می تواند از نرم افزار به عنوان نسخه نمایشی نیز استفاده کند.
طراح در این حالت می بایست در مکان های خاصی از برنامه, قفل را کنترل کند. مثلا در یک برنامه حسابداری می توان تمام بخش های سیستم را آزاد گذاشته ( یعنی برنامه نیازی به قفل نداشته باشد ) اما در صورتی که کاربر مایل به استفاده از امکانات گزارشگیری سیستم باشد, قفل نرم افزاری در خواست گردد. مزیت این روش بر روش قبلی این است که دیگر نیاز به طراحی نسخه نمایشی جهت مشاهده کاربران وجود ندارد.

آشنایی با نحوه قفل گذاری بر روی یک برنامه
الف: طراح به سورس برنامه دسترسی دارد.
در این حالت طراح پس از انتخاب روش قفل گذاری, کافیست آنرا به زبان مورد نظر خود پیاده سازی نموده و در برنامه خود بگنجاند. ( که مکان های قرار دادن قفل در عنوان قبلی توضیح داده شد. )
ب: طراح ( مجری پروژه ) به سورس برنامه دسترسی ندارد.
گاهی اوقات به یکسری برنامه های ارزشمندی برخورد می کنیم که فاقد قفل هستند, بنابراین نیاز به قفل گذاری وجود دارد. ( البته این حالت بیشتر در کشور ما و چند کشور دیگر که در آن ها قانون Copyright معنی ندارد, کاربرد دارد. ) جهت تزریق قفل به این گونه برنامه ها, نیاز به آشنایی کامل به ساختار فایل های اجرایی (EXE, COM, SYS, …) وجود دارد چرا که باید برنامه ای طراحی کنیم تا همانند یک ویروس کامپیوتری به فایل اجرایی مشخصی بچسبد. البته جهت اینکار بهترین زبان برنامه نویسی, اسمبلی می باشد. ( بدلیل توانایی دخالت در روند اجرای برنامه )
البته در رابطه با نحوه نوشتن این گونه برنامه ها, روش های زیادی وجود دارد که خود بحثی مجزا را می طلبد و از حوصله این مقاله خارج است.
ضمنا برای بالا بردن سطح امنیت برنامه لازم است تا یکسری کد های ضد دیباگ در برنامه گنجانده شوند. کدهای ضد دیباگ, دستوراتی به زبان اسمبلی هستند که در حالت اجرای عادی برنامه, هیچ تغییری در روند اجرای نمی گذارند بلکه در صورتی که برنامه توسط دیباگرها اجرا گردد ( مورد ارزیابی قرار گیرد ) بتواند از اجرای آن جلوگیری نماید. با اضافه کردن کد های ضد دیباگ به ابتدای برنامه ( یا قبل از کنترل قفل ) می توان احتمال دستکاری در برنامه را پائین آورد. ( نحوه نوشتن کد های ضد دیباگ در پیوست A آورده شده است.)

آشنایی با روش های قفل گذاری و نحوه طراحی آن ها

1- قفل گذاری با استفاده از شماره سریال اصلی دیسکت
همانطور که می دانید, سیستم عامل جهت هر دیسکت یک شماره سریال واحد (UNIQUE) اختصاص می دهد, بطوریکه شماره سریال هر دو دیسکت با هم یکی نیستند. بنابراین همین خود یک راه تشخیص دیسکت کلید ( قفل ) می باشد.
جهت استفاده از این قفل می بایست شماره سریال دیسکت را خوانده و سپس در داخل برنامه آنرا کنترل نمائیم. یک راه ساده جهت خواندن شماره سریال, اجرای دستور VOL بصورت شکل مقابل است:
VOL >>C:DOSLCK.TMP
بعد با باز کردن فایل LCK.TMP, می توانیم به محتویات آن دسترسی پیدا کنیم. راه دیگر مراجعه به Boot Sector جهت کنترل قفل می باشد.
ضریب اطمینان این قفل در مورد دیسکت ها, 5%-2% بوده و در رابطه با هارد دیسک 60%-50% می باشد. دلیل این اختلاف این است که در حالت قفل دیسکتی با کپی Boot Sector, قفل بر روی دیسکت دیگر قرار خواهد گرفت اما در رابطه با هارد دیسک اینکار به سادگی انجام پذیر نیست.

2- قفل گذاری با استفاده از مشخصات سیستم
در این نوع قفل نرم افزاری, برنامه قبل از اجرا ابتدا مشخصات سیستم را خوانده ( که اینکار از طریق مراجعه به بخش های خاصی از حافظه و یا مراجعه به اطلاعات BIOS انجام می شود. ) سپس آنرا با فایلی که قبلا توسط نویسنده نرم افزار بر روی کامپیوتر کپی گردیده, مقایسه می کند و در صورت عدم برابری, اجرای برنامه پایان می پذیرد.
این نوع قفل هنوز هم در بسیاری از برنامه ها استفاده می گردد, اما نکته قابل ذکر این است که جهت اطمینان بیشتر به قفل لازم است فایل حاوی مشخصات بصورت کد شده نوشته شده باشد تا امکان دستکاری آن توسط قفل شکنان به حد اقل ممکن برسد.
درصد اطمینان این نوع قفل 75%-65% می باشد.

3- قفل با استفاده از موقعیت فایل روی هارد دیسک
این نوع قفل فقط بر روی هارد دیسک قابل استفاده بوده و به این صورت است که فایل اجرایی به موقعیت خود بر روی هارد حساس می باشد چرا که قبل از اجرا ابتدا موقعیت خود را از روی سکتورهای ROOT خوانده و سپس شماره کلاستر اشاره گر به خودش را بدست می آورد, سپس آنرا با شماره کلاستری که قبلا توسط برنامه نویس بر روی یکی از فایل های برنامه ( ممکن است بصورت کد شده باشد ) قرار داده شده, مقایسه کرده و در صورت برابر بودن اجرا می شود. این نوع قفل نسبت به قفل قبلی ( شماره 2 ) استفاده کمتری داشته چرا که در صورتیکه برنامه از روی بخشی از هارد به ناحیه دیگری انتقال یابد, اجرا نخواهد شد و این از نظر کاربر بسیار ناپسند می باشد. ( ضمنا امکان Defra, Scandisk, و ... نیز وجود ندارد چرا که شماره کلاستر اشاره گر به فایل تغییر خواهد کرد. )
ضریب اطمینان این نوع قفل نیز 80%-70% می باشد.

4- قفل با استفاده از فرمت غیر استاندارد
این شیوه یکی از رایج ترین قفل های نرم افزاری است که هنوز هم بصورت جدی مورد استفاده قرار می گیرد. برخی از دلایل اهمیت آن عبارتند از:
- امکان استفاده از روش های متفاوت در این روش
- راحتی و سرعت زیاد به هنگام استفاده آن
- وجود ضریب اطمینان بالا و انعطاف پذیری زیاد آن
- عدم وجود نرم افزار خاصی جهت باز کردن این نوع از قفل ها
همان طور که می دانیم سیستم عامل جهت دسترسی به اطلاعات یک دیسکت از فرمت خاصی ( 18 سکتور در هر تراک ) استفاده می کند اما اگر یه تراک به صورت غیر استاندارد فرمت شود, ( مثلا 19 سکتور در تراک ) سیستم عامل دیگر توانایی استفاده از سکتورهای غیرمجاز را نخواهد داشت و بنابراین تمام نرم افزارهای تحت سیستم عامل مزبور نیز از سکتورهای مخفی استفاده نکرده, در نتیجه امکان کپی برداری از آنها بسیار ضعیف است. مانیز از همین روش جهت طراحی قفل مورد نظر مان استفاده می کنیم. بصورتیکه تراک آخر دیسک را بصورت یک سکتوری و با شماره 20 فرمت می کنیم. سپس جهت کنترل دیسکت به سکتور فوق مراجعه کرده و در صورت وجود, کنترل برنامه را پی می گیریم. البته غیر از تغییر شماره سکتور می توان از اندازه غیر مجاز نیز استفاده کرد یعنی بجای اینکه سکتورها را بصورت 512 بایتی فرمت کنیم, از اندازه 1024, 2048 و ... استفاده می کنیم. ( قفل نرم افزاری Copy Control که معروفترین در نوع خود می باشد, از همین روش استفاده می کند. )
این قفل فقط جهت فلاپی دیسک قابل استفاده می باشد و در صد اطمینان در این روش حدود 95%-85% می باشد.

5- قفل با استفاده از شماره سریال ساختگی
این روش قفل گذاری که قویترین قفل می باشد, بصورت مخلوطی از روش های 1 و 4 می باشد یعنی ابتدا تراک خاصی را بصورت غیر استاندرد فرمت کرده و سپس اطلاعات خاصی را درون آن قرار می دهند ( شماره سریال فرضی ). این قفل فقط جهت فلاپی دیسک قابل استفاده بوده و ضریب اطمینان آن حدود 98%-90% می باشد.

پیوست A- روتین های ضد دیباگ Anti Debug Procedures

همان طور که توضیح داده شد, روتین های ضد دیباگ جت جلوگیری از اجرای برنامه های دیباگر و یا جلوگیری از ( حد اقل مشکل کردن کار ) دستکاری توسط قفل شکنان, استفاده می شوند. در زیر توضیحات چند روش موثر و مفید, آورده شده است:

الف: غیر فعال کردن وقفه ها
جهت جلوگیری از اجرای مرحله به مرحله ( Trace کردن ) برنامه, می توان وقفه های کنترلر 8359 را غیر فعال ساخت. آدرس این کنترلر 21h بوده و IRQ های 7-0 را کنترل می کند IRQ1 همان وقفه مربوط به صفحه کلید می باشد. پس با غیر فعال کردن این وقفه می توان صفحه کلید را غیر فعال نمود.

طریقه استفاده:


CS:0100 E421 IN AL,21
CS:0102 0C02 OR AL,02
CS:0104 E621 OUT 21,AL

 

ب: تغییر بردار وقفه ها
یکی از روش های ساده و راحت جهت ضد دیباگ کردن برنامه ها, تغییر برداری است, که دیباگر از آن استفاده می کند. (03 ) حتما بخاطر بسپارید که در پایان برنامه دوباره آدرس بردار وقفه تغییر داده شده را بازیابی کنید.

طریقه استفاده:


CS:0100 EB04 JMP 0106
CS:0102 0000 ADD [BX+SI],AL
CS:0104 0000 ADD [BX+SI],AL
CS:0106 31C0 XOR AX,AX
CS:0108 8EC0 MOV ES,AX
CS:010A 268B1E0C00 MOV BX,ES:[000C]
CS:010F 891E0201 MOV [0102],BX
CS:0113 268B1E0E00 MOV BX,ES:[000E]
CS:0118 891E0401 MOV [0104],BX
CS:011C 26C7064C000000 MOV Word Ptr ES:[000C],0000
CS:0123 26C7064E000000 MOV Word Ptr ES:[000E],0000

 

ج:گیج کردن دیباگر
این راه یکی از قویترین تکنیک های ضد دیباگ بوده که در آن به وسط یک دستور, پرش می شود و اینکار باعث قفل کردن ( Hang ) دیباگر خواهد شد.

طریقه استفاده:


CS:0100 E421 IN AL,21
CS:0102 B0FF MOV AL,FF
CS:0104 EB02 JMP 0108
CS:0106 C606E62100 MOV Byte Ptr [21E6],00
CS:010B CD20 INT 20

 

د: کنترل پرچم های CPU
این روش در برابر دیباگرها بسیار مفید می باشد و به این صورت است که ابتدا پرچم Trace از CPU را خاموش کرده و در بین برنامه آنرا کنترل کنیم. در صورتیکه این پرچم روشن شده باشد, مشخص است که دیباگر در پشت صحنه در حال اجراست.

طریقه استفاده:


CS:0100 9C PUSHF
CS:0101 58 POP AX
CS:0102 25FFFE AND AX,FEFF
CS:0105 50 PUSH AX
CS:0106 9D POPF

 

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


CS:1523 9C PUSHF
CS:1524 58 POP AX
CS:1525 250001 AND AX,0100
CS:1528 7402 JZ 152C
CS:152A CD20 INT 20

 

ه: متوقف ساختن دیباگر
این روش باعث متوقف شدن دیباگر می شود که با اجرای دستور ساده INT 03 می توان این کار را انجام داد.

طریقه استفاده:


CS:0100 B96402 MOV CX,0264
CS:0103 BE1001 MOV SI,0110
CS:0106 AC LODSB
CS:0107 CC INT 3
CS:0108 98 CBW
CS:0109 01C3 ADD BX,AX
CS:010B E2F9 LOOP 0106

 

پیوست B- روش های کد کردن اطلاعات Data Coding Procedures

الف: افزودن یک عدد به کد های یک فایل
در این روش جهت کد کردن یک فایل, ابتدا آنرا خوانده و سپس یک مقدار خاص, مثلا 20 را به مقدار هر بایت فایل اضافه می کنیم. این یکی از ساده ترین روش ها بوده و نسبتا کارایی خوبی نیز دارد. جهت خارج کردن فایل از حالت کد شده ( Decode ) نیز, کافیست مقدار فوق را از تمام بایت های فایل کم کنیم.

ب: XOR کردن کل فایل
در این روش نیز پس از خواندن کل فایل, تمام بایت های آنرا با رشته کاراکتری یا عدد ثابت خاصی XOR کرده و سپس مقدار جدید را در فایل حاصل ضبط می نمائیم. جهت خارج کردن فایل از حالت کد شده, دقیقا عمل فوق را انجام می دهیم.

پیوست C- لیست برنامه قفل گذار Pascal Source To Learn

در زیر لیست دو برنامه نمونه, که شماره (1) جهت درست کردن دیسکت قفل و شماره (2) جهت تست آن طراحی شده, آورده شده است:
در این برنامه ها از تراک 81 و سکتور 20 ( در حالت عادی هر دیسکت فقط 18 سکتور دارد ) جهت قفل برنامه استفاده شده و به این صورت عمل می کند که یک رشته را از کاربر دریافت کرده و در مکان فوق قرار می دهد و سپس جهت تست رشته دریافتی در برنامه دوم آنرا با اطلاعات موجود در دیسکت مقایسه می کند و با دادن پیغام مناسبی آنرا چاپ می نماید.
این برنامه توسط Turbo Pascal 7.0 کامپایل و اجرا شده اند.

 

{
برنامه شماره(1)
این برنامه جهت ساختن دیسکت قفل استفاده می شود
}


program PROGRAM-1;

Uses Dos;

TYPE
DAT = String[40];
VAR
C : Registers;
FP : String[15];
PU : Array[1..512] of char;
Data: Dat;
I : Byte;
Key : Dat;

{******************************************}

Procedure ZUW;
Begin
Fp:=#81+#0+#20+#2;
c.d1 :=0;
c.dh :=0;
c.ch:=81;
c.c1:=20;
c.a1:=1;
end;

Procedure Write-Key(data:Dat);
Begin
c.ah:=5;
ZUW;
c.es:=Seg(fp[1]);
c.bx:=Ofs(fp[1]);
Intr(19,c);
c.ah:=5;
ZUW;
c.es:=Seg(fp[1]);
c.bx:=Ofs(fp[1]);
Intr(19,c);
For i:=1 to Length(data) do
Pu:=data;
Pu[i+1]:=#0;
c.ah:=3;
ZUW;
c.es:=Seg(Pu);
C.bx:=Ofs(Pu);
Intr(19.c);
end;

{=======================================}

begin
Writeln;
Writeln( Program Number1 );
Writeln( This Program Used For Create The Key );
Write( Please Type Key Word : );
Readln(Key);
Writeln;
Write( Writing Key …);
Write-Key(Key);
Writeln( OK .);
Writeln;
end.


{

 

برنامه شماره (2)
این برنامه جهت کنترل دیسکت قفل استفاده می شود
}


program PROGRAM-2;

Uses Dos;

Type
DAT = String[40];

Var
C : Registers;
FP : String[15];
PU : Array[1 ..512] of char;
Data: Dat;
I : Byte;
Key : Dat;

{********************************************}

Procedure ZUW;
Begin
Fp:=#81+#0+#20+#2;
c.d1:=0;
c.dh:=0;
c.ch:=81;
c.c1:=20;
c.a1:=1;
end;

{********************************************}

Function Read-Key(Key:Dat):Boolean;
Begin
c.ah:=2;
ZUW;
c.es:=Seg(pu);
c.bx:=Ofs(pu);
Intr(19.c);
c.ah:=2;
ZUW;
c.es:=Seg(pu);
c.bx:=Ofs(pu);
Intr(19,c);
I:=1;
data:=;
While pu#0 do
begin
Data :=data+pu[];
Inc(I);
end;
If data=Key then
Read-Key:=True
Else
Read-Key:=False;
end;

{***********************************************}


begin
Writeln;
Writeln( Program Number2 );
Writeln( This Program Used For Check The Key );
Write( Please Type Key Word : );
Readln(Key);
Writeln;

If Read-Key(Key)=False then
Writeln( I am Sorry , Not Found .);
Else
Writeln( Very Good , That Found .);

Writeln;
end.

 


نویسنده : مهدی معاضدی
از سایت خبری فن آوری اطلاعات ایران





1 2 3 >>