اسمبلیامنیتتست نفوذ

ورود به دنیای مهندسی معکوس

ورود به دنیای مهندسی معکوس و باینری

مهندسی معکوس یکی از مقوله های بسیار مهم برای تست نفوذ می باشد، زیرا برای (به اصطلاح) هک کردن هر چیزی، اول باید بدونیم که چطوری کار میکنه. مهندسی معکوس فرآیندی برای درک نحوه ی کار کرد داخلی و ساخت یک چیز می باشد، حالا چه یک جاروبرقی باشد، چه یک cpu، چه یک سیستم عامل و چه یک برنامه ای مثل Chrome Browser. در دنیای سایبری مهندسی معکوس معمولا به معکوس کردن یک برنامه کامپایل شده برای درک کردن نحوه دقیق کارکرد داخلی آن گفته میشود. در این پست به برنامه هایی که با زبان C نوشته میشن اکتفا میکنیم و بیشتر در لینوکس. به موارد اختصاصی ویندوز، سایر زبان های برنامه نویسی در پست های دیگه خواهیم پرداخت.

مهندسی معکوس به چه پیش زمینه هایی نیاز دارد؟

  1. تسلط به assembly در معماری هدف که معمولا IA64 می باشند، و ARM و MIPS برای موبایل ها و embbeded سیستم ها.
  2. برنامه نویسی C و ++C

خب بهتره اول از همه بپردازیم به اینکه کامپایل کردن چیست؟ کامپایل کردن درست مثل ترجمه کردن است، در کامپایل کردن یک کد برنامه کامپایلر اون کد رو نسبت به ساختارهای تعریف شده تبدیل به یک ساختار قابل فهم برای cpu میکنه. بعد از اون لینکر قطعات ترجمه شده رو به هم وصل میکنه و پک کننده نتیجه رو به یک فایل اجرایی در میاره.
Selection 101 681x430 - ورود به دنیای مهندسی معکوساز طریق ابزارها شما میتونید اون محتویات رو به شکل قابل درک تری شامل segment های مختلف، آدرس ها و کد اسمبلی اون برنامه رو ببینید، که البته اون کد رو خود ابزارها میسازن و hint میدن. برای مهندسی معکوس شما باید اون کدها و داده ها و متاداده ها رو بخونید و طرح control flow برای آن کد ترسیم کرده و اون رو درک کنید. چند سگمنت خیلی مهم وجود دارن که از همه پرکاربردترن:

  • .text: که کد به زبان ماشین در اینجا ذخیره میشه
  • .data: که داده ها در اینجا ذخیره میشن
  • .bss: که حافظه برای متغیرهای global و uninitialized می باشد
  • .plt: که نام و آدرس routine ها رو نگه میداره.

همیشه یه آدرس بعنوان entry point قرار داده میشه که اغلب با برچسب یا همون label بنام _start شناخته میشه. در برنامه های C که کامپایل میشن توی این قسمت کارهایی از قبیل load کردن کتابخونه ها، تخصیص و init حافظه و یکسری کارهای دیگه انجام میشه و بعد تابع main شما صدا زده میشه.

برای مهندسی معکوس کردن به شخصه معمولا یطرف صفحه کد assembly یا شبه کد C که با ابزارها گرفتم رو میزارم و یه طرف دیگه یه ادیتور (vim!!!) باز میکنم شروع میکنم یه شبه کد خوانا و قابل درک برای خودم بنویسم یا نکات رو یادداشت کنم. به شما هم همین پیشنهاد رو میکنم.

کاربردهای مهندسی معکوس چی هست؟

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

  • Malware reverse engineering (کاربرد در فارنزیک بدافزارها)
  • Software reverse engineering (شکستن الگوریتم های رمزنگاری نرم افزار ها)
  • Frimware reverse engineering (دستکاری واسط بین سخت افزار و نرم افزار )
  • Hardware reverse engineering (برای بهبود کارایی سخت افزاری)
  • Vulnerability Research (کشف آسیب پذیری ها)

ابزار های پرکاربرد در مهندسی معکوس

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

ابزار objdump

ابزار objdump
ابزار objdump

همونطور که از اسمش پیداست اطلاعات در مورد فایل باینری رو دامپ میکنه و میتونین کد اسمبلی هم ازش بگیرین.

