ReverseEngineering – Telegram
ReverseEngineering
1.24K subscribers
40 photos
10 videos
55 files
666 links
Download Telegram
ثبات ایندکس Register Index

ثبات ایندکس 32 بیتی ESI و EDI و بخش های راســت 16 بیتی SI و DI برای
آدرس دهی ایندکس شده استفاده میشن و بعضی وقت ها داخل جمع و تفریق استفاده
میشه. دو مجموعه ثبات ایندکس Register Index وجود دارد

Source index شاخص مبدا برای عملیات روی رشته ها انجام میشه


Destination index شاخص مقصد برای عملیات روی رشته ها انجام میشه
#Registers
#registerindex
#sourceindex
#destinationindex
👍2
ثبات کنترلی Register Control

ثبات اشــاره گر دستورالعمل 32 بیتی و ثبات flag 32 بیتی در کنار هم به عنوان
ثبات کنترلی در نظر گرفته میشن
بسیاری از دستورها مقایسه و محاسبات ریاضی و تغییر وضعیت flag
ها و برخی دیگر از دستورالعمل های شرطی مقدار این flag ها را برای انتقال جریان
به بقیه مکان ها بررسی میکند

میخایم در مورد فلگ ها حرف بزنیم خب اصن فلگ چیه ؟

برای کنترل جریان اجرای برنامه استفاده میشه این مقادیر در حقیقت نشون دهنده ی وضعیت خاصی که برنامه به ما میگه که چه کاری باید انجام‌ بدیم

میخایم چند تا فلگ مهم رو نام ببریم و این که بگیم کارایی شون چیه

Overflow flag

نشان دهنده ی یک بیت پر ارزش سر ریز چپ ترین بیت از داده ها بعد از یک‌ عملیات محاسباتی هست

Direction flag

جهت چپ یا راســت را برای حرکت یا مقایسه داده های رشته تعیین میکنه وقتی مقدار DF 0 باشد عملیات رشته ای از چپ به راست
و وقتی مقدار 1 باشه عملیات رشته ها از راست به چپ انجام میشه

Interupt flag

تعییــن میکند کــه آیا وقفه های خارج از برنامه مثل ورودی صفحه کلید رو باید نادیده گرفت یا پردازش کرد وقتی مقدار 0 باشه وقفه خارجــی را غیرفعال میکنه و اگر روی 1 تنظیم باشه وقفه خارجی را فعال میکنه

Flag Trap

این امکان را میده که عملکرد پردازنده را به حالت پلکانی تنظیم کنیم و برای debug کردن برنامه ها استفاده میشه

Sign flag

این علامت توسط چپ ترین بیت نشان داده میشه اگر SF صفر باشه نتیجه مثبت
است و اگر یک باشد نتیجه منفیه

Zero flag

نشــان دهنده نتیجه یک عملیات ریاضی است در نتیجه غیر صفر flag با صفر تنظیم میشه و نتیجه اگر صفر شد 1 میشه


Auxiliary flag

انتقال بیت 3 به 4 است وقتی
تنظیم میشه که در یک عملیات حسابی 1 بایت باعث انتقال از بیت 3 به بیت 4 شه

Partiy flag
به تعداد کل 1 های موجود در نتیجه ی به دســت اومده از یک عملیات محاســباتی تنظیم میشه در صورتی که تعداد زوج بشه صفر اگر تعداد فرد باشه یک

Cary flag

مقدار نقلی از بیت پر ارزش تر (چپ ترین بیت) هست
#flag
#flags
#registercontrol
👍5
ثبات های سگمنت Registers Segment

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

ســگمنت کد Segment Code

شامل کلیه دستورالعمل هایی است که باید
اجرا شــه یک ثبات 16 Segment Code بیتی یــا ثبات CS آدرس آغازین
سگمنت کد رو ذخیره میکنه


سگمنت داده segment Data

شامل داده ها، ثابت ها هستن
یک رجیســتری 16 Segment Data بیتی یا ثبات DS آدرس شــروع data segment رو ذخیره میکنه.


سگمنت پشته segment Stack

این شامل داده ها و آدرس های بازگشت
رویه ها یا زیر برنامه هاست. این به عنوان یک ساختار داده ”stack ”پیاده سازی
شده ثبات Segment Stack یا SS آدرس شروع پشته رو ذخیره میکنه
جدای از رجیســترهای DS، CS و SS، ثبات های اضافی دیگری نیز وجود دارن

