ReverseEngineering – Telegram
ReverseEngineering
1.24K subscribers
40 photos
10 videos
55 files
666 links
Download Telegram
دستورالعمل CMP

دو عملوند رو مقایســه میکنه معمولا در اجرای شرطی مورد اســتفاده قرار میگیره این دستورالعمل اساسا برای مقایسه این که آیا عملوند برابره یا نه یک عملوند رو از عملوند دیگه کم میکنه که باعث اختلال در عملوند های منبع یا مقصد نمیشه از اون به همراه دستورالعمل پرش شرطی برای تصمیم گیری استفاده میشه مثال CMP:

CMP operand1,operand2

Operand1 = 10

Operand2 = 20

CMP 10,5



خب حالا CMP چکار‌ میکنه دو فیلد داده عددی رو مقایسه میکنه عملوند مقصد میتونه در ثبات یا در حافظه باشه عملوند منبع میتونه یک داده ثابت فوری ثبات یا حافظه باشه بیش تر برای مقایسه این که یک مقدار شمارنده به تعداد دفعاتی که یک حلقه برای اجرا نیاز داره رسیده استفاده میشه
#cmp
#command
#operand
👍15🔥1
دوستان ری اکشن بزنید که قوی تر بریم جلو و اگه میتونید لطفا کانال رو Share کنید
👍15
پرش غير شرطی Jump Unconditional

همان طور که قبلا گفتیم این کار با دستور JMP انجام میشه اجرای شرط ها
اغلب شــامل انتقال كنترل به آدرس دستورالعملی اســت كه از دستورالعمل اجرای
كنونی پیروی نمی کنه انتقال کنترل ممکنه رو به جلو باشــه برای اجرای مجموعه جدیدی از دستورالعمل یا قبلی اجرایی دوباره همان مراحل دســتورالعمل JMP اسم لیبلی رو در اختیار شما قرار میده که سریعا جریان کنترل
انتقال داده بشه سینتکس دستورالعمل JMP به شکل زیر است:

JMP label

#jmp
#unconditional
#پرش
#غیرشرطی
👍5
پرش شرطی Jump Conditional

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

#شرطی
#conditional
#jmp
👍4
❤‍🔥6👍2
در عکس زیر دســتورالعمل های پرش شرطی مورد اســتفاده در داده های بدون علامت
استفاده شدن برای عملیات منطقی کاربرد دارن
❤‍🔥6👍2
❤‍🔥6👍2
حلقه ها در زبان اسمبلی

دستورالعمل JMP میتونه برای پیاده سازی حلقه ها استفاده شه به عنوان مثال قطعه کد زیر میتونه 10 بار <LOOP-BODY> رو اجرا کنه

MOV CL,10
L1:
<LOOP-BODY>
DEC CL
JNZ L1
دستور اصلی LOOP


LOOP lable

#loop
#حلقه
#jmp
👍4
اعداد در زبان اسمبلی

داده های عددی به طور کلی در سیستم دودویی نمایش داده میشن دستورالعمل
های حسابی روی داده های باینری عمل میکنن وقتی اعداد روی صفحه نمایش
داده میشن یا از صفحه کلید وارد میشن به شکل ASCII هستن
👍3
اعداد دودویی را میتوان به چند شکل نشان داد:

فرم ASCII

فرم دهی (BCD) Binary Coded Decimal

نمایش ASCII
👍4
نمایش ASCII اعداد دهدهی به عنوان رشته ای از کاراکترهای ASCII ذخیره
میشن به عنوان مثال مقدار دهدهی 1234 به صورت زیر ذخیره میشه

34H 33 32 31

که 31H مقدار ASCII برای 1 اســت H32 مقدار ASCII برای ۲ است و غیره
چهار دستورالعمل برای پردازش اعداد در نمایش ASCII وجود دارد

*AAA - Ascii Adjust After Addition

*AAS - Asciii Adjust After Subtraction

*AAM - Asciii Adjust After Multiplication

*AAD - Ascii Adjust Before Division
👍3
نمایش BCD

دو نمایش BCD وجود داره


نمایش BCD بسته بندی نشده Unpacked BCD

نمایش BCD بسته بندی شده packed BCD

در نمایش BCD بسته بندی نشــده هر بایت معادل دودویی یک رقم دسیمال را
ذخیره میکنه به عنوان مثال اعداد 1234 به صورت زیر ذخیره میشه

04H 03 02 01

برای پردازش این اعداد دو دستورالعمل وجود داره

AAM - Ascii Adjust After Multiplication

AAD - Ascii Adjust Before Division


چهار دستورالعمل تنظیم اسکی AAD و AAM و AAS و AAA با نمایش BCD بسته بندی نشده (Unpacked BCD) قابل استفاده ان در نمایش BCD بسته بندی شده هر رقم با استفاده از 4 بیت ذخیره میشه دو رقم دهدهی در یک بایت بسته بندی میشن مثال 1234به صورت زیر ذخیره میشه

34H 12


برای پردازش این اعداد دو دستورالعمل وجود داره

DAA - Decimal Adjust After Addition

DAS - Decimal Adjust After Subtraction


نکته: در نمایش BCD بسته بندی شده هیچ پشتیبانی برای ضرب و تقسیم وجود نداره
👍3
بیت ها (bit) در مهندسی معکوس

