مدیر کل سایت
ارسالها: 4,843
موضوعها: 1,610
تاریخ عضویت: Apr 2011
اعتبار:
158
دستور CMP
شکل استفاده : CMP dest,src
هدف : مقايسه دو پارامتر با يکديگر و ذخيره پاسخ در فلگ ها
مثال : CMP AX,03h
اين دستور يکی از دستورات مهم تو کار کرکه. از اين دستور برای مقايسه دو مقدار در يک برنامه استفاده ميشه مثلا مقايسه دو شماره سريال !
جواب مقايسه ( درست يا نادرست بودن مقايسه ) در فلگ ها ( معمولا فلگ صفر ، فلگ صفر يکی از فلگ های موجود بين فلگ هاست که در انجام اعمالی مثل مقايسه مورد استفاده قرار ميگيره )ذخيره ميشه.
دستور INT
شکل استفاده : INT int_num
هدف : فراخوانی يک تابع که معمولا در BIOS ذخيره ميشود
مثال : INT 10h
بطور کل شما در کرکينگ برنامه های تحت ويندوز تقريبا هيچ وقت با اين دستور برخورد نميکنيد ولی دونستن اين دستور مفيد خواهد بود.
دستور JMP
شکل استفاده : JMP address
هدف : پرش به قسمتی از کد برنامه
مثال : JMP 00402011
اين دستور يک پرش غير شرطی هست که به محل مورد نظر در کد پرش ميکنه.
دستورهای مختلفی در رابطه با پرشهای شرطی وجود داره که مهمترين های اونها برای ما به شرح زير هستند :
JZ که در صورتی که فلگ صفر ، ست شده باشه ( يعنی دارای مقدار يک باشه ) پرشی به محل مشخص شده در جلوی اون انجام ميده. مثال : JZ 00402011
JNZ که در صورتی که فلگ صفر ، ست نشده باشه ( يعنی دارای مقدار صفر باشه ) پرشی به محل مشخص شده در جلوی اون انجام ميده. مثال : JNZ 00402011
JE که همون کار JZ رو انجام ميده .
JNE که همون کار JNZ رو انجام ميده.
اين دستورات پرش شرطی معمولا بعد از انجام يک عمل مقايسه می آيند.
مثال :
CMP RealSerial , BadSerial
JNE GoAwayBadCracker
البته اين يک مثاله و در واقعيت از اين کلمات استفاده نميشه !
دستور MOV
شکل استفاده : MOV dest,src
هدف : مقدار src رو به dest کپی ميکنه
مثال : MOV AX,DX
شما وقتی که درون يک کد جلو بريد با تعداد زيادی از اين دستورات خواهيد ديد.
در حقيقت کار اين دستور بصورت زيره :
AX = DX
اين دستور چند مشابه هم داره مثل MOVSX که تقريبا همون کار رو انجام ميدن.
دستور OR
شکل استفاده : OR dest,src
هدف : يک عمل OR منطقی انجام ميده و نتيجه رو در dest ذخيره ميکنه.
مثال : OR DX,AX
دستور RET
شکل استفاده : RET
هدف : برای بازگشت از يک تابع به برنامه فراخواننده تابع استفاده ميشود.
مثال : RET
اين دستور معمولا در آخر يک تابع ديده ميشه و باعث ميشه که کنترل برنامه به کدی که تابع از اونجا فراخوانی شده برگرده.
خوب دوستان عزيز اينم بخش آخر اسمبلی در کرک بود.
البته زبان اسمبلی بسيار گسترده تر از اين چيزی که اينجا ما گفتيم.
اين فقط برای آشنايی با چند تا دستور بود که توی کار کرک باهاشون برخورد ميکنيم.
منبع : پرشین کرکر
مدیر کل سایت
ارسالها: 4,843
موضوعها: 1,610
تاریخ عضویت: Apr 2011
اعتبار:
158
اینها فقط یه سری دستورات ساده هستند که برای انجام کرک دونستنشون لازمه
Push ذخیره کردن یه ثبات رجیستری بعنوان مثال push eax میاد مقدار موجود در ثبات eax رو ذخیره میکنه
pop بازیابی کردن بعنوان مثال pop eax میاد مقدار موجود در ثبات رجیستری eax رو بازیابی میکنه و دوباره اونو برمیگردونه
mov کپی کردن فایل مبدا در فایل مقصد بعنوان مثال mov eax,esp ، این دستور مقدار esp رو در ثبات eax کپی میکنه
TEST مقایسه صورت میگیره بعنوان مثال test al,al میاد مقادیر al و al رو با هم مقایسه و یا تست میکنه
cmp اینم تقریباً کار دستور test رو انجام میده مثلاً cmp al , bl میاد مقادیر al و bl رو با هم تست میکنه
دستورات پرشی و همچنین پرشی شرطی رو هم باید بدونی
JE پرش در صورت صحیح بودن
JNE , JNZ
هر دو تای این دستور ها پرش در صورت نادرست بودن
JMP پرش بدون هیچ گونه شرط یعنی وقتی برنامه به این دستور برسه به طور اتوماتیک پرش رو انجام میده
NOP به معنای هیچی و با نوشتن این دستور برنامه هیچ عملی رو انجام نمیده
XOR این دستور هم به معنای هیچی و کار NOP رو انجام میده مثلاً XOR AL , AL
JE: پرش در صورت تساوی JNE : پرش در صورت عدم تساوی JZ : پرش در صورتی که فلگ خصا برابر صفر باشد JNZ : پرش در صورتی که فلگ خصا مقدار دهی شده باشد (غیر از صفر باشد) JA : پرش اگر مقدار بزرگتر باشد JB : پرش اگر مقدار کوچکتر باشد JBE : پرش اگر مقدار کوچکتر یا مساوی بود JAE : پرش اگر مقدار بزرگتر یا مساوی باشد JNS : پرش اگر مقدار مثبت باشد JS : پرش اگر منفی باشد NOP : برای اینکه کاری انجام نشه از این دستور استفاده میشه
چند تا از کدهای اصلی :
Call : برای صدا زدن یک تابع - مثل :
Call 004032DD که این یعنی به تابع توی خط 004042DD برو
JMP : که مخفف Jump به معنای پرش هست که به یه خط پرش میکنه - مثل :
JMP 0095ED29 : که این یعنی پرش کن به خط 0095ED29
MOV : که یه دستور برای ریختن چیزی توی یک متغیر ها و ... هست - مثل :
MOV EAX,1 : یعنی 1 رو بریز توی EAX
CMP : برای مقایسه کردن هست - مثل : CMP EDI,8 : یعنی مقایسه کن که مقدار EDI هشت هست یا نه - معمولا بعد CMP یع دستور شرطی هست مثلا CMP EDI,8 JE 004042DD یعنی اگر درست بود و EID برابر با 8 بود پرش کن به خط 004042DD و اگر درست نباشه ادامه میده.
ADD:اضافه کردن و یا علامت جمع ADD EAX , EBX این دستور مقدار EBX رو با مقدار EAX جمع میکنه و حاصل جمع این دو تا رو توی EAX قرار میده البته دستورات SUB برای تفریق - DIV برای تقسیم و MUL هم برای ضرب صورت میگیره
نوشته بالا Lord_Viper نوشتن
مدیر کل سایت
ارسالها: 4,843
موضوعها: 1,610
تاریخ عضویت: Apr 2011
اعتبار:
158
اطلاعات بیشتر :
جلسه ی اول
معرفی 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 طی مراحل آنها به دستورات قابل اجرا توسط ماشین تبدیل می کند همین امر باعث شده است که فایلهای اجرایی تولید شده توسط این زبان ها بسیار کند بوده و منابع سیستم را با سرعت بالایی مصرف کنند.
کاربر 1 ستاره
ارسالها: 270
موضوعها: 94
تاریخ عضویت: Jun 2011
اعتبار:
7
درود:
امین جان ممنون به خاطر پست خوبت در کرک نرم افزار idm باید دنبال 7 دستور case بگردی
کد case چه کاربردی داره ؟ برای چی باید دنبال کد case بگردیم ممنون .
با همه چيز درآميز و با هيچ چيز آميخته مشو
که در انزوا پاک ماندن نه سخت است و نه با ارزش
-
-
-
مدیر کل سایت
ارسالها: 4,843
موضوعها: 1,610
تاریخ عضویت: Apr 2011
اعتبار:
158
کد case میشه مقاله اموزشی که خوندی بصورت کامل بزاری ؟
مدیر کل سایت
ارسالها: 4,843
موضوعها: 1,610
تاریخ عضویت: Apr 2011
اعتبار:
158
شب چکش میکنم الان پهنا باند دانلود ندارم