segment Extra سگمنت اضافه

FS و GS، که سگمنت های دیگری
را برای ذخیره داده ها ارائه میدن رجیسترهای سگمنت آدرس های شروع یک
سگمنت رو ذخیره میکنه. برای به دست آوردن مکان دقیق داده ها یا دستورالعمل ها
در یک سگمنت، مقدار offset مورد نیازه برای ارجاع هر مکان حافظه در یک
سگمنت پردازنده آدرس سگمنت در ثبات بخش را با مقدار offset مکان ترکیب میکنه


#segmentcode
#segmentextra
#segmentdata
#registerssegment
👍2
فراخوان های سیستمی Systsem Calls ها چین ؟
فراخوان های سیســتمی API هایی برای برقرار کردن رابطه بین فضای کاربر و فضای هسته (core) هستن فراخوان های سیستمیCalls System در لینوکس
می توانید در برنامه های اســمبلی خود از فراخوان های سیستمی لینوکس استفاده
کنید
#systemcalls
#API
👍2
قطعه کد زیر استفاده از فراخوان سیستمی sys_exit رو نشون میده

mov eax,1
int 0x80


کد فراخوان سیستمی sys_write

mov ebx,4
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80

#sysexit
#code
👍2
خب حالا دستور mov در اسمبلی برا چی استفاده میشه برای انتقال دادن مثلا

mov ebx,2

این یعنی 2 رو بریز یا انتقالش بده تو ریجستر ebx

انتقال داده ها از یک فضای
ذخیره سازی به فضای دیگه استفاده میشه

دستور mov به پنج شکل انجام میشه:

mov register,register

mov register,immediate

mov memory,immediate

mov register,memory

mov memory,register


نکته: هر دو عملوند (operand) داخل عملیات mov باید هم اندازه باشن
#mov
#operand
#assembly
#اسمبلی
3
فراخوان های سیستمی System Calls

#syscalls
#فراخوان_های_سیستمی
👍4🔥1
Review of addressing modes بررسی مد های ادرس دهی

(آدرس دهی فوری) یا آدرس در (ثبات یا حافظه) داده هایی است که به طور کلی
داده های منبع پس از عملیات بدون تغییر باقی میمونن
سه حالت اصلی آدرس دهی وجود داره:

1 آدرس دهی ثباتی register addressing

2 آدرس دهی فوری immediate addressing

3 آدرس دهی حافظه memory addressing
#memory
#addressingmodes
#مدهای_ادرس_دهی
👍4
ادرس دهی ثباتی register addressing

یک رجیســتر محتواش عملونده بســته به دستورالعمل رجیستر میتونه اولین عملوند دومین عملوند یا هر دو باشه از اون جا که پردازش داده ها بین ثبات ها شامل حافظه نیست،سریع ترین پردازش داده ها رو فراهم میکنه.


آدرس دهی فوری immediate addressing

یک عملوند فــوری یک مقدار ثابت یا یک عبــارت داره وقتی که یک دســتورالعمل با دو عملوند، از آدرس دهی فوری اســتفاده میکنه اولین عملوند ممکن است یک رجیستری یا یک مکان حافظه باشد و عملوند دوم
یک ثابت فوریه اولین عملوند طول داده را مشخص میکنه.



Direct memory addressing ادرس دهی حافظه مستقیم

هنگامی که عملوندها در حالت آدرس دهی حافظه مشــخص میشن دسترسی مســتقیم به حافظه اصلی، معمولا به segment data‌ لازم هست. این روش
آدرس دهی، به پردازش کندتر داده میشه برای قرار دادن مکان دقیق داده هــا در حافظه، به آدرس start segment نیاز داریم که معمولا در ثبات DS و یک مقدار offset وجود داره به این مقدار افست آدرس موثر میگیم در حالت آدرس دهی مستقیم، مقدار افست مستقیما به عنوان بخشی از دستورالعمل مشــخص میشه که معموال با نام متغیر مشخص میشه اسمبلر مقدار افست رو محاسبه میکنهو یک جدول symbol رو نگه میداره که مقادیر جبران کلیه متغیرهای مورد استفاده در برنامه رو ذخیره میکنه در آدرس دهی مســتقیم حافظه، یکی از عملوندها به یک مکان حافظه و عملوند
دیگری به یک ثبات اشاره میکنه.



