ثابت ها (constants) در زبان اسمبلی
چند تا دستورالعمل داده شده که ثابت ها رو تعریف میکنه
در زبان اســمبلی دستورالعمل EQU برای تعریف ثابت استفاده میشه سینتکسش به صورت زیره
دستورالعمل assign%
برای تعریف ثابت های عددی استفاده میشه مثل دستور EQU سینتکس به صورت زیره
نکته: دستور assign% به حروف کوچیک و بزرگ حساسه
دستورالعمل deifne%
تعریف ثابت های عددی و رشته ای (string) تعریف میشه این دستورالعمل شبیه به دستور define% در زبان C هست برای تعریف PRT سینتکس به صورت زیره
#ثابت_ها
#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 يک واحد به عملوند خــودش اضافه میکنه
دستور DEC مخفف شده decreaments
دستورDEC يک واحد از عملوند خودش کم میکنه
نکته:مقصد عملوند میتونه یک عملوند 8 بیتی، 16 بیتی یا 32 بیتی باشه
دستور های ADD و SUB
دســتورالعمل های ADD و SUB برای اضافه یا تفریق ساده از داده های باینری
در اندازه های بایت word و doubleword برای اضافه کردن یا تفریق عملوندهای 8 بیتی، 16 بیتی یا 32 بیتی به ترتیب استفاده میشه
دستور های ADD و SUB سینتکسشون به صورت زیره
ADD/SUB destination,source منبع
دستورالعمل SUB / ADD میتونن به شکل های زير استفاده بشن:
نکته: بقیه دستورالعمل ها عملکرد memory-to-memory با استفاده از
دســتورهای SUB / ADD امکان پذیر نیست
#sub
#add
#inc
#dec
#memory
دستور 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 تاثیر میزارن سینتکسش هم به صورت زیره
کد بالا برای این که دستور یا سینتکس imul/mul رو بخوبی درک کنید
دستورالعمل DIV/IDIV
دســتورالعمل(Divide )DIV برای داده های بدون علامت استفاده میشه و از IDIV(integer divide) برای داده های علامت دار سینتکسش هم به صورت زیره
#mul
#imlu
#div
#idiv
#syntax
برای ضرب داده های باینری دو دستورالعمل وجود داره 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
#c
#language
👍5
ReverseEngineering
درود دوستان یک نکته هم بگم خدمتتون زبان برنامه نویسی C رو هم باید یاد بگیرید برای مهندسی معکوس و در این زبان تحلیل بدافزار هم استفاده میشه اگر دوس داشتید بعدا ابزار یا ویروس بنویسید ++C هم میتونید یاد بگیرید دیگه اینا رو رو چون ساده تر از اسمبلیه میتونید…
چرا گفتم یاد بگیرید چون ما در شرایطی که بخایم برنامه رو کرک کنیم ممکنه با عوض کردن شرط ها یا تغییر دادنشون برنامه مون کرک نشه در این شرایط باید کل برنامه رو decompile دیکامپایل کنیم و بتونیم کدشو حالا با هرچی نوشته شده تحلیل کنیم
#decompile
#code
#decompile
#code
👍6
Anti-debugging چیست
تکنیکیه که برای جلوگیری از تحلیل و اجرای debugger ها روی نرم افزار استفاده میشه این تکنیک معمولا توسط توسعه دهندگان Developer ها برنامه برای جلوگیری از دسترسی و تحلیل نرم افزارهای خودشون توسط کرکر ها استفاده میشه برای پیاده سازی anti-debugging توسعه دهندگان از روش های مختلفی استفاده میکنند مثال اضافه کردن کد های تشخیص debugger به برنامه جلوگیری از اجرای برنامه در debugger ها استفاده از کد های مخرب برای متوقف کردن debugger با این کار تحلیل و کرک کردن نرم افزار ها برای کرکر ها مشکل میشه و امنیت برنامه ها بیشتر میشه
#antidebugging
#انتی_دیباگینگ
#technique
تکنیکیه که برای جلوگیری از تحلیل و اجرای debugger ها روی نرم افزار استفاده میشه این تکنیک معمولا توسط توسعه دهندگان Developer ها برنامه برای جلوگیری از دسترسی و تحلیل نرم افزارهای خودشون توسط کرکر ها استفاده میشه برای پیاده سازی anti-debugging توسعه دهندگان از روش های مختلفی استفاده میکنند مثال اضافه کردن کد های تشخیص debugger به برنامه جلوگیری از اجرای برنامه در debugger ها استفاده از کد های مخرب برای متوقف کردن debugger با این کار تحلیل و کرک کردن نرم افزار ها برای کرکر ها مشکل میشه و امنیت برنامه ها بیشتر میشه
#antidebugging
#انتی_دیباگینگ
#technique
🔥6
Obfuscation چیست
یک فرایند یا روش برنامه نویسیه که با هدف های محافظت از کد منبع source code یک برنامه کاهش اندازه فایل ها و محافظت از اطلاعات حساس استفاده میشه این روش یعنی تغییر ساختار و قالب کد منبع است جوری که افراد دیگه وقتی اونو میخونن به سختی یا غیر ممکن باشه تا نتونن کد رو بخونن یا تحلیلش کنن این کار با استفاده از تکنیک های مثل فشرده سازی، رمزنگاری،تغییر نام متغیرها و تابع ها و اضافه کردن کد های مجازی بدون معنی انجام بشه
#obfuscation
#مبهم_سازی
یک فرایند یا روش برنامه نویسیه که با هدف های محافظت از کد منبع source code یک برنامه کاهش اندازه فایل ها و محافظت از اطلاعات حساس استفاده میشه این روش یعنی تغییر ساختار و قالب کد منبع است جوری که افراد دیگه وقتی اونو میخونن به سختی یا غیر ممکن باشه تا نتونن کد رو بخونن یا تحلیلش کنن این کار با استفاده از تکنیک های مثل فشرده سازی، رمزنگاری،تغییر نام متغیرها و تابع ها و اضافه کردن کد های مجازی بدون معنی انجام بشه
#obfuscation
#مبهم_سازی
🔥5
دستورالعمل AND
برای پشتیبانی از عبارات منطقی با انجام عملکرد بیتی و AND
اســتفاده میشه اگر بیت های که با هم مچ یعنی بیت هایی که با هم مطابق دارن از هر دو عملوند 1 باشنعملکرد AND
بیتی 1 رو برمی گردونه در غیر این صورت مقدار 0 برمی گرده مثال:
Operand1: 0101
Operand2: 0011
After AND -> Operand1: 0001
نکته:از روش AND میتونیم برای صفر کردن یک یا چند بیت اســتفاده کنیم
#and
#command
#operand
برای پشتیبانی از عبارات منطقی با انجام عملکرد بیتی و AND
اســتفاده میشه اگر بیت های که با هم مچ یعنی بیت هایی که با هم مطابق دارن از هر دو عملوند 1 باشنعملکرد AND
بیتی 1 رو برمی گردونه در غیر این صورت مقدار 0 برمی گرده مثال:
Operand1: 0101
Operand2: 0011
After AND -> Operand1: 0001
نکته:از روش AND میتونیم برای صفر کردن یک یا چند بیت اســتفاده کنیم
#and
#command
#operand
👍2
دستورالعمل OR
برای پشتیبانی از عبارت های منطقی، با انجام عمل بیتی OR استفاده میشه اگر بیت های مچینگ از هر یک یا هر دو عملوند یکی
باشه عملگر OR بیتی 1 رو برمیگردونه اگر هر دو بیت صفر باشن 0 برمی گرده مثال:
نکته:از OR میتونیم برای تنظیم یک یا چند بیت استفاده کنیم
#or
#command
#operand
برای پشتیبانی از عبارت های منطقی، با انجام عمل بیتی OR استفاده میشه اگر بیت های مچینگ از هر یک یا هر دو عملوند یکی
باشه عملگر OR بیتی 1 رو برمیگردونه اگر هر دو بیت صفر باشن 0 برمی گرده مثال:
Operand1: 0101
Operand2: 0011
After OR -> Operand1: 0111
#or
#command
#operand
👍5
دستورالعمل XOR
عملیات XOR بیتی را اجرا میکند عملیات XOR مقدار بیت حاصل رو به یک تنظیم میکنه و فقط اگر بیت های مربوط به عملوند Operand متفاوت باشن اگر بیت های مربوط به عملوند ها یکسان باشن هر دو صفر میشن یا هر دو یک بیت حاصل 0 میشه مثال:
Operand1: 0101
Operand2: 0011
After XOR -> Operand1 0110
نکته: XOR کردن یک عملوند به خودی خود عملوند را به 0 تغییر میده این برای پاک
کردن یک رجیستر استفاده میشه
XOR EAX,EAX
#xor
#command
#operand
عملیات XOR بیتی را اجرا میکند عملیات XOR مقدار بیت حاصل رو به یک تنظیم میکنه و فقط اگر بیت های مربوط به عملوند Operand متفاوت باشن اگر بیت های مربوط به عملوند ها یکسان باشن هر دو صفر میشن یا هر دو یک بیت حاصل 0 میشه مثال:
Operand1: 0101
Operand2: 0011
After XOR -> Operand1 0110
نکته: XOR کردن یک عملوند به خودی خود عملوند را به 0 تغییر میده این برای پاک
کردن یک رجیستر استفاده میشه
XOR EAX,EAX
#xor
#command
#operand
👍5
ساختار شرطی در زبان اسمبلی
اجرای شرط ها به زبان اسمبلی توسط چندین دستورالعمل حلقه و branching
پرش انجام میشه این دستورالعمل ها میتونن جریان کنترل رو داخل یک برنامه
تغییر بدن اجرای شرط ها در دو سناریو مشاهده میشن مثال:
#اسمبلی
#jump_conditional
#jump_unconditional
#loop
#حلقه
اجرای شرط ها به زبان اسمبلی توسط چندین دستورالعمل حلقه و branching
پرش انجام میشه این دستورالعمل ها میتونن جریان کنترل رو داخل یک برنامه
تغییر بدن اجرای شرط ها در دو سناریو مشاهده میشن مثال:
روش غير شرطی Jump unconditional
توسط دســتورالعمل JMP انجام میشه اجرای شرط ها اغلب شامل انتقال
كنترل به آدرس دستورالعملیه كه از دستورالعمل اجرای الان پیروی
نمی کنه انتقال کنترل ممکنه رو به جلو باشه برای اجرای مجموعه
جدیدی از دستورالعمل یا قبلی اجرای دوباره همون مراحل
پرش شرطی jump Conditional#assembly
بســته به شــرایط توســط مجموعــه ای از دســتورالعمل هــای پرش j condition انجام میشه دستورالعمل های شرطی کنترل رو با
شکستن جریان پی در پی انتقال میدن و اونا رو با تغییر مقدار افست در IP انجام میدن
#اسمبلی
#jump_conditional
#jump_unconditional
#loop
#حلقه
👍7
دستورالعمل CMP
دو عملوند رو مقایســه میکنه معمولا در اجرای شرطی مورد اســتفاده قرار میگیره این دستورالعمل اساسا برای مقایسه این که آیا عملوند برابره یا نه یک عملوند رو از عملوند دیگه کم میکنه که باعث اختلال در عملوند های منبع یا مقصد نمیشه از اون به همراه دستورالعمل پرش شرطی برای تصمیم گیری استفاده میشه مثال CMP:
خب حالا CMP چکار میکنه دو فیلد داده عددی رو مقایسه میکنه عملوند مقصد میتونه در ثبات یا در حافظه باشه عملوند منبع میتونه یک داده ثابت فوری ثبات یا حافظه باشه بیش تر برای مقایسه این که یک مقدار شمارنده به تعداد دفعاتی که یک حلقه برای اجرا نیاز داره رسیده استفاده میشه
#cmp
#command
#operand
دو عملوند رو مقایســه میکنه معمولا در اجرای شرطی مورد اســتفاده قرار میگیره این دستورالعمل اساسا برای مقایسه این که آیا عملوند برابره یا نه یک عملوند رو از عملوند دیگه کم میکنه که باعث اختلال در عملوند های منبع یا مقصد نمیشه از اون به همراه دستورالعمل پرش شرطی برای تصمیم گیری استفاده میشه مثال CMP:
CMP operand1,operand2Operand1 = 10
Operand2 = 20
CMP 10,5خب حالا CMP چکار میکنه دو فیلد داده عددی رو مقایسه میکنه عملوند مقصد میتونه در ثبات یا در حافظه باشه عملوند منبع میتونه یک داده ثابت فوری ثبات یا حافظه باشه بیش تر برای مقایسه این که یک مقدار شمارنده به تعداد دفعاتی که یک حلقه برای اجرا نیاز داره رسیده استفاده میشه
#cmp
#command
#operand
👍15🔥1
دوستان ری اکشن بزنید که قوی تر بریم جلو و اگه میتونید لطفا کانال رو Share کنید
👍15
پرش غير شرطی Jump Unconditional
همان طور که قبلا گفتیم این کار با دستور JMP انجام میشه اجرای شرط ها
اغلب شــامل انتقال كنترل به آدرس دستورالعملی اســت كه از دستورالعمل اجرای
كنونی پیروی نمی کنه انتقال کنترل ممکنه رو به جلو باشــه برای اجرای مجموعه جدیدی از دستورالعمل یا قبلی اجرایی دوباره همان مراحل دســتورالعمل JMP اسم لیبلی رو در اختیار شما قرار میده که سریعا جریان کنترل
انتقال داده بشه سینتکس دستورالعمل JMP به شکل زیر است:
JMP label
#jmp
#unconditional
#پرش
#غیرشرطی
همان طور که قبلا گفتیم این کار با دستور JMP انجام میشه اجرای شرط ها
اغلب شــامل انتقال كنترل به آدرس دستورالعملی اســت كه از دستورالعمل اجرای
كنونی پیروی نمی کنه انتقال کنترل ممکنه رو به جلو باشــه برای اجرای مجموعه جدیدی از دستورالعمل یا قبلی اجرایی دوباره همان مراحل دســتورالعمل JMP اسم لیبلی رو در اختیار شما قرار میده که سریعا جریان کنترل
انتقال داده بشه سینتکس دستورالعمل JMP به شکل زیر است:
JMP label
#jmp
#unconditional
#پرش
#غیرشرطی
👍5