Parsi Coders

نسخه‌ی کامل: دستورات اسمبلی در کرک
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
دستور 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

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



خوب دوستان عزيز اينم بخش آخر اسمبلی در کرک بود.

البته زبان اسمبلی بسيار گسترده تر از اين چيزی که اينجا ما گفتيم.

اين فقط برای آشنايی با چند تا دستور بود که توی کار کرک باهاشون برخورد ميکنيم.

منبع : پرشین کرکر
اینها فقط یه سری دستورات ساده هستند که برای انجام کرک دونستنشون لازمه

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 نوشتن
اطلاعات بیشتر :

جلسه ی اول

معرفی 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 طی مراحل آنها به دستورات قابل اجرا توسط ماشین تبدیل می کند همین امر باعث شده است که فایلهای اجرایی تولید شده توسط این زبان ها بسیار کند بوده و منابع سیستم را با سرعت بالایی مصرف کنند.
درود:
امین جان ممنون به خاطر پست خوبت در کرک نرم افزار idm باید دنبال 7 دستور case بگردی
کد case چه کاربردی داره ؟ برای چی باید دنبال کد case بگردیم ممنون .
کد case میشه مقاله اموزشی که خوندی بصورت کامل بزاری ؟
(04-11-2012، 03:59 PM)Amin_Mansouri نوشته: [ -> ]کد case میشه مقاله اموزشی که خوندی بصورت کامل بزاری ؟

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