ابزار gdb

ابزار gdb
ابزار gdb

اصولا یک دیباگر هست، ولی بدرد مهندسی معکوس و کشف اسیب پذیری ها هم کاربرد دارد.

ابزار IDA

ابزار IDA
ابزار IDA

ابزاری بسیار قوی و گرافیکی برای مهندسی معکوس که قابلیت دیباگ، ادیت، نقشه control flow کشیدن و خیلی امکانات دیگه رو داره.

ابزار GHIDRA

برنامه ای که اخیرا سازمان NSA در دسترس عموم قرار داده، که البته بنده هنوز باهاش کار نکردم.

ابزار radare2

ابزار radare2
ابزار radare2

درست مثل IDA بسیار قوی هستش، هدف از ساختش کارهای فارنزیک بوده که بعدا تبدیل شده به یک ابزار فوق العاده قوی برای مهندسی معکوس و دیباگ. البته هنوز هم برای manipulation روی هر فایل باینری میتونین ازش استفاده کنین.

ابزار readelf

همونطور که از اسمش پیداست برای تحلیل فایل های ELF بکار میره، باهاش میتونین تمام داده ها و متاداده های یک فایل elf رو نگاه کنید.

ابزار hexedit

یک ابزار خیلی خوب برای خواندن و ویرایش فایل در حالت باینری. بعضی وقت ها باید توی 0 و 1 ها رفت…

نمونه ای از مهندسی معکوس

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

به عنوان مثال مهندسی معکوس نرم افزاری، میتوانیم به تمامی برنامه های پولی اشاره کنیم که امروزه ما از آنها به صورت رایگان استفاده میکنیم. اکثر این نرم افزارها برای فعال سازی خود نیاز به لایسنس یا … دارند که از طریق مهندسی معکوس راه فعال سازی نرم افزار را پیدا میکنند.

منابع پیشنهادی برای یادگیری

  • کتاب Reversing از Eldad Eliam
  • کتاب Hacking: the art of exploitation فصل های اول
  • ساختار فایل elf
  • یادگیری از مثال ها و نمونه ها: ctf writeups
  • منابع تمرین: چالش های سایت root-me.org