در مهندسی معکوس بیت ها که کوتاه شده از "binary digit" استفاده میشن مهمترین نقش رو دارن از اونجا که اطلاعات در سیستم‌ها و فایل‌ها به صورت بیتی ذخیره میشن مهندسین معکوس برای تحلیل و بازسازی اطلاعات از بیت‌ها استفاده می‌کنن
بیت‌ها به عنوان واحدهای کوچیکتر داده‌ها که معمولا با مقادیر 0 و 1 هستن و در قالب رشته‌های بیتی در فایل‌ها و حافظه‌های سیستم ذخیره می‌شن به مهندسین معکوس کمک می‌کنند تا اطلاعات رو تحلیل کنن و به حالت اولیه اون برگردن این فرایند از تحلیل فایل‌های باینری یا کدگذاری دیجیتالی تا بازگشت داده‌های اصلی با بهره‌گیری از بیت‌ها انجام می‌شه

جا به جایی بیت ها در دو مرحله انجام میشه اول به صورت پایین جا به جا میشن و بعد به صورت بالا
👍3
طول رشته های متغیر میتونن به اندازه لازم کاراکتر داشته باشن به طور کلی طول رشته را با دو روش مشخص میکنیم

* معمولا طول رشته ذخیره میشه

* با استفاده از یک کاراکتر sentinel

میتونیم طول رشته رو با استفاده از نماد $ که نشون دهنده مقدار فعلی ذخیره کنیم مثال:

msg db َ Hello,Friendَ ,0xa

len equ $ - msg


اشــاره به بایت بعد از آخرین کاراکتر متغیر رشته msg بنابراین msg-$ طول رشته رو به ما میده
👍4
(Shadow space) فضای سایه چیست ؟

فضای سایه به عنوان یک مکان موقت برای ذخیره‌سازی آرگومان‌های ورودی عمل می‌کنه این فضا معمولاً به اندازه‌ی 128 بایته و برای نگهداریه مقادیر ورودی به توابع استفاده میشه
👍5
دستورالعمل های رشته در اسمبلی Assembly

دستورالعمل رشته ممکنه به یک عملوند منبع، یک عملوند مقصد یا هر دو نیاز داشته باشن برای سگمنت های 32 بیتی دستورالعمل های رشته ای به ترتیب از رجیسترهای ESI و EDI استفاده میکنن برای اشاره به عملوند منبع و مقصد برای ســگمنت های16 بیتی، از رجیسترهای SI و DI به ترتیب برای اشاره به منبع و مقصد استفاده میشه پنج دستورالعمل اساســی برای پردازش رشته ها وجود داره

MOVS
این دستور یک بایت Word یا Doubleword از داده رو از مکان حافظه به مکان دیگه ای منتقل میکنه

LODS
این دســتورالعمل از حافظه بارگیری میشه اگر این عملوند یک بایت باشه در رجیستر AL بارگیری میشه اگر عملوند یک کلمه باشد در یک رجیستر AL بارگیری میشه اگر عملوند یک کلمه باشه در یک ریجستر AX بارگزاری میشه و یک اگه یک Doubleword باشه در ریجستر EAX بارگزاری میشه

STOS
این دستورالعمل داده ها رو از ثبات AL، AX یا به EAX حافظه ذخیره میکنه

CMPS
این دســتورالعمل دو مورد داده رو در حافظه مقایســه میکنه داده ها میتونن از نظر اندازه کلمه یا doubleword و یا بایت باشن

SCAS
این دستورالعمل محتویات یک ثبات AL، AX یا EAX رو با محتوای یک مورد در حافظه مقایسه میکنه

👍5
ورژن های مختلف از دستورالعمل های رشته و فضای فرض شده از عملوندها
👍8
پیشوند REP هنگامی که قبل از دستورالعمل رشته ای تنظیم شده به عنوان مثال REP MOVSB ، باعث تکرار دستورالعمل بر اساس کانتر قرار داده شده در ثبات CX می شه REP دستورالعمل رو اجرا می کنه CX را با 1 کاهش میده و بررسی می کنه که آیا CX صفره پردازش دستورالعمل رو تا CX صفره تکرار می کنه

جهت عملیات را تعیین میکنه Direction Flag
DF

پیشوند REP دارای تغییرات زیره:


REP:
این تکرار غیر شرطیه این عمل را تا صفر CX تکرار می کنه

REPE/REPZ:
تکرار شرطیه عمل رو تکرار می کنه در حالی که فلگ صفر equal/zero رو نشون میده اون متوقف میشه وقتی که ZF نشون دهنده equal/zero نیست یا زمانی که CX صفر باشه
REPNE یا REPNZ:
اینم تکرار شرطیه این عملیات رو تکرار می کنه در حالی که فلگ صفر نشان دهنده equal/zero نیست هنگامی که ZF نشان از equal/zero یا CX به صفر کاهش یافته متوقف می شه
👍5
ارایه ها Array

قبلا بحث کردیم که دســتورالعمل های تعریف داده به اســمبلر برای اختصاص فضای ذخیره ســازی برای متغیرها استفاده میشـن متغیر همچنین میتونه با مقداری خاص شــروع بشه مقدار اولیه میتونه به صورت هگزادسیما 0x باینری 0b و یا دسیمال مشخص بشه بـه عنوان مثال میتونیم متغیر کلمه ”market” رو به هر یک از روش های زیر تعریف کنیم:


MARKET DW 12
MARKET DW OCH
MARKET DW 0110B
🔥5