01-06-2012، 07:40 PM
اطلاعات بیشتر :
جلسه ی اول
معرفی Cracking
کرک کردن در واقعا به معنای این هست که ما بدون داشتن سورس برنامه بتوانیم تغییراتی روی برنامه های مختلف اعمال کنیم.
معمولا کرکینگ با هکینگ اشتباه گرفته میشود .
هکینگ صرفا بک عملیات خرابکارانه است ولی کرکینگ برداشتن محدودیت های برنامه است.
Assembly
آشنای با این زبان برنامه نویسی پیچیده و سخت کار مارا در کرک کردن خیلی راحت میکند.
ولی نیازی به یاد گیری کامل آن نیست.
به تعریف چند اصتلاح می پردازیم :
بیت : به کوچکترین جز تشکیل دهنده ی هر واحد اصلاعاتی یه بیت گفته میشود.
بایت: به مجموعه هر 8 بیت یک بایت گفته میشود.
سگمنت: ناحیه ای از حافظه است که آدرس شروع آن بر 16 قابل تقسیم است.
اندازه ی هر سگمنت میتواند تا حد 64کیلو بایت باشد.
4 نوع سگمنت وجود دارد :
1.سگمنت کد
2.سگمنت داده
3.سگمنت پشته
4.سگمنت اضافی
تبدیل مبناها
شما باید قادر باشید اعداد را در مبناهای 2 و 10 و 16به همدیگر تبدیل کنید که میتوانید از ماشین حساب ویندوز استفاده کنید.
اعدادی که در مبنای 2 میباشند به آنها باینری نیز گفته میشود و ارقام آن از 2 کوچکتر است (یعنی فقط از 0و1 تشکیل میشود)
اعدادی که در مبنای 10 میباشند همان اعداد معمولی هستند که به آنها دسیمال نیز گقته میشود.
اعدادی که در مبنای 16 میباشند ارقام آن از 16 کوچکتراند (یعنی از 0 تا 15) با این تفاوت که اعداد 10 تا 15 با جای عدد از حرو ف A تا F استفاده میشوند:
10 11 12 13 14 15
A B C D E F
اعدادی که در این مبنا میباشند هگزا دسیمال نیز گفته میشود.
Grammer Crack 1
رجیستر:
درداخل CPU حافظه های سریع به نام ثبات ها وجود دارند چون دستیابی به ثباتها سریع تر از دستیابی به حافظه است در صورتی که فقط از ثباتها استفاده میکنند بسیار سریع تر از دستوراتی که عملوندهای آنها در حافظه اند اجرا میشوند.
ثبات های عمومی :
AX
BX
CX
DX
که همه ی آنها برای انتقال داده بین CPU و ثبات ها به کار میرود.
دستورات اسمبلی برای کرک کردن :
دستور MOV برای انتقال داده های از محلی به محل دیگر مورد استفاده قرار میگیرد و فرم کلی آن به این صورت است:
Mov ax , 40 مقدار 40 در ثبات AX ذخیره میکند.
Mov ax , dx انتقال محتویات dx به ax
دستور Add
این دستور برای جمع کردن بین دو عدد در ثبات ها مورد استفاده قرار میگیرد .
Mov ax , 40 مقدار 40 در ثبات AX ذخیره میکند.
Mov bx , 32 مقدار 32 در ثبات BX ذخیره میکند.
Add bx , ax مقدار ثبات Ax رو با Bx جمع میکند و مقدار 72 در Bx ریخته میشود.
دستور Sub
از این دستور برای تفریق کردن بین 2 عدد در ثبات ها استفاده میشود .
Mov ax , 40 مقدار 40 در ثبات ax ریخته میشود.
Mov bx , 32 مقدار 32 در ثبات bx ریخته میشود.
Sub ax , bx مقدار Bx از Ax کم میشود و مقدار 12 در ثبات Ax ریخته میشود.
دستور Jmp
برای انتقال به یک نقطه ی خاص به کار بردن میشود.
Jmp e1 زمانی که برنامه به این خط میرسد به سطری که نامش e1 است پرش میکند.
Grammer Crack2
آموزش استفاده از Jump های شرطی:
برای مقایسه و یا پرش به نقطه ی خاصی مورد استفاده قرار میکیرد.
Jump ها رو به برای شما به همراه معنی تعریف میکنم:
Jne پرش در صورت عدم تساوی
Je پرش در صورت مساوی بودن
Jmp پرش به صورت مستقیم
Ja پرش در صورت بیشتر بودن
Jna پرش در صورت بیشتر نبودن
Jae پرش در صورت بیشتر یا مساوی بودن
Jnae پرش در صورت بیشتر یا مساوی نبودن
Jb پرش در صورت کمتر بودن
Jnb پرش در صورت کمتر نبودن
Jbe پرش در صورت کمتر یا مساوی بودن
jnbe پرش در صورت کمتر یا مساوی نبودن
Jg پرش در صورت بزرگتر بودن
jng پرش در صورت بزرگتر نبودن
jge پرش در صورت بزرگتر یا مساوی بودن
Jng پرش در صورت بزرگتر یا مساوی نبودن
Jl پرش در صورت کوچکتر بودن
Jnl پرش در صورت کوچکتر نبودن
jle پرش در صورت کوچکتر یا مساوی بودن
jnle پرش در صورت کوچکتر با مساوی نبودن
پشته(Stack)
حافظه ی خاصی در خارج از CPU است که برای ذخیره موقت داده بکار می رود
Push
قرار دادن عنصری را در پشته Push کردن می گویند.
POP
و خارج کردن عنصری را از پشته pop کردن میگویند.
جمع آوری اطلاعات
می توان گفت اولین و مهمترین قدم در کرک جمع آوری اطلاعات راجبع سیستم و یا نرم افزار مورد نظر است. بدون داشتن این اطلاعات قدم های بعدی تقریبا بی نتیجه و صرفا مبتنی بر آزمایش و خطا خواهد بود که کاری بسیار وقت گیر و طاقت فرسا است. بدیهی است که هرچه اطلاعات شما در مورد اجزا سازنده، روابط بین آنها و سایر موارد بیشتر باشد، قدم های بعدی، شما را با سرعت بسیار بیشتری به هدف می رسانند.
در مرحله جمع آوری اطلاعات ، آزمایش های مختلفی بر روی نرم افزار مورد نظر صورت می گیرد که در این فصل به آنها خواهیم پرداخت.
بررسی فایل های اجرایی به صورت ایستا
مرحله اول از جمع آوری اطلاعات، نیازی به اجرا شدن فایل مورد نظر نداشته و در حقیقت آن را به صورت ایستا بررسی می کند و بیشتر بر روی ساختار فیزیکی فایل تاکید دارد.
شناسایی نوع کامپایلر
شناسایی نوع کامپایلر می تواند استراتژی ما را در مراحل بعد کاملا تحت تاثیر قرار می دهد. زیرا معمولا هر کامپایلر در ویندوز ساختار خاصی را برای مدیریت و سازماندهی کدها داده ها و منابع در فایل اجرایی خاص خود در نظر می گیرد که با کامپایلرهای دیگر کاملا متفاوت است در نتیجه، شناسایی نوع کامپایلر اولین قدم در جمع آوری اطلاعات محسوب میشود.
خصوصیات فایل های اجرایی در کامپایلرها مختلف
اکثر کامپایلرهای سطح بالا ابتدا کدهای نوشته شده را زبان سطح پایین ترجمه کرده و سپس آنرا کامپایلر می کنند این کار بیشتر به دلیل کاهش پیچیدگیهای موجود در زبان های سطح بالا صورت می گیرد و در حقیقت بار کامپایلرهای نهایی کاهش می دهد به عنوان مثال زبان visual C++ متکی بر کامپایلر micro assembler و زبان C++ Builder متکی بر کامپایلر Turbo assembler است
Visual C++
فایل های اجرای تولید شده توسط Visual C++ به طور کامل به زبان ماشین ترجمه می شود اسامی و برچسبها وسایر راهنماها در فایل های اجرایی حذف شده و قابل دسترس نیستند.
معمولا منابع فایل های اجرایی شده، منابع استاندارد از قبیل Dialog , Bitmap و ... هستند.
فایل های اجرایی تولید شده توسط Visual C++از سرعت بالایی برخوردار هستند. به همین دلیل برای نوشتن درایورهای سخت افزاری و برنامه های که نیاز به سرعت بالا دارند از آن استفاده می شود.
C++Builder و Delphi
فایل های اجرایی تولید شده توسط این زبانها تقریبا خصوصیات مشترکی دارد. ازجمله این که اسامی کلاسها و اشیاء موجود در برنامه فایل اجرایی نهایی نیز وجود دارد که این امر باعث خوانایی بیشتر فایل های اجرایی آنها شده و در نتیجه مراحل Decompile شدن آنها به سادگی صورت می گیرد.
Visual Basic
فایل های اجرای تولید شده توسط Visual Basic کاملا به زبان ماشین ترجمه نمی شود و بطور معمول از توابع API به طور مستقیم استفاده نمی کند کلیه کارهای اصلی از قبیل مقایسها، انتصاب ها، فراخوانی توابع و ... از فایل ها توسط توابع کتابخانه MSVBVM در حقیقت فایلهای اجرایی تولید شده حاوی حجم اندکی کد ماشین بعلاوه فراخوانی ها متعددی از فایل MsvbmXX.dll هستند به همین دلیل حجم فایلهای اجرایی تولید شده بسیار کوچک بوده و سرعت پایین برخودار هستند.
(Vb,C++).Net
ساختار اجرایی فایل های تولید شده توسط کامپایلر .Net با ساختار فایل های تولید شده توسط کامپایلرها کاملا متفاوت است کدها به زبان ماشین ترجمه نمی شوند بلکه به یک زبان واسطه به نام IL ترجمه شده و توابع موجود در کتابخانه های .NET Farmework طی مراحل آنها به دستورات قابل اجرا توسط ماشین تبدیل می کند همین امر باعث شده است که فایلهای اجرایی تولید شده توسط این زبان ها بسیار کند بوده و منابع سیستم را با سرعت بالایی مصرف کنند.
جلسه ی اول
معرفی Cracking
کرک کردن در واقعا به معنای این هست که ما بدون داشتن سورس برنامه بتوانیم تغییراتی روی برنامه های مختلف اعمال کنیم.
معمولا کرکینگ با هکینگ اشتباه گرفته میشود .
هکینگ صرفا بک عملیات خرابکارانه است ولی کرکینگ برداشتن محدودیت های برنامه است.
Assembly
آشنای با این زبان برنامه نویسی پیچیده و سخت کار مارا در کرک کردن خیلی راحت میکند.
ولی نیازی به یاد گیری کامل آن نیست.
به تعریف چند اصتلاح می پردازیم :
بیت : به کوچکترین جز تشکیل دهنده ی هر واحد اصلاعاتی یه بیت گفته میشود.
بایت: به مجموعه هر 8 بیت یک بایت گفته میشود.
سگمنت: ناحیه ای از حافظه است که آدرس شروع آن بر 16 قابل تقسیم است.
اندازه ی هر سگمنت میتواند تا حد 64کیلو بایت باشد.
4 نوع سگمنت وجود دارد :
1.سگمنت کد
2.سگمنت داده
3.سگمنت پشته
4.سگمنت اضافی
تبدیل مبناها
شما باید قادر باشید اعداد را در مبناهای 2 و 10 و 16به همدیگر تبدیل کنید که میتوانید از ماشین حساب ویندوز استفاده کنید.
اعدادی که در مبنای 2 میباشند به آنها باینری نیز گفته میشود و ارقام آن از 2 کوچکتر است (یعنی فقط از 0و1 تشکیل میشود)
اعدادی که در مبنای 10 میباشند همان اعداد معمولی هستند که به آنها دسیمال نیز گقته میشود.
اعدادی که در مبنای 16 میباشند ارقام آن از 16 کوچکتراند (یعنی از 0 تا 15) با این تفاوت که اعداد 10 تا 15 با جای عدد از حرو ف A تا F استفاده میشوند:
10 11 12 13 14 15
A B C D E F
اعدادی که در این مبنا میباشند هگزا دسیمال نیز گفته میشود.
Grammer Crack 1
رجیستر:
درداخل CPU حافظه های سریع به نام ثبات ها وجود دارند چون دستیابی به ثباتها سریع تر از دستیابی به حافظه است در صورتی که فقط از ثباتها استفاده میکنند بسیار سریع تر از دستوراتی که عملوندهای آنها در حافظه اند اجرا میشوند.
ثبات های عمومی :
AX
BX
CX
DX
که همه ی آنها برای انتقال داده بین CPU و ثبات ها به کار میرود.
دستورات اسمبلی برای کرک کردن :
دستور MOV برای انتقال داده های از محلی به محل دیگر مورد استفاده قرار میگیرد و فرم کلی آن به این صورت است:
Mov ax , 40 مقدار 40 در ثبات AX ذخیره میکند.
Mov ax , dx انتقال محتویات dx به ax
دستور Add
این دستور برای جمع کردن بین دو عدد در ثبات ها مورد استفاده قرار میگیرد .
Mov ax , 40 مقدار 40 در ثبات AX ذخیره میکند.
Mov bx , 32 مقدار 32 در ثبات BX ذخیره میکند.
Add bx , ax مقدار ثبات Ax رو با Bx جمع میکند و مقدار 72 در Bx ریخته میشود.
دستور Sub
از این دستور برای تفریق کردن بین 2 عدد در ثبات ها استفاده میشود .
Mov ax , 40 مقدار 40 در ثبات ax ریخته میشود.
Mov bx , 32 مقدار 32 در ثبات bx ریخته میشود.
Sub ax , bx مقدار Bx از Ax کم میشود و مقدار 12 در ثبات Ax ریخته میشود.
دستور Jmp
برای انتقال به یک نقطه ی خاص به کار بردن میشود.
Jmp e1 زمانی که برنامه به این خط میرسد به سطری که نامش e1 است پرش میکند.
Grammer Crack2
آموزش استفاده از Jump های شرطی:
برای مقایسه و یا پرش به نقطه ی خاصی مورد استفاده قرار میکیرد.
Jump ها رو به برای شما به همراه معنی تعریف میکنم:
Jne پرش در صورت عدم تساوی
Je پرش در صورت مساوی بودن
Jmp پرش به صورت مستقیم
Ja پرش در صورت بیشتر بودن
Jna پرش در صورت بیشتر نبودن
Jae پرش در صورت بیشتر یا مساوی بودن
Jnae پرش در صورت بیشتر یا مساوی نبودن
Jb پرش در صورت کمتر بودن
Jnb پرش در صورت کمتر نبودن
Jbe پرش در صورت کمتر یا مساوی بودن
jnbe پرش در صورت کمتر یا مساوی نبودن
Jg پرش در صورت بزرگتر بودن
jng پرش در صورت بزرگتر نبودن
jge پرش در صورت بزرگتر یا مساوی بودن
Jng پرش در صورت بزرگتر یا مساوی نبودن
Jl پرش در صورت کوچکتر بودن
Jnl پرش در صورت کوچکتر نبودن
jle پرش در صورت کوچکتر یا مساوی بودن
jnle پرش در صورت کوچکتر با مساوی نبودن
پشته(Stack)
حافظه ی خاصی در خارج از CPU است که برای ذخیره موقت داده بکار می رود
Push
قرار دادن عنصری را در پشته Push کردن می گویند.
POP
و خارج کردن عنصری را از پشته pop کردن میگویند.
جمع آوری اطلاعات
می توان گفت اولین و مهمترین قدم در کرک جمع آوری اطلاعات راجبع سیستم و یا نرم افزار مورد نظر است. بدون داشتن این اطلاعات قدم های بعدی تقریبا بی نتیجه و صرفا مبتنی بر آزمایش و خطا خواهد بود که کاری بسیار وقت گیر و طاقت فرسا است. بدیهی است که هرچه اطلاعات شما در مورد اجزا سازنده، روابط بین آنها و سایر موارد بیشتر باشد، قدم های بعدی، شما را با سرعت بسیار بیشتری به هدف می رسانند.
در مرحله جمع آوری اطلاعات ، آزمایش های مختلفی بر روی نرم افزار مورد نظر صورت می گیرد که در این فصل به آنها خواهیم پرداخت.
بررسی فایل های اجرایی به صورت ایستا
مرحله اول از جمع آوری اطلاعات، نیازی به اجرا شدن فایل مورد نظر نداشته و در حقیقت آن را به صورت ایستا بررسی می کند و بیشتر بر روی ساختار فیزیکی فایل تاکید دارد.
شناسایی نوع کامپایلر
شناسایی نوع کامپایلر می تواند استراتژی ما را در مراحل بعد کاملا تحت تاثیر قرار می دهد. زیرا معمولا هر کامپایلر در ویندوز ساختار خاصی را برای مدیریت و سازماندهی کدها داده ها و منابع در فایل اجرایی خاص خود در نظر می گیرد که با کامپایلرهای دیگر کاملا متفاوت است در نتیجه، شناسایی نوع کامپایلر اولین قدم در جمع آوری اطلاعات محسوب میشود.
خصوصیات فایل های اجرایی در کامپایلرها مختلف
اکثر کامپایلرهای سطح بالا ابتدا کدهای نوشته شده را زبان سطح پایین ترجمه کرده و سپس آنرا کامپایلر می کنند این کار بیشتر به دلیل کاهش پیچیدگیهای موجود در زبان های سطح بالا صورت می گیرد و در حقیقت بار کامپایلرهای نهایی کاهش می دهد به عنوان مثال زبان visual C++ متکی بر کامپایلر micro assembler و زبان C++ Builder متکی بر کامپایلر Turbo assembler است
Visual C++
فایل های اجرای تولید شده توسط Visual C++ به طور کامل به زبان ماشین ترجمه می شود اسامی و برچسبها وسایر راهنماها در فایل های اجرایی حذف شده و قابل دسترس نیستند.
معمولا منابع فایل های اجرایی شده، منابع استاندارد از قبیل Dialog , Bitmap و ... هستند.
فایل های اجرایی تولید شده توسط Visual C++از سرعت بالایی برخوردار هستند. به همین دلیل برای نوشتن درایورهای سخت افزاری و برنامه های که نیاز به سرعت بالا دارند از آن استفاده می شود.
C++Builder و Delphi
فایل های اجرایی تولید شده توسط این زبانها تقریبا خصوصیات مشترکی دارد. ازجمله این که اسامی کلاسها و اشیاء موجود در برنامه فایل اجرایی نهایی نیز وجود دارد که این امر باعث خوانایی بیشتر فایل های اجرایی آنها شده و در نتیجه مراحل Decompile شدن آنها به سادگی صورت می گیرد.
Visual Basic
فایل های اجرای تولید شده توسط Visual Basic کاملا به زبان ماشین ترجمه نمی شود و بطور معمول از توابع API به طور مستقیم استفاده نمی کند کلیه کارهای اصلی از قبیل مقایسها، انتصاب ها، فراخوانی توابع و ... از فایل ها توسط توابع کتابخانه MSVBVM در حقیقت فایلهای اجرایی تولید شده حاوی حجم اندکی کد ماشین بعلاوه فراخوانی ها متعددی از فایل MsvbmXX.dll هستند به همین دلیل حجم فایلهای اجرایی تولید شده بسیار کوچک بوده و سرعت پایین برخودار هستند.
(Vb,C++).Net
ساختار اجرایی فایل های تولید شده توسط کامپایلر .Net با ساختار فایل های تولید شده توسط کامپایلرها کاملا متفاوت است کدها به زبان ماشین ترجمه نمی شوند بلکه به یک زبان واسطه به نام IL ترجمه شده و توابع موجود در کتابخانه های .NET Farmework طی مراحل آنها به دستورات قابل اجرا توسط ماشین تبدیل می کند همین امر باعث شده است که فایلهای اجرایی تولید شده توسط این زبان ها بسیار کند بوده و منابع سیستم را با سرعت بالایی مصرف کنند.
گروه دور همی پارسی کدرز
https://t.me/joinchat/GxVRww3ykLynHFsdCvb7eg
https://t.me/joinchat/GxVRww3ykLynHFsdCvb7eg