ReverseEngineering – Telegram
ReverseEngineering
1.24K subscribers
40 photos
10 videos
55 files
666 links
Download Telegram
(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
رویه ها در زبان اسمبلی

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

مثال:

proc_name:
procedure body
...
ret



رویه با استفاده از دستورالعمل CALL از تابع دیگه فراخوانی میشه دستورالعمل CALL
باید نام رویه فراخوانی شده ر به عنوان آرگومان همان طور که در زیر نشان
داده شده داشته باشه

CALL proc_name



با استفاده از called procedure دستورالعمل RET کنترل رو به حالت فراخوانی برمیگردونه
👍7
پشته (stack)

پشته یا stack یکی از انواع داده ساختار هاست که از اون برای ذخیره و بازیابی داده ها استفاده میشه پشته در طراحی و پیاده سازی سیستم های نرم افزاری و سخت افزاری استفاده میشود شیوه ی عملکردی stack بر اساس سیاست LIFO یعنی اخرین ورودی اولین خروجی با دستورالعمل Push Pop اطلاعات در پشته قرار داده میشن و برداشته میشن زبان اسمبلی دو تا دستور برای عملیات پشته ارائه میده این دستور ها دارای سینتکس زیرن:

PUSH operand

POP address/register
👍7
واحد نوشتن و خوندن از پشته word هست یعنی هر دفعه باید دو بایت رو push یا pop کنیم ثبات SP (stack pointer) همیشه به بالاترین کلمه وارد شده در پشته اشاره میکنه و در اول کار مقدار اون n است که همون تعداد بایت های پشته است

اجرای پشته دارای خصوصیات زیر است:


فقط word یا doubleword ها میتونن در پشته ذخیره شن نه یک بایت

شیوه ی عملکرد Stack بر اساس سیاست LIFO یعنی اخرین ورودی اولین خروجی است
👍7
ماکروها در زبان اسمبلی

نوشــتن یک ماکرو روش دیگه ای برای اطمینان از برنامه نویسی مدولار به زبان اسمبلی است.
ماکرو دنباله ای از دستورالعمل هاست که با یک نام اختصاص داده میشه و میتوخه در هر نقطه از برنامه مورد استفاده قرار بگیره
در NASM ماکروها با دستورالعمل macro% و endmacro% تعریف میشه ماکرو با دستورالعمل macro% شروع میشه و با endmacro% به پایان میرسه
نحوه سینتکسش به صورت زیره:

macro macro_name
number_of_params%
<macro body>
endmacro%



number_of_params پارامتر های عدد رو نشون میده
macro_name نام ماکرو رو مشخص میکنه

ماکرو با اســتفاده از نام ماکرو به همراه پارامترهای لازم فراخوانی میشه هنگامی که شما نیاز دارید چند بار از دنباله دستورالعمل ها در یک برنامه اســتفاده کنید میتونید اون دستورالعمل ها رو در یک ماکرو قرار بدید و به جای نوشتن دستورالعمل ها از اون استفاده کنید
🔥6👍3
مدیریت فایل ها در زبان اسمبلی

سیستم هر داده ورودی یا خروجی رو به عنوان جریان بایت در نظر میگیره
سه جریان فایل استاندارد وجود داره:

ورودی استاندارد (stdin)
خروجی استاندارد (stdout)
خطای استاندارد (stderr)
👍5🔥3
توصیف گر فایل File Denoscriptor

یک File Denoscriptor عدد صحیح 16 بیتی که به عنوان شناسه یک فایل اختصاص داده میشه وقتی که یک فایل جدید ایجاد شده یا یک فایل موجود باز میشه از File Denoscriptor برای دسترسی به فایل استفاده میشه

File Denoscriptor

جریان های استاندارد stderr ،stdout ,stdin
به ترتیب 0 1 2 هستن
👍8
یک روال یا تابع بازگشتی فرایندیه که خودش رو به طور مستقیم و یا غیر مستقیم فراخوانی می کنه بازگشت پذيري می تونه در الگوریتم های ریاضی زیادی مشاهده شه به عنوان مثال ، محاسبه فاکتوریل یک عدد رو در نظر بگیرید فاکتوریل عدد توسط یک معادله داده شده هست مثال:

Fact (n) = n * fact (n-1) for n > 0

به عنوان مثال: فاکتوریل 5 برابره با 1*2*3*4*5 = 5*فاکتوریل 4 هست و این میتونه نمونه خوبی برای نشون دادن یک روش بازگشتی باشه هر الگوریتم بازگشتی باید یک شرط پایان داشته باشد یعنی فراخوانی بازگشتی برنامه هنگام اجرای یک شرط باید متوقف بشه در مورد الگوریتم فاکتوریل شرط پایان زمانی مساوی میشه که (n (0 باشه
🔥6
Memory Address Register یا MAR چیست ؟

این Register همونجور که از اسمش پیداست آدرس های حافظه از داده ها و دستورالعمل ها رو داخل خودش نگه میداره این Register برای دسترسی به داده ها و دستورالعمل ها از حافظه RAM در طی اجرا شدن دستورالعمل ها مورد استفاده قرار میگیره فرض کنید CPU میخاد برخی از داده ها رو در حافظه RAM ذخیره کنه و یا بر عکس میخاد داده هایی رو از حافظه RAM فراخوانی کنه CPU در این گونه مواقع میاد و آدرس های داده هایی که در حافظه RAM باید قرار بگیرن رو داخل رجیستر MAR به صورت موقت ذخیره میکنه اگر اینجوری نبود CPU نمیدونست که دستورالعمل ها در کدوم مکان از حافظه RAM باید ذخیره شن پس اگر منطقی به این قضیه فکر کنیم وجود رجیستری به نام MAR لازمه
🔥7
اشاره گر فایل (Pointer File)

یک اشاره گر فایل مکان رو برای عمل خوندن یا نوشتن بعدی در فایل از نظر
بایت مشخص میکنه هر فایل به عنوان دنباله ای از بایت در نظر گرفته میشه
هر فایل باز با یک اشــاره گر فایل همراهه که offset در بایت ها رو مشخص میکنه نســبت به ابتدای فایل با باز کردن فایل اشاره گر فایل روی صفر تنظیم میشه
🔥7
به طور خلاصه فراخوان های سیســتمی مربوط به file handeling توضیح داده شده است
👍6
👍8
مراحل مورد نیاز برای استفاده از فراخوان های سیستم یکیه

* شماره فراخوان سیستمی رو داخل رجیستری EAX قرار بدید

آرگومان های مربوط به فراخوان سیستمی در رجیسترهای EBX ، ECX و غیره رو ذخیره کنید

* با وقفه مربوطه رو فراخوانی کنید (80h)

* نتیجه معمولاً در ثبات EAX برمی گرده
👍10
ایجاد و باز کردن فایل

فراخوان سیستم ()sys_creat شماره 8 رو در ثبات EAX قرار بدید

فایل نیم (filename) رو در رجیستری EBX قرار بدید

مجوزهای فایل رو داخل رجیستری ECX قرار بدید

فراخوان سیستم توصیف گر فایل (file denoscriptor) ایجاد شده رو در ثبات EAX برمیگردونه در صورت بروز خطا کد خطا در ثبات EAX هست
🔥8👍1
درود دوستان
لطفا تا جایی که میتونید کانال رو share کنید ممنون
👍8
باز کردن فایل موجود

برای باز کردن فایل موجود کارهای زیر رو باید انجام بدیم

فراخوان سیستم ()sys_open شماره 5 را در ثبات EAX قرار بدید

فایل نیم filename را در ریجستری EBX قرار بدید

حالت دسترسی فایل را در رجیستری ECX قرار بدید

مجوزهای (permissions) فایل رو در رجیستری EDX قرار بدید
فراخوان سیستم توصیف گر فایل ایجاد شده رو داخل ثبات EAX برمی گردونه در صورت بروز خطا کد خطا در ثبات EAX است

در بین حالت های دستیابی به فایل متداول ترین اونا اینا هستند:

read-write (2) و read-only (0) و write-only (1)


👍7
خوندن از یک فایل

برای خوندن از یک فایل باید کارهای زیر رو انجام بدیم

فراخوان سیستم ()sys_read شماره 3 رو داخل ثبات EAX قرار بدید

توصیف گر فایل رو داخل رجیستری EBX قرار بدید

اشاره گر به بافر ورودی رو داخل ثبات ECX قرار بدید

اندازه بافر رو قرار بدید یعنی شماره بایت ها برای خوندن رو داخل ثبات EDX قرار بدید system call تعداد بایت های خونده شده رو داخل ثبات EAX رو برمیگردونه در صورت بروز خطا کد خطا در EAX ثبت میشه


👍8