آدرس دهی افست مستقیم Direct offset addressing

در این حالت آدرس دهی از عملگرهای حسابی برای مدیریت آدرس استفاده میشه
به عنوان مثال به مثال های زیر توجه کنید که جداول داده data of tables رو تعریف میکنه


آدرس دهی غیر مستقیم حافظه

این حالت آدرس دهی از قابلیت کامپیوتر از آدرس دهی Offset:Segment استفاده
میکنــه به طور کلی ثبات های پایه EBX، EBP( یا BX، BP )و رجیســترهای ایندکــس DI،SI که داخل اسکوئر براکت هستن برای رفرنس های حافظه کدگذاری شدن برای این استفاده میشن آدرس دهی غیر مســتقیم به طور کلی برای متغیرهای دارای چند تا عنصر مثل آرایه ها استفاده میشن

#Registers
#registeraddresing
👍4
Type Specifier نوع مشخص کننده

Byte 1 <= byte address

Word 2 <= byte address

Dword 4 <= byte address

Qword 8 <= byte address

Tbyte 10 <= byte address


#byte
#word
#dword
#qword
#tbyte
👍4
متغیر variable ها در زبان اسمبلی

دستورالعمل های مختلف رو جهت گرفتن فضای حافظه برای ذخیره ســازی متغیرها ارائه میدن دستورالعمل define که به شکل D نوشته میشه برای اختصاص دادن فضای ذخیره سازی استفاده میشـه
#variable
#command
🔥3
🔥3
دســتور TIMES

اجازه میده تا یک مقدار رو داخل متغیر چند بار قرار بدیم به عنوان مثال آرایه ای به نام arko و اندازه 8 را میتونیم با اســتفاده از عبارت زیر تعریف کنیم و با مقدار صفر مقداردهی کنیم
دستور TIMES برای ارایه ها و جدول ها کاربرد داره

arko TIMES 8 DW 0

#times
#variable
#command
👍3🔥2
ثابت ها (constants) در زبان اسمبلی

چند تا دستورالعمل داده شده که ثابت ها‌ رو تعریف میکنه

EQU

%assign

%define



در زبان اســمبلی دستورالعمل EQU برای تعریف ثابت استفاده میشه سینتکسش به صورت زیره

TOTOAL_PEOPLE equ 30



دستورالعمل assign%

برای تعریف ثابت های عددی استفاده میشه مثل دستور EQU سینتکس به صورت زیره

assign TOTOAL 15%


نکته: دستور assign% به حروف کوچیک‌ و بزرگ حساسه


دستورالعمل deifne%

تعریف ثابت های عددی و رشته ای (string) تعریف میشه این دستورالعمل شبیه به دستور define% در زبان C هست برای تعریف PRT سینتکس به صورت زیره

