----------------------------------------------------------------------------
هشدار :
براي پيشرفت صنعت آي تي کشور هيچ راهي جز حمايت از توليدکنندگان وجود ندارد. پولي که شما براي خريد محصولات نرم افزاري اين شرکتها مي پردازيد به شما امکان استفاده از محصولات بهتر و کامل تر را خواهد داد و توزيع غير قانوني نرم افزارها شما را از اين حق محروم ساخته و تنها باعث عقب افتادگي بيشتر صنعت آي تي کشور بخاطر سودجويان کم عقل مي شود!
---------------------------------------------------------------------------
ابزارهای مورد نیاز:
PEID
OllyDbg (نسخه OllyICE پیشنهاد می شود )
هدف :
حذف نگ اسکرین از HelpVistaXPProject.ocx
هدف من در این آموزش این است که شما را با مبانی نفوذ آشنا کنم و در ادامه به یک طرح حفاظتی ساده نفوذ خواهیم کرد. شما با استفاده از ابزارهای نفوذ، داشتن یک بینش کلی در مورد کرک و البته کمی کمک از جانب من ، یک طرح حفاظتی را به زانو در خواهید آورد . در انتها شما احساس کرک کردن خواهید داشت و با این کار به هنر ما پی خواهید برد.
چند وقت پیش آقا خشایار زحمت کشیده بودند و برنامه ای با نام Admin Pass Finder رو روی سایت قرار داده بودند. این برنامه به روش بروت فورس پسورد یوزرها رو بدست می آورد اما برای استفاده از برنامه با یک نگ اسکرین مواجه می شدیم که اجازه استفاده از برنامه رو به ما نمی داد.
این نگ اسکرین کار آقا خشایار نبود بلکه مربوط به OCX بود که برای زیباتر کردن برنامه استفاده کرده بود.
در داخل اینترنت صدها نمونه از این اسکاینها وجود داره که خیلی از اونها رایگان هستند یا کرک شده اند ولی در هر صورت آقا خشایار چشمش همین OCX رو گرفته بود و به هر نحوی می خواست از اون استفاده کنه!!
مختصری در مورد Nag Screen
یکی از رایج ترین انواع حفاظت در برنامه های آزمایشی ( Demo ) ، نمایش صفحه ای با مضمون آزمایشی بودن برنامه ، در هنگام اجرا می باشد.
این پنجره ممکن است در ابتدای اجرای برنامه یا دقایقی پس از اجرای آن به نمایش درآِید.
در برخی طرح ها ممکن است این پنجره پس از مدت زمانی خاص یا از تاریخ خاصی به بعد به نمایش در آید.
گاهی اوقات نیز ممکن است برنامه در دفعات اجرا شدن محدود شده باشد.
و یا در برخی طرح ها طبق الگریتمی تصادفی، ممکن است برنامه در زمانها یا بر اثر انجام اعمال خاصی به سراغ چک کردن پروسه قفل خود برود و در نهایت نگ اسکرین را به نمایش درآورد.
در هر صورت فرقی ندارد برنامه از کدام طرح استفاده می کند، شما به عنوان یک کراکر باید آن را کرک نمائید!!( در این مورد بیشتر بحث خواهیم کرد)
ابتدا باید از کجا شروع کرد؟
اولین اصل برای موفقیت در کرک، داشتن اطلاعات کافی در مورد طرح حفاظتی است که می خواهید به آن نفوذ کنید. باید از این طرف و آن طرف هر اطلاعاتی که می توانید در مورد برنامه کسب کنید.
این برنامه به چه زبانی نوشته شده؟ با چه چیزی پک شده؟ نحوه چک کردن قفل یا تولید رمز بر چه اساسی است؟ پس از رجیستر شدن، اطلاعات مربوط به ثبت برنامه در کجا ذخیره می شوند؟
برای اولین قدم و بر طبق دستورالعملی که جز سنت کرکرها محسوب می شود به سراغ PEID می رویم و فایل OCX را داخل آن باز می نمائیم تا اطلاعاتی در مورد زبان برنامه نویسی و پکر مورد استفاده آن دست یابیم.
خوب OCX رو با PEID باز کنید. چه چیز جالبی! برنامه به زبان ویژوال بیسیک نوشته شده و از هیچ پکری هم خبری نیست!! خوب چه بهتر پس خیلی سریع به سراغ Ollydbg می رویم.
دیباگر نازنیتون رو باز کنید و فایل HelpVistaXPProject.ocx رو داخل اون لود کنید. در اینجا شما تمام اونچه که OCX انجام می دهد را به صورت دیسمبلر شده می بینید. خوب اینجا ایرانویجه پس اگه اسمبلی هم بلد نباشید احتمالا حداقل به یک زبان برنامه نویسی تسلط کامل دارید. و یک تصور درست از کدنویسی و نحوه اجرای اون توسط ماشین دارید.
در هنگام اجرای برنامه این کدها خط به خط اجرا می شوند و برنامه به جلو حرکت می کند تا اینکه به کدهای مربوط به طرح حفاظتی می رسد و با اجرا شدن آن ، نگ اسکرین ظاهر خواهد شد.
اگر این کدها به زبان دیگری غیر از اسمبلی نوشته شده بود احتمالا می توانستید به راحتی با حذف کردن آنها از شرش خلاص شوید ولی اینجا کار کمی ظریف تر است. در واقع هر عملی که موجب حذف یک خط از کدها شود یا اگر دستوری را به اشتباه تغییر دهید، برنامه دیگر کار نخواهد کرد. شما باید دقیقا قطعه کد مربوط به طرح حفاظتی را پیدا کنید و طرز کار آن را بررسی نموده و در نهایت آن را از کار بیاندازید. اما چطور بین این همه، کد صحیح را پیدا کنیم؟ نگران نباشید من اینجا هستم و به شما می گم چطور این کار را انجام دهید.
پیدا کردن طرح حفاظتی
معمولا نگ اسکرینها، صفحاتی هستند که در داخل آنها جملاتی مبنی بر آزمایشی بودن برنامه و نحوه خرید آن قید شده است. کافیست یک بار برنامه را اجرا کنید و متن نگ اسکرین را به خاطر بسپارید یا جایی یادداشت کنید.
خوب حتما قبلا برنامه Admin Pass Finder را اجرا کرده اید. در هنگام اجرا ما با دو صفحه نگ اسکرین مواجه می شویم که جملات زیادی داخل آنها به کار رفته است. ما آنها را جایی یادداشت می کنیم و دوباره به سراغ دیباگر خود می رویم.
روی صفحه اصلی دیباگر راست کلیک کنید و از منوی باز شده روی گزینه Serch For کلیک کنید و در منوی آن گزینه All Refrenced text string را انتخاب نمائید.
در اینجا احتمالا می توانید سرنخ های اصلی برای نفوذ را پیدا کنید. کمی داخل این متن ها بگردید. احتمالا جملات آشنایی را داخل آن پیدا می کنید.
ما با آنها کاری نداریم فقط دنبال جملاتی هستیم که در نگ اسکرین به کار رفته اند،
اوه بله ! شما احتمالا اینجا این پائین نگ اسکرین را پیدا کرده اید.
کد:
111B8F68 . 68 C0C60211 push 1102C6C0 ; UNICODE "Your 20 days trial period has elasped."
بله درست زده اید به هدف!!
این همان جمله ای است که در نگ اسکرین ظاهر می شد. حالا اینجا درست روی همین خط دابل کلیک کنید تا به همان قسمت از برنامه پرش کنیم.
بسیار خوب بهتره یه آبجو یا ماالشعیر لیموئی ( فقط با طعم لیمو ) برای خودتون باز کنید ، از اون بنوشید و آرام به صندلیتون تکیه بدید.می خوام یه مقدار در مورد اسمبلی براتون صحبت کنم.
زبان اسمبلی مانند دیگر زبان ها دارای توابع زیادی هست که بهتره با اونها آشنا باشید ولی در ابتدای کار لازم نیست همه اونها را فرابگیرد، ما فقط به چندتا از اونها احتیاج داریم . مهمترین دستوراتی که در کرک کردن نقش دارند دستورات Jumps هستند. این دستورات معمولا پس از کنترل کردن ( مقایسه ) متغییر ها ، در صورت صحت دستور شرطی ، کنترل برنامه را به مکان دیگری منتقل می کنند . بگزارید یک مثال بزنم:
کد:
If EnteredSerial = TrueSerial Then
Program is Registered
Else
Program is Not Registered
End if
معادل کد بالا به زبان اسمبلی احتمالا چیزی شبیه به این خواهد بود :
کد:
Cmp eax,ebx
Je 1190B3A0
کار این کدها مقایسه رمز مرودی شما با کلمه رمز صحیح است و چنانچه کلمه رمز صحیح باشد برنامه به کار خود ادامه خواهد داد و در غیر این صورت با نگ اسکرین مواجه می شوید. خیلی ساده است نه؟!
خوب ساده ترین راه برای رهایی از شر این طرح حفاظتی همانا معکوس کردن جمله شرطی است. یعنی به جای مساوی(=) باید از نامساوی(<>) استفاده کرد. البته در زبان اسمبلی از این Jumps زیاد نداریم و می تونید به راحتی آنها را حفظ کنید. من در اینجا لیستی از کدها به همراه توضیح عملشان برای شما قرار داده ام.
کد:
JUMPS
Hex: Asm: Description:
0F85 jne jump if not equal
0F84 je jump if equal
0F87 ja jump if above
0F86 jna jump if not above
0F83 jae jump if above or equal
0F82 jnae jump if not above or equal
0F82 jb jump if below
0F83 jnb jump if not below
0F86 jbe jump if below or equal
0F87 jnbe jump if not below or equal
0F8F jg jump if greater
0F8E jng jump if not greater
0F8D jge jump if greater or equal
0F8C jnge jump if not greater or equal
0F8C jl jump if less
0F8D jnl jump if not less
0F8E jle jump if less or equal
0F8F jnle jump if not less or equal
EB jmp or jmps jump directly to
بسیار خوب آموزش اسمبلی باشه برای بعد. شما هر آنچه که برای امروز لازم داشتید رو فرا گفته اید و مکان قرار گیری کد حفاظتی را نیز یافته اید. همه چیز آماده است، پس نفوذ به طرح حفاظتی را آغاز می کنیم.
ما درست در مکان نمایش نگ اسکرین هستیم اما چه چیزی باعث نمایش آن می شود؟ واضحتر بگم کدامیک از دستورات Jump کنترل برنامه را به اینجا سوق داده است ؟ آن را بیابید و برعکسش کنید.
اگر کمی بالاتر را نگاه کنید چیزهای خوبی خواهید یافت :
کد:
111B8F07 . /74 1E je short 111B8F27
111B8F09 . |83E8 0F sub eax, 0F
111B8F0C . |0F85 1F010000 jnz 111B9031
111B8F12 . |8B06 mov eax, dword ptr [es>; Case 10 of switch 111B8F06
111B8F14 . |6A FF push -1
111B8F16 . |56 push esi
111B8F17 . |FF90 3C100000 call dword ptr [eax+103>
111B8F1D . |68 6D901B11 push 111B906D
111B8F22 . |E9 45010000 jmp 111B906C
111B8F27 > \8B0E mov ecx, dword ptr [es>; Case 1 of switch 111B8F06
111B8F29 . 57 push edi
111B8F2A . 56 push esi
111B8F2B . FF91 3C100000 call dword ptr [ecx+103>
111B8F31 . B9 04000280 mov ecx, 80020004
111B8F36 . B8 0A000000 mov eax, 0A
111B8F3B . 894D A4 mov dword ptr [ebp-5C]>
111B8F3E . 894D B4 mov dword ptr [ebp-4C]>
111B8F41 . BB 08000000 mov ebx, 8
111B8F46 . 8D55 8C lea edx, dword ptr [eb>
111B8F49 . 8D4D BC lea ecx, dword ptr [eb>
111B8F4C . 8945 9C mov dword ptr [ebp-64]>
111B8F4F . 8945 AC mov dword ptr [ebp-54]>
111B8F52 . C745 94 48C80>mov dword ptr [ebp-6C]>; UNICODE "Purchase Now !!"
دقیقا یک Jmp وجود دارد که اگر مسیر آن را نگاه کنید کنترل برنامه را به مکان انتهای این پروسه هدایت می کند یعنی به Retn
خوب این یعنی چه ؟ یعنی اگر اجرای برنامه به این Jmp برسد ، شما با نگ اسکرین مواجه نخواهید شد. در واقع دستور Jmp یعنی پرش بدون شرط ، چیزی شبیه به GoTo . یعنی هر بار اجرای برنامه به این خط برسد ، برنامه حتما به مکانی که این دستور اشاره می کند پرش خواهد کرد.
کمی بالاتر از این دستور به چند دستور جامپ دیگر می رسیم که هر کدام از آنها کنترل برنامه را به مکان دیگری منتقل می کنند . اما صبر کنید عمل انتقال یکی از آنها خیلی جالب به نظر می رسد! یکی از آنها دقیقا به خط بعد از JMP اشاره می کند. خوب نگاه کنید! بله درسته دقیقا همین کد هست که شرط را بررسی و نگ اسکرین را ظاهر می کند.
فقط کافیست این دستور را معکوس نمائیم یعنی به جای JE بنویسیم JNE _ Je یعنی اگر مساوی بود پرش کن و JNE یعنی اگر نامساوی بود پرش کن _
پس چرا معطل هستید؟ زود این کد را تغییر دهید؟ آه شاید واقعا دفعه اولی هست که این کار را انجام می دهید؟
اشکالی ندارد ، کار خیلی ساده است کافیست روی همان کد راست کلیک کرده و گزینه Bainary را انتخاب نمائید و سپس گزینه Edit را انتخاب کنید.
در پنجره باز شده احتمالا عدد 15 74 یا چیزی شبیه به این خواهید دید. ما فقط با عدد 74 کار داریم این یعنی JE و برای تبدیل آن باید عدد 74 را به 75 تغییر دهیم به همین سادگی!!
در دیباگر به جای JNE کلمه JNZ نمایش داده می شود. اصلا مهم نیست! مرحله آخر کار ذخیره تغییرات در فایل اصلی است. برای این کار راست کلیک کرده و گزینه Copy to Executable را انتخاب و سپس All Modified را برگزینید.
پس از تائید ثبت تغییرات ، فایل پچ شده به شما نمایش داده می شود. روی آن راست کلیک کرده و Save را انتخاب کنید.
کار تمام شد!
این فایل جدید را با همان نام به جای فایل قدیمی در محل خودش کپی کنید و برنامه Admin Pass Finder رو اجرا کنید. وای خدای من! نگ اسکرین هنوز به قوت خود باقیست!! انگار نه انگار که آن را پچ کرده اید!!! واقعا چه شده؟
شما احمقانه فکر کرده اید و فریب حقه برنامه نویس را خورده اید! احتمالا داخل برنامه رویه تست قفل دیگری هم وجود دارد که از دید شما مخفی مانده است. در واقع برنامه نویسان معمولا از دو یا چند روال تست قفل در برنامه های خود استفاده می کنند که همه آنها شبیه به هم هستند!! واقعا احمقانه است ولی شما این بار فریب خورده اید!
دوباره به برنامه دیباگر باز گردید و فایل پچ شده را داخل آن لود کنید. سپس به سراغ تکست ریفرنس ها بروید و با حوصله بیشتری در آن جستجو کنید.
کمی طول می کشد ولی همه جایش را خوب بگردید. خوب چه می بینید؟ درسته اینجا یک جمله دیگر نظیر همان اولی که مربوط به نگ اسکرین بود وجود دارد، وای خدای من یکی دیگه هم اینجاست!! و چندتا دیگه هم در جاهای دیگر!
نگران نباشید همه آنها یکسان هستند و به یک صورت پچ می شوند . پس به سراغ تک تک آنها رفته و همه را معکوس کنید. کاملا مطمئن شوید که چیزی را از قلم نیانداخته باشید. این بار مجددا تغییرات را ذخیره و فایل پچ شده را نیز در شاخه نصبی خود قرار دهید و برنامه پسورد فایندر رو اجرا کنید.
خیلی عالیه!! برنامه بالاخره به صورت کامل بالا اومد و حالا می تونید از آن استفاده کنید. واقعا اسکاین احمقانه و زیبایی هست. این طور نیست؟
حال شما می توانید این OCX را به عنوان هدیه ای گران بها برای تهی دستانی که هیچ پول یا هوشی ندارند، بر روی وب سایت خود قرار دهید.من که واقعا از انجام این کرک لذت بردم شما رو نمی دونم؟
در درس های آینده به طرح های حفاظتی قوی تری حمله خواهیم کرد که از حقه های پیچیده تری برای تسلیم کردن ما استفاده کرده اند. ما با هم این حقه ها را کشف و خنثی خواهیم نمود . ان شاالله