لطفا جهت اطلاع از آخرین دوره ها و اخبار سایت در
کانال تلگرام
عضو شوید.
آموزش برنامه نویسی به زبان اسمبلی برای مهندسی معکوس
Assembly Language Programming for Reverse Engineering
نکته:
آخرین آپدیت رو دریافت میکنید حتی اگر این محتوا بروز نباشد.
نمونه ویدیوها:
توضیحات دوره:
درک کد اسمبلی و اصلاح فایلهای exe برای افزودن قابلیتهای جدید با استفاده از x64dbg زبان اسمبلی اصول مهندسی معکوس اصول اشکالزدایی xdbg اصلاح برنامهها تزریق کد به فایلهای exe خالی کردن یک فایل exe دستورات اضافه کردن پایه INC، DEC، MUL و DIV را ثبت میکند. دسترسی به حافظه اصلی (RAM) ) تابع پشته توابع ورودی و خروجی را فراخوانی می کند کد Caves توابعی که مقداری را برمی گرداند. . . پیش نیازها:دانش برنامه نویسی C پایه کامپیوتر مفید خواهد بود اما ضروری نیست شما هر آنچه را که نیاز دارید یاد خواهید گرفت
اگر از دیباگرها برای مهندسی معکوس برنامهها استفاده میکردید، اما آرزو داشتید که درک بیشتری از زبان اسمبلی داشته باشید، این دوره برای شما مناسب است. ما به اندازه کافی زبان اسمبلی را پوشش خواهیم داد تا به شما این امکان را بدهیم که بفهمید چگونه فایلهای exe را برای درج کد خود تغییر دهید یا فایلهای exe موجود را برای انجام کارهایی تغییر دهید که در نظر گرفته نشده است.
به طور سنتی، برنامه نویسی به زبان اسمبلی با استفاده از اسمبلرهایی مانند NASM یا FASM آموزش داده می شود. اما یادگیری آن از این طریق به شما مهارت درک برنامه های مهندسی معکوس را نمی دهد. یک پیوند گمشده (شکاف دانش) در مورد نحوه به کارگیری دانش اسمبلی برای اصلاح برنامه ها وجود دارد. این دوره این شکاف دانش را پر می کند.
بهجای استفاده از اسمبلر، مستقیماً از دیباگر x64dbg برای یادگیری زبان اسمبلی استفاده میکنیم. درست است، ما کد اسمبلی خود را در خود دیباگر x64dbg می نویسیم. زبان اسمبلی را از ابتدا با دانشی صفر به عنوان یک مبتدی کامل یاد خواهید گرفت.
ما از تکنیک هایی استفاده خواهیم کرد که به شما امکان می دهد:
کد موجود را تغییر دهید
کد موجود را بازنویسی کنید
بخش های حافظه را برای درج داده تغییر دهید
عملکردهای جدید ایجاد کنید
بهره برداری از غارهای کد
عملکرد جدیدی را به برنامه های موجود اضافه کنید
و موارد دیگر...
این هنر سیاه به طور گسترده تدریس نمیشود و هیچ دورهای در جای دیگری وجود ندارد که به طور منسجمی همه دانش مونتاژ و مهندسی معکوس را در کنار هم قرار دهد. بیشتر آنچه می یابید دوره های مجزا در زمینه مونتاژ و مهندسی معکوس است. بسیاری از دورههای مهندسی معکوس، زبان اسمبلی پسزمینه را از دیدگاه یک هکر نرمافزار پوشش نمیدهند. و تقریباً همه دورههای زبان اسمبلی به شما یاد میدهند که چگونه برنامهها را از ابتدا بنویسید، به جای اینکه چگونه برنامههای موجود را تغییر دهید تا با کد خود عملکرد جدیدی را با استفاده از اشکالزدایی مانند x64dbg اضافه کنید.
دانشی که به دست می آورید مزیت اضافه شما به عنوان یک محقق امنیتی، یا تحلیلگر بدافزار یا دانشجوی امنیت نرم افزار خواهد بود. همچنین برای برنامه نویسانی که می خواهند بدانند برنامه ها چگونه به صورت داخلی اجرا می شوند و در صورت نداشتن کد منبع چگونه عملکرد برنامه را گسترش دهند، مفید خواهد بود.
بروید و اکنون ثبت نام کنید و من شما را در داخل می بینم!
سرفصل ها و درس ها
معرفی
Introduction
نصب ابزار
Installing the tools
سیستم های اعداد باینری و هگزادسیمال
Binary and Hexadecimal Number Systems
مهارتهای پایه
Basic Skills
آشنایی با دیباگر xdbg
Introduction to xdbg debugger
مبانی مرحله دیباگر
Debugger Stepping Basics
نحوه خالی کردن فایل exe
How to hollow out an exe file
ثبت می کند
Registers
آشنایی با رجیسترهای CPU
Introduction to CPU registers
دستورالعمل MOV
The MOV Instruction
اضافه پایه
Basic Addition
اضافه با استفاده از ثبت کامل
Addition using full registers
اضافه شدن رجیسترهای جزئی
Addition of partial registers
منها کردن
Subtraction
دستورالعمل های INC، DEC، MUL و DIV
INC, DEC, MUL and DIV instructions
دستورالعمل INC و DEC
INC and DEC Instructions
دستورالعمل های MUL
MUL Instructions
دستورالعمل های DIV
DIV Instructions
تمرینات DIV
DIV Exercises
دسترسی به حافظه اصلی (RAM)
Accessing main memory (RAM)
ثبت نام در حافظه و حافظه برای ثبت نام
Register to memory and memory to register
MOV به حافظه و تکنیک های وصله مستقیم حافظه
MOV to memory and direct memory patching techniques
تمرین حافظه
Memory Exercise
پشته
The Stack
فشار دادن مقادیر ثبات به پشته
Pushing register values to the stack
پر کردن مقادیر پشته به رجیسترها
Popping stack values to registers
چگونه ثابت ها و رشته ها را به پشته فشار دهیم
How to push Constants and Strings to the Stack
فراخوانی تابع
Function calls
مقدمه ای بر فراخوانی تابع
Introduction to function calls
فراخوانی تابع با 2 پارامتر
Function call with 2 parameters
تمرین: فراخوانی تابع با 2 پارامتر
Exercise: Function calls with 2 parameters
تمرین: فراخوانی تابع با 3 پارامتر
Exercise: Function calls with 3 parameters
توابع ورودی و خروجی
Input and Output functions
مقدمه خروجی ورودی در مونتاژ
Intro to input output in assembly
نحوه خواندن به صورت اعداد و خروجی مجدد
How to read in numbers and output it again
نحوه خواندن در رشته ها و خروجی آن به کاربر
How to read in strings and output it back to user
کد غارها
Code Caves
مقدمه ای بر کد غارها
Introduction to Code Caves
یک غار کد ساده
A simple code cave
کد غار سلام
Code Cave Hello
تمرین: نام، نام خانوادگی را دریافت کنید
Exercise: Get Firstname, Lastname
پروژه ماشین حساب
Calculator Project
شرح پروژه
Project description
طراحی راه حل
Designing the solution
کدگذاری ماشین حساب
Coding the calculator
توابعی که مقداری را برمی گرداند
Functions that returns a value
معرفی توابعی که مقداری را برمی گرداند
Introduction to functions that returns a value
روی تابع strlen() تمرین کنید
Exercise on strlen() function
ثبت پرچم ها
The Flags Register
معرفی ثبت پرچم ها و پرچم ZF
Intro to the Flags Register and the ZF flag
پرچم SF
The SF Flag
پرچم CF
The CF Flag
پرچم
The OF Flag
به کدام پرچم نگاه کنیم: OF یا CF؟
Which flag to look: OF or CF?
می پرد
Jumps
مقدمه ای بر Jumps و JZ
Introduction to Jumps and JZ
پرش JNZ
JNZ jump
حلقه های JZ
JZ Loops
حلقه های JNZ
JNZ Loops
سایر پرش های مشروط
Other conditional jumps
دستورالعمل های CMP
CMP instructions
مقدمه ای برای مقایسه دستورالعمل ها
Introduction to compare instructions
عملی در دستورالعمل های CMP
Practical on the CMP instructions
مقایسه اعداد بدون علامت و امضا
Comparing unsigned and signed numbers
برنامه نویسی ساختاریافته
Structured Programming
مقدمه ای بر برنامه نویسی ساختاریافته و بیانیه های If-Else
Introduction to Structured Programming and If-Else Statements
برای حلقه ها
For Loops
در حالی که حلقه ها
While Loops
از حلقه ها خارج شوید
Break out of Loops
نمای نمودار، ردیابی انیمیشن و اصول پرش
Graph view, Trace Animate and Principles of Jumps
عملیات امضا شده
Signed Operations
دستورالعمل NEG
NEG instruction
پسوندهای امضا شده و بدون امضا
Signed and Unsigned Extensions
کاربردی در پسوندهای امضا شده و بدون امضا
Practical on signed and unsigned extensions
تبدیل بایت ها و کلمات با استفاده از CBW و CWDE
Converting Bytes and Words Using CBW and CWDE
تبدیل بایت ها و کلمات با استفاده از CWD و CDQ
Converting Bytes and Words Using CWD and CDQ
IMUL و IDIV
IMUL and IDIV
مثال IDIV
Example of IDIV
عملیات بیتی
Bitwise Operations
مقدمه ای بر جبر بولی
Introduction to Boolean Algebra
دستورالعمل های بیتی
Bitwise Instructions
تغییر حسابی
Arithmetic Shifting
دستورالعمل های چرخش
Rotate Instructions
روی عملیات بیتی تمرین کنید
Exercise on bitwise operations
آرایه های حافظه
Memory Arrays
مقدمه ای بر آرایه های حافظه
Introduction to memory arrays
عملی در آرایه های حافظه
A practical on memory arrays
مقدمه ای بر دستورالعمل LEA
Introduction to the LEA instruction
یک پیاده سازی ساده LEA
A simple LEA implementation
LEA با شمارنده
LEA with counter
LEA با حلقه
LEA with loop
ساختارهای داده
Data Structures
مقدمه ای بر ساختارهای داده
Intro to Data Structures
در مورد ساختارهای داده عملی است
Hands on practical on data structs
دستورالعمل رشته
String Instructions
مقدمه ای بر دستورالعمل های رشته ای
Introduction to String Instructions
پرچم جهت (پرچم DF)
The Direction Flag (DF flag)
دستورالعمل های LODS
LODS Instructions
تمرین: LODS Adder
Exercise: LODS Adder
دستورالعمل های MOVS
The MOVS Instructions
دستورالعمل REP
The REP Instruction
دستورالعمل های SCAS
The SCAS Instructions
دستورالعمل های CMPS
The CMPS Instructions
منابع برای مطالعه بیشتر
Resources for further study
من یک مدرس دانشگاه نیمه بازنشسته هستم و بیش از 20 سال تجربه در زمینه آموزش رایانه و فناوری اطلاعات دارم. علایق من از معکوس کردن ، کدگذاری تا طراحی گرافیک ، برنامه ها ، توسعه بازی ها ، موسیقی ، سلامتی ، معنویت و رفاه است. در اوقات فراغت من نیز پیانو و صفحه کلید می نوازم. من از آموزش حضوری و آنلاین لذت می برم و همچنین عاشق آموزش و الهام بخشیدن به دیگران برای موفقیت و زندگی در رویاهای خود هستم.
نمایش نظرات