[define PRT [EBP+5%


#ثابت_ها
#constants
👍3
دستور های محاسباتی در اسمبلی

دستور INC


دســتور INC مخفف شده increaments يک واحد به عملوند خــودش اضافه میکنه

INC destination مقصد


دستور DEC مخفف شده decreaments

دستورDEC يک واحد از عملوند خودش کم میکنه

نکته:مقصد عملوند میتونه یک عملوند 8 بیتی، 16 بیتی یا 32 بیتی باشه

DEC destination



دستور های ADD و SUB

دســتورالعمل های ADD و SUB برای اضافه یا تفریق ساده از داده های باینری
در اندازه های بایت word و doubleword برای اضافه کردن یا تفریق عملوندهای 8 بیتی، 16 بیتی یا 32 بیتی به ترتیب استفاده میشه

دستور های ADD و SUB سینتکسشون به صورت زیره

ADD/SUB destination,source منبع

دستورالعمل SUB / ADD میتونن به شکل های زير استفاده بشن:

Register to register رجیستر به رجیتسر

Memory to register حافظه به ریجستر

Register to memory ریجستر به حافظه

Register to const data ریجستر به داده های ثابت

Memory to const data حافظه به داده های ثابت

نکته: بقیه دستورالعمل ها عملکرد memory-to-memory با استفاده از
دســتورهای SUB / ADD امکان پذیر نیست

#sub
#add
#inc
#dec
#memory
👍6
دستورالعمل MUL/IMUL

برای ضرب داده های باینری دو دستورالعمل وجود داره multiply (mul) داده های بدون علامت و (intege multiply) imul داده های علامت دار رو شامل میشه هر دو دستور روی فلگ cary و overflow تاثیر میزارن سینتکسش هم به صورت زیره

MUL/IMUL multiplier

MOV AL, 10
MOV DL, 25
MUL DL
MOV DL, 0FFH ; DL= -1
MOV AL, 0BEH ; AL = -66
IMUL DL


کد بالا برای این که دستور یا سینتکس imul/mul رو بخوبی درک کنید


دستورالعمل DIV/IDIV

دســتورالعمل(Divide )DIV برای داده های بدون علامت استفاده میشه و از IDIV(integer divide) برای داده های علامت دار سینتکسش هم به صورت زیره
DIV/IDIV divisor


#mul
#imlu
#div
#idiv
#syntax
🔥4
درود دوستان یک نکته هم بگم خدمتتون زبان برنامه نویسی C رو هم باید یاد بگیرید برای مهندسی معکوس و در این زبان تحلیل بدافزار هم استفاده میشه اگر دوس داشتید بعدا ابزار یا ویروس بنویسید ++C هم میتونید یاد بگیرید دیگه اینا رو رو چون ساده تر از اسمبلیه میتونید خودتون یاد بگیرید از سایت W3schools میتونید استفاده کنید یا رفرنس های دیگه و دوره های دیگه.
#c
#language
👍5
ReverseEngineering
درود دوستان یک نکته هم بگم خدمتتون زبان برنامه نویسی C رو هم باید یاد بگیرید برای مهندسی معکوس و در این زبان تحلیل بدافزار هم استفاده میشه اگر دوس داشتید بعدا ابزار یا ویروس بنویسید ++C هم میتونید یاد بگیرید دیگه اینا رو رو چون ساده تر از اسمبلیه میتونید…
چرا گفتم یاد بگیرید چون‌ ما در شرایطی که بخایم برنامه رو کرک کنیم ممکنه با عوض کردن شرط ها یا تغییر دادنشون برنامه مون کرک نشه در این شرایط باید کل برنامه رو decompile دیکامپایل کنیم و بتونیم کدشو حالا با هرچی نوشته شده تحلیل کنیم

#decompile
#code
👍6
Anti-debugging چیست

تکنیکیه که برای جلوگیری از تحلیل و اجرای debugger ها روی نرم افزار استفاده میشه این تکنیک معمولا توسط توسعه دهندگان Developer ها برنامه برای جلوگیری از دسترسی و تحلیل نرم افزارهای خودشون توسط کرکر ها استفاده میشه برای پیاده سازی anti-debugging توسعه دهندگان از روش های مختلفی استفاده میکنند مثال اضافه کردن کد های تشخیص debugger به برنامه جلوگیری از اجرای برنامه در debugger ها استفاده از کد های مخرب برای متوقف کردن debugger با این کار تحلیل و کرک کردن نرم افزار ها برای کرکر ها مشکل میشه و امنیت برنامه ها بیشتر میشه
#antidebugging
#انتی_دیباگینگ
#technique
🔥6
Obfuscation چیست

یک فرایند یا روش برنامه نویسیه که با هدف های محافظت از کد منبع source code یک برنامه کاهش اندازه فایل ها و محافظت از اطلاعات حساس استفاده میشه این روش یعنی تغییر ساختار و قالب کد منبع است جوری که افراد دیگه وقتی اونو میخونن به سختی یا غیر ممکن باشه تا نتونن کد رو بخونن یا تحلیلش کنن این کار با استفاده از تکنیک های مثل فشرده سازی، رمزنگاری،تغییر نام متغیرها و تابع ها و اضافه کردن کد های مجازی بدون معنی انجام بشه
#obfuscation
#مبهم_سازی
🔥5
دستورالعمل های منطقی در زبان اسمبلی

مجموعه دستورالعمل پردازشگر، دستورالعمل AND، OR، XOR، TEST و NOT
منطقی Boolean رو ارائه میدن که بیت ها را مطابق نیاز برنامه تســت، تنظیم
میکنه قالب این دستورالعمل ها به شکل زیره

#command
#not
#and
#or
#xor
#test
#assembly
🔥3