‫30 دیدگاه ها

  1. سلام آقای وفایی
    میشه بگید که شما چجوری زبان اسمبلی رو شروع به یاد گرفتن کردین؟ از چه معماری شروع کردین؟ دنبال اینم که بدونم بهترین راه برای اینکه اسمبلی رو خوب یاد بگیرم در زمینه مهندسی معکوس چیه؟ اگه میشه راهنمایی کنید ممنون

    1. سلام،
      من اصلا اسمبلی نخوندم.
      ولی همونطور که میدونید زبان اسمبلی یک زبان پایه‌ای برنامه‌نویسی کامپیوتری است که برای برنامه‌نویسی در سطح پایین‌تر و نزدیک‌تر به زبان ماشین استفاده می‌شود. برای شروع یادگیری زبان اسمبلی، می‌توانید این مراحل را دنبال کنید:

      1. **آشنایی با معماری کامپیوتری:** برای درک بهتر زبان اسمبلی، بهتر است با مفاهیم اساسی معماری کامپیوتری آشنا شوید. این شامل مفاهیم مانند حافظه، ثبات، رجیسترها، ساختارهای دستوری و نحوه عملکرد CPU می‌شود.

      2. **انتخاب زبان اسمبلی:** ابتدا باید تصمیم بگیرید که با کدام معماری اسمبلی کار خواهید کرد، مثلاً x86 یا ARM. اگر هدفتان یادگیری برای یک معماری خاص است، می‌توانید منابع مرتبط با آن معماری را جستجو کنید.

      3. **منابع آموزشی:** کتاب‌ها، ویدئوها و آموزش‌های آنلاین می‌توانند منابع خوبی برای یادگیری زبان اسمبلی باشند. منابع مختلف ممکن است به نحوه تفسیر دستورات و نحوه نوشتن برنامه‌ها توضیح دهند.

      4. **نصب ابزارهای موردنیاز:** بسته به معماری انتخابی، باید ابزارهای مورد نیاز برای ترجمه (آسمبلر) و اجرای (شبیه‌ساز) برنامه‌های اسمبلی را نصب کنید.

      5. **یادگیری نحوه نوشتن دستورات:** زبان اسمبلی دارای دستورات مختلفی است که به کمک آن‌ها برنامه می‌نویسید. باید یاد بگیرید چگونه دستورات اسمبلی را بنویسید و از رجیسترها و حافظه استفاده کنید.

      6. **تمرین‌های عملی:** بهترین راه برای یادگیری اسمبلی، تمرین و عملیات است. تمرین‌های مختلفی از ساده تا پیچیده انجام دهید تا با مفاهیم و نحوه کار با دستورات اسمبلی آشنا شوید.

      7. **مطالعه کدهای موجود:** مطالعه کدهای اسمبلی موجود در پروژه‌ها یا منابع آموزشی می‌تواند به شما درک بهتری از نحوه کاربرد عملی دستورات و نوشتن برنامه‌ها بدهد.

      8. **پروژه‌های کوچک:** با شروع به نوشتن پروژه‌های کوچک با استفاده از زبان اسمبلی، می‌توانید تجربه و مهارت خود را بهبود دهید.

      9. **مشارکت در جامعه:** به گروه‌ها و انجمن‌های آنلاین مرتبط با زبان اسمبلی ملحق شوید. اینجا می‌توانید با دیگر برنامه‌نویسان تبادل دانش کنید و از تجربیات آن‌ها بهره‌برداری کنید.

      بخاطر داشته باشید که یادگیری زبان اسمبلی نیازمند صبر و تمرین است. در ابتدا ممکن است کمی چالش برانگیز باشد، اما با تمرین و تلاش مستمر، مهارت‌هایتان در این زمینه بهبود خواهد یافت.

    1. این دو نرم‌افزار IDA و Ghidra به عنوان محیط‌های تحلیل معکوس کد و دیس‌آسمبل شدن برنامه‌ها شناخته می‌شوند. برای یادگیری آنها، بهتر است دانش و مهارت‌های زیر را داشته باشید:

      پیش نیازهای یادگیری برای IDA و Ghidra:
      برنامه نویسی و دیس‌آسمبلی: مطمئن شوید که درک کافی از زبان‌های برنامه نویسی مانند C/C++ و زبان‌های دیس‌آسمبلی مربوط به معماری‌های مختلف مثل x86 و ARM دارید. اگر پیش‌نیاز‌های اولیه را در این زمینه‌ها دارید، مفاهیم معکوس کد را بهتر درک خواهید کرد.

      مفاهیم معکوس کد: مطمئن شوید که با مفاهیم معکوس کد و دیس‌آسمبلی برنامه‌ها آشنایی دارید. این شامل تبدیل دیس‌آسمبلی به کد اصلی (Assembly to Source) و تحلیل جریان کنترل برنامه (Control Flow Analysis) است.

      آشنایی با سیستم‌عامل‌ها و زبان‌های برنامه‌نویسی مختلف: برای تحلیل برنامه‌ها به خصوص برنامه‌های دارای کدهای مختلف (multi-platform) می‌تواند مفید باشد اگر آشنایی کافی با سیستم‌عامل‌ها مانند Windows و Linux و زبان‌های برنامه‌نویسی مختلف مانند C, C++, Java, Python و … داشته باشید.

      مفاهیم عمومی امنیت اطلاعات: درک اصول و مفاهیم عمومی امنیت اطلاعات و اصول حفاظت از برنامه‌ها و معکوس کد آنها به شما کمک می‌کند تا بهتر متوجه کدها و آسیب‌پذیری‌های ممکن شوید.

      مهارت‌های تحقیق و حل مسئله: در حین کار با این ابزارها، ممکن است با موارد پیچیده و مشکلات مواجه شوید که نیاز به تحقیق و حل مسئله دارند. بنابراین، مهارت‌های تحقیق و حل مسئله می‌تواند برای یادگیری بهتر این ابزارها حیاتی باشد.

      اگر این مهارت‌ها را دارید یا بر روی آنها کار می‌کنید، یادگیری IDA و Ghidra برای شما راحت‌تر و مفیدتر خواهد بود. همچنین، توصیه می‌شود که با مستندات و منابع مرتبط با هر نرم‌افزار آشنا شوید تا از مزایا و قابلیت‌های آنها بهره‌مند شوید.

  2. سلام آقای وفایی
    بعد از یادگیری پایه ی زبان C ، سمت چی بریم در مهندسی مهکوس ؟ مثل همون C++ هست یا متفاوته؟

    1. سلام! بعد از یادگیری پایه‌های زبان C، شما می‌توانید به سمت زبان C++ بروید. زبان C++ در واقع یک توسعه‌یافته از زبان C است و امکانات بیشتری از جمله شیءگرایی (Object-Oriented Programming) و مفاهیم مرتبط با آن را در اختیار شما قرار می‌دهد. C++ قدرتمندتر و گسترده‌تر از C است و برای توسعه نرم‌افزارهای پیچیده‌تر و پروژه‌های مهم‌تر استفاده می‌شود.

      اگر به سمت مهندسی مهکوس (Reverse Engineering) علاقه‌مند هستید، آشنایی با زبان C++ بسیار مفید خواهد بود. زیرا در زمینه مهندسی مهکوس، شما ممکن است با برنامه‌هایی که با زبان C یا C++ نوشته شده‌اند، سروکار داشته باشید و باید بتوانید آنها را تحلیل و تفسیر کنید.

      علاوه بر زبان C++، در مهندسی مهکوس می‌توانید از مهارت‌های دیگری مانند مفاهیم کامپایلر، آنالیز باینری، مفاهیم سیستم‌عامل و شبکه، دانش مرتبط با امنیت و رمزنگاری، مهارت در ابزارهای مهندسی معکوس و ابزارهای آنالیز مانند IDA Pro و Ghidra و دانش در مورد ساختارها و الگوریتم‌های رمزگشایی و رمزنگاری بهره‌برداری کنید.

      به طور کلی، مهندسی مهکوس یک حوزه چند رشته‌ای است و نیازمند دانش و تخصص در زمینه‌های مختلف است. بنابراین، بعد از یادگیری پایه‌های زبان C، می‌توانید به سمت زبان C++ و همچنین به سایر مفاهیم و ابزارهای مرتبط با مهندسی مهکوس گام بردارید.

  3. سلام آقای وفایی ، پیش نیاز های مهندسی معکوس فقط همان دو تا است که در بالا گفتید؟
    چون همونطور که گفتید ، مهندسی معکوس جزو تست نفوذ هست ، من قبلا خونده بودم که پیش نیاز همه دوره های تست نفوذ ، بلد بودن security+ ، CEH ، لینوکس و زبان پایتونه . آیا اینا هم باید بلد باشیم یا بهتره بلد باشیم و یا نیازی نیست ؟

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

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

      زبان برنامه‌نویسی: آشنایی با زبان برنامه‌نویسی مورد نظر برای برنامه مورد معکوس، مهم است. به طور کلی، برنامه‌نویسی در زبان‌های مانند C, C++, C#, Java, Python و غیره می‌تواند در مهندسی معکوس مفید باشد. با این حال، مهمترین زبان‌ها برای مهندسی معکوس عموماً C و C++ هستند.

      مفاهیم عمومی توسعه نرم‌افزار: آشنایی با مفاهیم عمومی توسعه نرم‌افزار و معماری سیستم‌ها نیز می‌تواند در مهندسی معکوس مفید باشد. این شامل ساختارهای داده، الگوریتم‌ها، روش‌های مصرف حافظه و غیره است.

      مفاهیم کد ماشین: برای معکوس کردن برنامه‌هایی که به زبان اسمبلی نوشته شده‌اند، آشنایی با مفاهیم کد ماشین (مانند رجیسترها، ماشین‌های مجازی و توابع میانی) مهم است.

      ابزارها و تکنیک‌های مهندسی معکوس: برای مهندسی معکوس، شناخت ابزارها و تکنیک‌های معکوس مانند دیس‌آسمبلرها (disassemblers)، دیباگرها (debuggers)، ابزارهای تحلیل جریان کد (code flow analysis) و روش‌های تعمیم کد (code deobfuscation) نیز اهمیت دارد.

      امنیت و تست نفوذ: در برخی حوزه‌های مهندسی معکوس که به تست نفوذ و امنیت مربوط می‌شوند، دانش در زمینه امنیت شبکه، آسیب‌پذیری‌ها و روش‌های حفاظت از سیستم‌ها می‌تواند لازم باشد. در این موارد، داشتن مدارک مربوط به امنیت مانند Security+ و CEH (Certified Ethical Hacker) می‌تواند مفید باشد.

      سیستم‌عامل و ابزارهای مرتبط: آشنایی با سیستم‌عامل‌ها مانند لینوکس و ابزارهای مرتبط مانند خط فرمان لینوکس و اسکریپت‌نویسی با زبان‌های مانند پایتون می‌تواند در مهندسی معکوس مفید باشد.

      به طور کلی، پیش نیازهای مهندسی معکوس به دوره‌های مورد نظر و نوع کاری‌تان وابسته است. بررسی نیازهای دقیق هر دوره و یا پروژه خاص که قصد دارید در آن مشارکت کنید، می‌تواند به شما کمک کند تا بهترین تصمیم را بگیرید و بر اساس آن پیش بروید. (جواب ChatGPT)

        1. از جمله شاخه های مهم مهندسی معکوس میتوان به موارد زیر اشاره کرد:

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

          تحلیل باینری و فاز معکوس: این شاخه به تحلیل و معکوس کردن برنامه‌هایی می‌پردازد که به صورت باینری (به زبان ماشین) نوشته شده‌اند. شما با استفاده از دیس‌آسمبلرها، دیباگرها و تکنیک‌های دیگر می‌توانید کد ماشین را تجزیه و تحلیل کرده و به فهمیدن عملکرد و رفتار برنامه بپردازید.

          معکوس کردن پروتکل‌ها و شبکه‌ها: در این شاخه، شما می‌توانید به تحلیل و معکوس کردن پروتکل‌ها و شبکه‌های مختلف بپردازید. با استفاده از ابزارها و تکنیک‌های معکوس، می‌توانید پروتکل‌های شبکه را بررسی و آسیب‌پذیری‌ها و نقاط ضعف را شناسایی کنید.

          تست نفوذ و امنیت: مهندسی معکوس نقش مهمی در حوزه تست نفوذ (Penetration Testing) و امنیت دارد. شما با استفاده از مهندسی معکوس، می‌توانید برنامه‌ها و سیستم‌های مختلف را از نظر آسیب‌پذیری‌ها و ضعف‌های امنیتی بررسی کنید و اقدامات مناسب برای تقویت امنیت آنها را انجام دهید.

  4. سلام دوست عزیز
    بعد از یادگیری اساس و پایه ی زبان c++ ، باید چه شاخه ای از این زبان رو ادامه بدیم تا برای مهندسی معکوس کاربرد داشته باشه؟

    1. سلام! بعد از یادگیری اساس و پایه زبان C++، برای مهندسی معکوس (reverse engineering) می‌توانید به مفاهیم و تکنیک‌های زیر توجه کنید:

      1. پردازش فایل‌ها و بایت‌ها: در مهندسی معکوس، ممکن است نیاز داشته باشید فایل‌های باینری را بررسی و تجزیه و تحلیل کنید. برای این کار، مهارت در پردازش فایل‌ها و بایت‌ها با استفاده از C++ به شما کمک می‌کند. در این بخش می‌توانید درباره کتابخانه‌هایی مانند fstream و iostream بیشتر بیاموزید.

      2. پیاده‌سازی ابزارهای تجزیه و تحلیل داده: برای معکوس کردن یک برنامه، معمولاً نیاز است که داده‌های مختلفی را تحلیل و بررسی کنید. C++ به عنوان یک زبان برنامه‌نویسی قدرتمند، به شما امکان می‌دهد ابزارهای تجزیه و تحلیل داده را پیاده‌سازی کنید. می‌توانید با استفاده از کتابخانه‌هایی مانند boost یا `STL`، ساختارهای داده مورد نیاز خود را پیاده‌سازی کنید.

      3. بررسی کد اسمبلی: مهندسی معکوس شامل تجزیه و تحلیل کد اسمبلی برنامه‌ها است. در این بخش، می‌توانید با استفاده از C++، کد اسمبلی را تجزیه و تحلیل کنید و بخش‌های مورد نظر را به زبان C++ تبدیل کنید. برای این منظور، نیاز است با مفاهیم کد اسمبلی و ساختارهای معماری سیستم‌های مختلف آشنا شوید.

      4. بررسی کد منبع: ممکن است نیاز داشته باشید کد منبع برنامه‌ای را که در زبان دیگری نوشته شده است، تجزیه و تحلیل کنید. در این حالت، مهارت در زبان C++ به شما کمک می‌کند تا کد را درک کرده و تغییرات مورد نیاز را اعمال کنید.

      5. بررسی مفاهیم پیشرفته C++: برای پیشرفت در مهندسی معکوس، می‌توانید به مفاهیم پیشرفته‌تری از زبان C++ مانند مفاهیم شی گرایی پیشرفته، کلاس‌های قالبی (templates)، توابع میانی (function pointers) و غیره پرداخته و با استفاده از این مفاهیم، برنامه‌ها را معکوس کنید.

      مهندسی معکوس یک حوزه گسترده است و این توصیفات تنها مثال‌هایی از مهارت‌هایی هستند که در ادامه یادگیری زبان C++ می‌توانید پیش بروید. بهتر است در هر حالت به تمرکز بر روی زمینه‌هایی که برای شما جذابیت بیشتری دارند واکنش نشان دهید.

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

        1. یادگیری زبان اسمبلی می‌تواند به شما در مهندسی معکوس کمک بسیاری کند. اگر پایه‌های زبان اسمبلی را یاد بگیرید، می‌توانید از این زبان برای تحلیل و بررسی کد اسمبلی برنامه‌های مختلف استفاده کنید.

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

          از طریق زبان اسمبلی، می‌توانید مستقیماً به زبان C++ برگردید و تفاوت‌ها و تبدیل‌های لازم را برنامه‌نویسی کنید. همچنین، می‌توانید با استفاده از زبان اسمبلی برنامه‌های دیگر را تجزیه و تحلیل کنید و عملکرد آنها را درک کنید.

          مهندسی معکوس برای کد اسمبلی نیز یک حوزه گسترده است و با یادگیری زبان اسمبلی می‌توانید به موارد زیر توجه کنید:

          تحلیل کد اسمبلی: با یادگیری زبان اسمبلی، می‌توانید کد اسمبلی را تحلیل کنید و عملکرد دقیق برنامه را درک کنید. این اطلاعات به شما کمک می‌کند تا کد اسمبلی را به زبان C++ تبدیل کنید و تغییرات مورد نیاز را اعمال کنید.

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

          تغییر کد اسمبلی: با یادگیری زبان اسمبلی، می‌توانید تغییرات مورد نیاز را در کد اسمبلی برنامه‌ها اعمال کنید. این شامل بهبود عملکرد، حذف قسمت‌های غیرضروری، تغییر الگوریتم‌ها و غیره است.

          بنابراین، یادگیری زبان اسمبلی می‌تواند به شما امکان مهندسی معکوس برنامه‌هایی را بدهد که به زبان اسمبلی نوشته شده‌اند و با دقت به سطح پایینتری از برنامه نگاه کنید.

          1. خیلی ممنون بخاطر پاسخگوییتون خدا حفظتون کنه

  5. سلام
    ببخشید آیا حتما برای مهندسی معکوس باید زبان اسمبلی رو بلد باشیم یا زبان C کفایت میکنه ؟

  6. ببخشید برای پیدا کردن باگ در نرم افزارهایی مثل مرورگرها و یا مثلا پیامرسان هایی که روی دسکتاپ نصب می شوند آیا بهتر است کد سورس آنها را از گیت هاب بگیریم و بخونیم یا اینکه با ابزارهای مهندسی معکوس فایل اجرایی باینری آنها را دیباگ کنیم؟

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

        و اینکه آیا شما آموزشی ندارید برای پیدا کردن باگ یا حفره برای اکسپلویت کردن نرم افزارهای دسکتاپی مثلا مرورگرها یا پیامرسان ها، و سپس شل گرفتن و یا هر چیز دیگر؟

    1. سلام، مطمئن نیستم، اما اکثرا منابع انگلیسی کاملترن.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


دکمه بازگشت به بالا