آموزش برنامه نویسی به زبان اسمبلی برای مهندسی معکوس

Assembly Language Programming for Reverse Engineering

نکته: آخرین آپدیت رو دریافت میکنید حتی اگر این محتوا بروز نباشد.
توضیحات دوره: درک کد اسمبلی و اصلاح فایل‌های exe برای افزودن قابلیت‌های جدید با استفاده از x64dbg زبان اسمبلی اصول مهندسی معکوس اصول اشکال‌زدایی xdbg اصلاح برنامه‌ها تزریق کد به فایل‌های exe خالی کردن یک فایل exe دستورات اضافه کردن پایه INC، DEC، MUL و DIV را ثبت می‌کند. دسترسی به حافظه اصلی (RAM) ) تابع پشته توابع ورودی و خروجی را فراخوانی می کند کد Caves توابعی که مقداری را برمی گرداند. . . پیش نیازها:دانش برنامه نویسی C پایه کامپیوتر مفید خواهد بود اما ضروری نیست شما هر آنچه را که نیاز دارید یاد خواهید گرفت

اگر از دیباگرها برای مهندسی معکوس برنامه‌ها استفاده می‌کردید، اما آرزو داشتید که درک بیشتری از زبان اسمبلی داشته باشید، این دوره برای شما مناسب است. ما به اندازه کافی زبان اسمبلی را پوشش خواهیم داد تا به شما این امکان را بدهیم که بفهمید چگونه فایل‌های exe را برای درج کد خود تغییر دهید یا فایل‌های exe موجود را برای انجام کارهایی تغییر دهید که در نظر گرفته نشده است.

به طور سنتی، برنامه نویسی به زبان اسمبلی با استفاده از اسمبلرهایی مانند NASM یا FASM آموزش داده می شود. اما یادگیری آن از این طریق به شما مهارت درک برنامه های مهندسی معکوس را نمی دهد. یک پیوند گمشده (شکاف دانش) در مورد نحوه به کارگیری دانش اسمبلی برای اصلاح برنامه ها وجود دارد. این دوره این شکاف دانش را پر می کند.

به‌جای استفاده از اسمبلر، مستقیماً از دیباگر x64dbg برای یادگیری زبان اسمبلی استفاده می‌کنیم. درست است، ما کد اسمبلی خود را در خود دیباگر x64dbg می نویسیم. زبان اسمبلی را از ابتدا با دانشی صفر به عنوان یک مبتدی کامل یاد خواهید گرفت.

ما از تکنیک هایی استفاده خواهیم کرد که به شما امکان می دهد:


  1. کد موجود را تغییر دهید

  2. کد موجود را بازنویسی کنید

  3. بخش های حافظه را برای درج داده تغییر دهید

  4. عملکردهای جدید ایجاد کنید

  5. بهره برداری از غارهای کد

  6. عملکرد جدیدی را به برنامه های موجود اضافه کنید

  7. و موارد دیگر...


این هنر سیاه به طور گسترده تدریس نمی‌شود و هیچ دوره‌ای در جای دیگری وجود ندارد که به طور منسجمی همه دانش مونتاژ و مهندسی معکوس را در کنار هم قرار دهد. بیشتر آنچه می یابید دوره های مجزا در زمینه مونتاژ و مهندسی معکوس است. بسیاری از دوره‌های مهندسی معکوس، زبان اسمبلی پس‌زمینه را از دیدگاه یک هکر نرم‌افزار پوشش نمی‌دهند. و تقریباً همه دوره‌های زبان اسمبلی به شما یاد می‌دهند که چگونه برنامه‌ها را از ابتدا بنویسید، به جای اینکه چگونه برنامه‌های موجود را تغییر دهید تا با کد خود عملکرد جدیدی را با استفاده از اشکال‌زدایی مانند 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

  • سخنرانی پاداش Bonus Lecture

نمایش نظرات

نظری ارسال نشده است.

آموزش برنامه نویسی به زبان اسمبلی برای مهندسی معکوس
خرید اشتراک و دانلود خرید تکی و دانلود | 160,000 تومان (5 روز مهلت دانلود) زمان تقریبی آماده سازی لینک دانلود این دوره آموزشی حدود 5 تا 24 ساعت می باشد.
جزییات دوره
12.5 hours
83
Udemy (یودمی) udemy-small
16 مرداد 1402 (آخرین آپدیت رو دریافت می‌کنید، حتی اگر این تاریخ بروز نباشد.)
841
4.7 از 5
دارد
دارد
دارد
Paul Chin

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar

Paul Chin Paul Chin

من یک مدرس دانشگاه نیمه بازنشسته هستم و بیش از 20 سال تجربه در زمینه آموزش رایانه و فناوری اطلاعات دارم. علایق من از معکوس کردن ، کدگذاری تا طراحی گرافیک ، برنامه ها ، توسعه بازی ها ، موسیقی ، سلامتی ، معنویت و رفاه است. در اوقات فراغت من نیز پیانو و صفحه کلید می نوازم. من از آموزش حضوری و آنلاین لذت می برم و همچنین عاشق آموزش و الهام بخشیدن به دیگران برای موفقیت و زندگی در رویاهای خود هستم.

Udemy (یودمی)

یودمی یکی از بزرگ‌ترین پلتفرم‌های آموزشی آنلاین است که به میلیون‌ها کاربر در سراسر جهان امکان دسترسی به دوره‌های متنوع و کاربردی را فراهم می‌کند. این پلتفرم امکان آموزش در زمینه‌های مختلف از فناوری اطلاعات و برنامه‌نویسی گرفته تا زبان‌های خارجی، مدیریت، و هنر را به کاربران ارائه می‌دهد. با استفاده از یودمی، کاربران می‌توانند به صورت انعطاف‌پذیر و بهینه، مهارت‌های جدیدی را یاد بگیرند و خود را برای بازار کار آماده کنند.

یکی از ویژگی‌های برجسته یودمی، کیفیت بالای دوره‌ها و حضور استادان مجرب و با تجربه در هر حوزه است. این امر به کاربران اعتماد می‌دهد که در حال دریافت آموزش از منابع قابل اعتماد و معتبر هستند و می‌توانند به بهترین شکل ممکن از آموزش‌ها بهره ببرند. به طور خلاصه، یودمی به عنوان یکی از معتبرترین و موثرترین پلتفرم‌های آموزشی آنلاین، به افراد امکان می‌دهد تا به راحتی و با کیفیت، مهارت‌های مورد نیاز خود را ارتقا دهند و به دنبال رشد و پیشرفت شغلی خود باشند.