ReverseEngineering
الذهاب إلى القناة على Telegram
إظهار المزيد
1 265
المشتركون
لا توجد بيانات24 ساعات
-37 أيام
+730 أيام
أرشيف المشاركات
1 265
دستورالعمل XOR
عملیات XOR بیتی را اجرا میکند عملیات XOR مقدار بیت حاصل رو به یک تنظیم میکنه و فقط اگر بیت های مربوط به عملوند Operand متفاوت باشن اگر بیت های مربوط به عملوند ها یکسان باشن هر دو صفر میشن یا هر دو یک بیت حاصل 0 میشه مثال:
Operand1: 0101
Operand2: 0011
After XOR -> Operand1 0110
نکته: XOR کردن یک عملوند به خودی خود عملوند را به 0 تغییر میده این برای پاک
کردن یک رجیستر استفاده میشه
XOR EAX,EAX
1 265
دستورالعمل OR
برای پشتیبانی از عبارت های منطقی، با انجام عمل بیتی OR استفاده میشه اگر بیت های مچینگ از هر یک یا هر دو عملوند یکی
باشه عملگر OR بیتی 1 رو برمیگردونه اگر هر دو بیت صفر باشن 0 برمی گرده مثال:
Operand1: 0101 Operand2: 0011 After OR -> Operand1: 0111نکته:از OR میتونیم برای تنظیم یک یا چند بیت استفاده کنیم
1 265
دستورالعمل AND
برای پشتیبانی از عبارات منطقی با انجام عملکرد بیتی و AND
اســتفاده میشه اگر بیت های که با هم مچ یعنی بیت هایی که با هم مطابق دارن از هر دو عملوند 1 باشنعملکرد AND
بیتی 1 رو برمی گردونه در غیر این صورت مقدار 0 برمی گرده مثال:
Operand1: 0101
Operand2: 0011
After AND -> Operand1: 0001
نکته:از روش AND میتونیم برای صفر کردن یک یا چند بیت اســتفاده کنیم
1 265
دستورالعمل های منطقی در زبان اسمبلی
مجموعه دستورالعمل پردازشگر، دستورالعمل AND، OR، XOR، TEST و NOT
منطقی Boolean رو ارائه میدن که بیت ها را مطابق نیاز برنامه تســت، تنظیم
میکنه قالب این دستورالعمل ها به شکل زیره
1 265
Obfuscation چیست
یک فرایند یا روش برنامه نویسیه که با هدف های محافظت از کد منبع source code یک برنامه کاهش اندازه فایل ها و محافظت از اطلاعات حساس استفاده میشه این روش یعنی تغییر ساختار و قالب کد منبع است جوری که افراد دیگه وقتی اونو میخونن به سختی یا غیر ممکن باشه تا نتونن کد رو بخونن یا تحلیلش کنن این کار با استفاده از تکنیک های مثل فشرده سازی، رمزنگاری،تغییر نام متغیرها و تابع ها و اضافه کردن کد های مجازی بدون معنی انجام بشه
1 265
Anti-debugging چیست
تکنیکیه که برای جلوگیری از تحلیل و اجرای debugger ها روی نرم افزار استفاده میشه این تکنیک معمولا توسط توسعه دهندگان Developer ها برنامه برای جلوگیری از دسترسی و تحلیل نرم افزارهای خودشون توسط کرکر ها استفاده میشه برای پیاده سازی anti-debugging توسعه دهندگان از روش های مختلفی استفاده میکنند مثال اضافه کردن کد های تشخیص debugger به برنامه جلوگیری از اجرای برنامه در debugger ها استفاده از کد های مخرب برای متوقف کردن debugger با این کار تحلیل و کرک کردن نرم افزار ها برای کرکر ها مشکل میشه و امنیت برنامه ها بیشتر میشه
1 265
چرا گفتم یاد بگیرید چون ما در شرایطی که بخایم برنامه رو کرک کنیم ممکنه با عوض کردن شرط ها یا تغییر دادنشون برنامه مون کرک نشه در این شرایط باید کل برنامه رو decompile دیکامپایل کنیم و بتونیم کدشو حالا با هرچی نوشته شده تحلیل کنیم
1 265
درود دوستان یک نکته هم بگم خدمتتون زبان برنامه نویسی C رو هم باید یاد بگیرید برای مهندسی معکوس و در این زبان تحلیل بدافزار هم استفاده میشه اگر دوس داشتید بعدا ابزار یا ویروس بنویسید ++C هم میتونید یاد بگیرید دیگه اینا رو رو چون ساده تر از اسمبلیه میتونید خودتون یاد بگیرید از سایت W3schools میتونید استفاده کنید یا رفرنس های دیگه و دوره های دیگه.
1 265
دستورالعمل 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
1 265
دستور های محاسباتی در اسمبلی
دستور 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 امکان پذیر نیست
1 265
ثابت ها (constants) در زبان اسمبلی
چند تا دستورالعمل داده شده که ثابت ها رو تعریف میکنه
EQU %assign %defineدر زبان اســمبلی دستورالعمل EQU برای تعریف ثابت استفاده میشه سینتکسش به صورت زیره
TOTOAL_PEOPLE equ 30دستورالعمل assign% برای تعریف ثابت های عددی استفاده میشه مثل دستور EQU سینتکس به صورت زیره
assign TOTOAL 15%نکته: دستور assign% به حروف کوچیک و بزرگ حساسه دستورالعمل deifne% تعریف ثابت های عددی و رشته ای (string) تعریف میشه این دستورالعمل شبیه به دستور define% در زبان C هست برای تعریف PRT سینتکس به صورت زیره
[define PRT [EBP+5%
1 265
دســتور TIMES
اجازه میده تا یک مقدار رو داخل متغیر چند بار قرار بدیم به عنوان مثال آرایه ای به نام arko و اندازه 8 را میتونیم با اســتفاده از عبارت زیر تعریف کنیم و با مقدار صفر مقداردهی کنیم
دستور TIMES برای ارایه ها و جدول ها کاربرد داره
arko TIMES 8 DW 0
1 265
متغیر variable ها در زبان اسمبلی
دستورالعمل های مختلف رو جهت گرفتن فضای حافظه برای ذخیره ســازی متغیرها ارائه میدن دستورالعمل define که به شکل D نوشته میشه برای اختصاص دادن فضای ذخیره سازی استفاده میشـه
1 265
Type Specifier نوع مشخص کننده
Byte 1 <= byte address
Word 2 <= byte address
Dword 4 <= byte address
Qword 8 <= byte address
Tbyte 10 <= byte address
1 265
ادرس دهی ثباتی 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 که داخل اسکوئر براکت هستن برای رفرنس های حافظه کدگذاری شدن برای این استفاده میشن آدرس دهی غیر مســتقیم به طور کلی برای متغیرهای دارای چند تا عنصر مثل آرایه ها استفاده میشن
1 265
Review of addressing modes بررسی مد های ادرس دهی
(آدرس دهی فوری) یا آدرس در (ثبات یا حافظه) داده هایی است که به طور کلی
داده های منبع پس از عملیات بدون تغییر باقی میمونن
سه حالت اصلی آدرس دهی وجود داره:
1 آدرس دهی ثباتی register addressing
2 آدرس دهی فوری immediate addressing
3 آدرس دهی حافظه memory addressing1 265
خب حالا دستور mov در اسمبلی برا چی استفاده میشه برای انتقال دادن مثلا
mov ebx,2
این یعنی 2 رو بریز یا انتقالش بده تو ریجستر ebx
انتقال داده ها از یک فضای
ذخیره سازی به فضای دیگه استفاده میشه
دستور mov به پنج شکل انجام میشه:
mov register,register mov register,immediate mov memory,immediate mov register,memory mov memory,registerنکته: هر دو عملوند (operand) داخل عملیات mov باید هم اندازه باشن
