ساختار فایل ELF در لینوکس
ELF (Executable and Linkable Format)
فرمت استاندارد فایلهای اجرایی در لینوکس و اندرویده ساختار ELF کمی متفاوت از PE هست ولی اصولش شبیه به همه
ساختار کلی یک فایل ELF:
| بخش | توضیح |
| ELF Header | اطلاعات کلی فایل اجرایی |
| Program Header Table | مشخصات سکشنهای اجرایی |
| Section Header Table | اطلاعات سکشنهای برنامه |
| Sections | بخشهای مختلف برنامه (کد، داده، منابع) |
با ابزار readelf یا objdump میتونید این اطلاعات رو ببینید
بخشهای مهم در فایل ELF
1 ELF Header:
شامل اطلاعات کلی فایل مثل نوع پردازنده نوع باینری (32 یا 64 بیت) و نقطه ورود (Entry Point)
2 Program Header Table:
این قسمت برای لود کردن فایل در حافظه استفاده میشه شامل ادرسهایی که باید به RAM منتقل بشن
3 Section Header Table (جدول سکشنها):
مثل PE فایلهای ELF هم چندین سکشن دارن:
4 Symbol Table:
اگه یه برنامه با دیباگ اطلاعات کامپایل شده باشه، توی این بخش اسم متغیرها و توابع رو میتونید ببینید
مقایسه PE و ELF در مهندسی معکوس
مهندسی معکوس در ویندوز معمولا روی PE و در لینوکس روی ELF انجام میشه، ولی اصول کلیشون شبیه به همه
ارتباط این اطلاعات با مهندسی معکوس
اگر بخواید کرک کنید یا آنپک کنید: باید Entry Point، Import Table و سکشنهای text. و data. رو بررسی کنید
اگر بخواید بدافزار انالیز کنید: باید ببینید که از چه APIهایی استفاده میکنه (Import Table یا PLT/GOT در ELF)
اگر بخواید یه برنامه رو دیباگ کنید: باید بدونید که کد اجرایی داخل text. هست و مقدار متغیرها توی data. ذخیره میشه
فایلهای اجرایی در ویندوز (PE) و لینوکس (ELF) ساختار خاصی دارن
PE شامل سکشنهایی مثل .text (کد برنامه) و .data (متغیرها) هست
ELF هم سکشنهای مشابهی داره ولی مکانیزم ایمپورتها در اون متفاوته
برای انالیز PE از ابزارهایی مثل PEview و برای ELF از readelf استفاده میشه
ELF (Executable and Linkable Format)
فرمت استاندارد فایلهای اجرایی در لینوکس و اندرویده ساختار ELF کمی متفاوت از PE هست ولی اصولش شبیه به همه
ساختار کلی یک فایل ELF:
| بخش | توضیح |
| ELF Header | اطلاعات کلی فایل اجرایی |
| Program Header Table | مشخصات سکشنهای اجرایی |
| Section Header Table | اطلاعات سکشنهای برنامه |
| Sections | بخشهای مختلف برنامه (کد، داده، منابع) |
با ابزار readelf یا objdump میتونید این اطلاعات رو ببینید
بخشهای مهم در فایل ELF
1 ELF Header:
شامل اطلاعات کلی فایل مثل نوع پردازنده نوع باینری (32 یا 64 بیت) و نقطه ورود (Entry Point)
2 Program Header Table:
این قسمت برای لود کردن فایل در حافظه استفاده میشه شامل ادرسهایی که باید به RAM منتقل بشن
3 Section Header Table (جدول سکشنها):
مثل PE فایلهای ELF هم چندین سکشن دارن:
4 Symbol Table:
اگه یه برنامه با دیباگ اطلاعات کامپایل شده باشه، توی این بخش اسم متغیرها و توابع رو میتونید ببینید
مقایسه PE و ELF در مهندسی معکوس
مهندسی معکوس در ویندوز معمولا روی PE و در لینوکس روی ELF انجام میشه، ولی اصول کلیشون شبیه به همه
ارتباط این اطلاعات با مهندسی معکوس
اگر بخواید کرک کنید یا آنپک کنید: باید Entry Point، Import Table و سکشنهای text. و data. رو بررسی کنید
اگر بخواید بدافزار انالیز کنید: باید ببینید که از چه APIهایی استفاده میکنه (Import Table یا PLT/GOT در ELF)
اگر بخواید یه برنامه رو دیباگ کنید: باید بدونید که کد اجرایی داخل text. هست و مقدار متغیرها توی data. ذخیره میشه
فایلهای اجرایی در ویندوز (PE) و لینوکس (ELF) ساختار خاصی دارن
PE شامل سکشنهایی مثل .text (کد برنامه) و .data (متغیرها) هست
ELF هم سکشنهای مشابهی داره ولی مکانیزم ایمپورتها در اون متفاوته
برای انالیز PE از ابزارهایی مثل PEview و برای ELF از readelf استفاده میشه
👍4❤1
ابزارهای آنپکینگ و بایپس Obfuscation
خیلی از برنامههای پولی و بدافزارها پک یا مبهمسازی (Obfuscation) میشن تا مهندسی معکوسشون سخت بشه این ابزارها کمک میکنن که اونها رو آنپک کنید
UPX یه ابزار رایج برای فشردهسازی و آنپک کردن فایلها
Detect It Easy (DIE) تشخیص پکینگ و کامپایلرهای فایلهای اجرایی
x64dbg (با پلاگین Scylla) آنپک کردن فایلهای پکشده
Unpacker.me یه سرویس آنلاین برای آنپک کردن بعضی باینریها
وقتی برنامهای که داری بررسی میکنی کدش به نظر عجیب و مبهم میاد یا وقتی اجرا میشه خودش رو از حالت فشرده خارج میکنه
خیلی از برنامههای پولی و بدافزارها پک یا مبهمسازی (Obfuscation) میشن تا مهندسی معکوسشون سخت بشه این ابزارها کمک میکنن که اونها رو آنپک کنید
UPX یه ابزار رایج برای فشردهسازی و آنپک کردن فایلها
Detect It Easy (DIE) تشخیص پکینگ و کامپایلرهای فایلهای اجرایی
x64dbg (با پلاگین Scylla) آنپک کردن فایلهای پکشده
Unpacker.me یه سرویس آنلاین برای آنپک کردن بعضی باینریها
وقتی برنامهای که داری بررسی میکنی کدش به نظر عجیب و مبهم میاد یا وقتی اجرا میشه خودش رو از حالت فشرده خارج میکنه
👏2❤1
Practical_Binary_Analysis_Build_Your_Own_Linux_Tools_for_Binary.pdf
33.5 MB
کتاب Practical Binary Analysis نوشته Dennis Andriesse یکی از منابع عالی برای یادگیری مهندسی معکوس، تحلیل باینری و امنیت نرمافزار است این کتاب بهطور عملی و از پایه تحلیل باینری رو توضیح میده و به موضوعاتی مثل دیساسمبلی دیباگینگ مهندسی معکوس و تحلیل آسیبپذیریها رو میگه
موضوعات کلیدی کتاب:
مقدمهای بر معماری کامپیوتر و پردازندهها
کار با ابزارهای دیساسمبلر و دیباگر
مهندسی معکوس برنامههای کامپایلشده
تحلیل باینریها بدون نیاز به سورس کد
مفاهیم امنیتی مثل اکسپلویتنویسی و بایپس مکانیزمهای حفاظتی
موضوعات کلیدی کتاب:
مقدمهای بر معماری کامپیوتر و پردازندهها
کار با ابزارهای دیساسمبلر و دیباگر
مهندسی معکوس برنامههای کامپایلشده
تحلیل باینریها بدون نیاز به سورس کد
مفاهیم امنیتی مثل اکسپلویتنویسی و بایپس مکانیزمهای حفاظتی
❤10🔥1👏1
تحلیل ساختار فایلهای Mach-O (macOS و iOS)
بعد از بررسی PE (ویندوز) و ELF (لینوکس) حالا بریم سراغ Mach-O (Mach Object) که فرمت فایل اجرایی در macOS و iOS هست این فرمت روی مکبوک آیفون آیپد و اپل واچ استفاده میشه و اگر بخوای مهندسی معکوس روی اپلیکیشنهای macOS یا iOS انجام بدی، باید این ساختار رو بشناسی
1 Mach-O چیست؟
Mach-O یه فرمت فایل اجراییه که در سیستمعاملهای macOS و iOS استفاده میشه این فرمت جایگزین a.out شد و شبیه ELF در لینوکس کار میکنه، اما یک سری تفاوت داره
فایلهای Mach-O میتونن این نوعها رو داشته باشن:
Executable:
فایلهای اجرایی که میتونی مستقیماً اجرا کنی
Dylib (Dynamic Library):
مشابه DLL در ویندوز یا .so در لینوکس، برای کتابخانههای داینامیک
Bundle:
برای پلاگینهای macOS (مثلاً پلاگینهای Xcode)
Object Files:
فایلهای شیء که قبل از لینک شدن استفاده میشن
اپلیکیشنهای iOS معمولا به شکل Mach-O کامپایل میشن و داخل فایل IPA قرار میگیرن
2 ساختار کلی فایل Mach-O
فایلهای Mach-O سه بخش اصلی دارن:
برخلاف PE و ELF که سکشنهای مشخصی دارن Mach-O از یک سیستم انعطافپذیرتر به نام "Load Commands" استفاده میکنه
3 Mach Header (هدر اصلی Mach-O)
Mach Header اولین بخش فایل هست که مشخص میکنه این فایل چی هست و روی چه پردازندهای اجرا میشه
اطلاعات داخل Mach Header:
Magic Number امضای فایل Mach-O (برای شناسایی نوع فایل)
CPU Type مشخص میکنه این فایل برای چه پردازندهای هست (Intel x86_64 ARM64 و ...)
File Type مشخص میکنه که این فایل اجرایی کتابخانه یا فایل آبجکت هست
Number of Load Commands تعداد کامندهای لود در فایل
Magic Number در Mach-O:
| مقدار | توضیح |
0xfeedface Mach-O 32-bit
0xfeedfacf Mach-O 64-bit
0xcafebabe Fat Binary (برای اجرا روی چند CPU)
Fat Binary چیه؟
Fat Binary یه نوع خاص از Mach-O هست که میتونه کدهای چندین معماری مختلف رو داخل یک فایل داشته باشه مثلا یه برنامه که هم روی Intel و هم روی ARM (Apple Silicon) اجرا بشه
4 Load Commands (دستورات لود)
بعد از Mach Header یه لیست از Load Commands داریم که مشخص میکنه سیستمعامل چطور این فایل رو در حافظه لود کنه
مهمترین Load Commandها
LC_SEGMENT_64 | تعریف یک Segment (بخش حافظهای)
LC_LOAD_DYLIB لود کردن یک کتابخانه داینامیک (Dylib)
LC_MAIN مشخص کردن نقطه ورود برنامه
LC_SYMTAB | جدول نمادها (برای دیباگ و سمبلها)
مثلاً اگه برنامه از یک DLL خارجی استفاده کنه Load Command مربوط به LC_LOAD_DYLIB نشون میده که کدوم کتابخونهها باید لود بشن
5 Segments & Sections (کد، دادهها و سکشنها)
بعد از Load Commands میرسیم به بخش اصلی فایل که شامل Segments & Sections هست این بخش دقیقا مشابه سکشنهای .text، .data و ... در PE و ELF عمل میکنه
مهمترین Segments در Mach-O:
Segment | توضیح
__TEXT | شامل کد اجرایی برنامه (مشابه .text در PE/ELF)
__DATA | شامل متغیرهای استاتیک (مشابه .data در PE/ELF)
__LINKEDIT | شامل اطلاعات مربوط به لینک شدن (مشابه Symbol Table در ELF)
مهمترین Sections در Mach-O:
| Section | داخل کدوم Segment توضیح |
| text | TEXT | شامل کد اسمبلی اجرایی برنامه
| cstring | TEXT | شامل رشتههای متنی برنامه |
| data | DATA | شامل متغیرهای مقداردهی شده
| bss | DATA | شامل متغیرهای مقداردهی نشده |
مهندسی معکوس در Mach-O بیشتر روی TEXT و DATA انجام میشه،چون کد و متغیرهای مهم اینجا هستن
6 مقایسه Mach-O با PE و ELF
Mach-O انعطافپذیرتر از PE و ELF هست، ولی بررسیش سختتره چون Load Commands به جای Section Table استفاده میشن
7 کاربرد Mach-O در مهندسی معکوس
اگر بخوای کرک کنی یا بایپس کنی:
باید __TEXT (کد برنامه) و LC_LOAD_DYLIB (وابستگی به کتابخانهها) رو بررسی کنی
اگر بخوای اپلیکیشنهای iOS مهندسی معکوس کنی:
باید با Mach-O و ابزارهایی مثل Hopper، Ghidra، otool و jtool کار کنی
اگر بخوای دیباگ کنی: باید بدونی که متغیرها توی DATA و کد داخل TEXT هستن
ساختارش شامل Mach Header Load Commands و Segments هست
نقطه ورود (Entry Point) در LC_MAIN تعریف میشه
کد برنامه در TEXT و متغیرها در DATA قرار دارن
برای بررسی Mach-O از ابزارهایی مثل otool, jtool, Hopper, و Ghidra استفاده میشه
بعد از بررسی PE (ویندوز) و ELF (لینوکس) حالا بریم سراغ Mach-O (Mach Object) که فرمت فایل اجرایی در macOS و iOS هست این فرمت روی مکبوک آیفون آیپد و اپل واچ استفاده میشه و اگر بخوای مهندسی معکوس روی اپلیکیشنهای macOS یا iOS انجام بدی، باید این ساختار رو بشناسی
1 Mach-O چیست؟
Mach-O یه فرمت فایل اجراییه که در سیستمعاملهای macOS و iOS استفاده میشه این فرمت جایگزین a.out شد و شبیه ELF در لینوکس کار میکنه، اما یک سری تفاوت داره
فایلهای Mach-O میتونن این نوعها رو داشته باشن:
Executable:
فایلهای اجرایی که میتونی مستقیماً اجرا کنی
Dylib (Dynamic Library):
مشابه DLL در ویندوز یا .so در لینوکس، برای کتابخانههای داینامیک
Bundle:
برای پلاگینهای macOS (مثلاً پلاگینهای Xcode)
Object Files:
فایلهای شیء که قبل از لینک شدن استفاده میشن
اپلیکیشنهای iOS معمولا به شکل Mach-O کامپایل میشن و داخل فایل IPA قرار میگیرن
2 ساختار کلی فایل Mach-O
فایلهای Mach-O سه بخش اصلی دارن:
برخلاف PE و ELF که سکشنهای مشخصی دارن Mach-O از یک سیستم انعطافپذیرتر به نام "Load Commands" استفاده میکنه
3 Mach Header (هدر اصلی Mach-O)
Mach Header اولین بخش فایل هست که مشخص میکنه این فایل چی هست و روی چه پردازندهای اجرا میشه
اطلاعات داخل Mach Header:
Magic Number امضای فایل Mach-O (برای شناسایی نوع فایل)
CPU Type مشخص میکنه این فایل برای چه پردازندهای هست (Intel x86_64 ARM64 و ...)
File Type مشخص میکنه که این فایل اجرایی کتابخانه یا فایل آبجکت هست
Number of Load Commands تعداد کامندهای لود در فایل
Magic Number در Mach-O:
| مقدار | توضیح |
0xfeedface Mach-O 32-bit
0xfeedfacf Mach-O 64-bit
0xcafebabe Fat Binary (برای اجرا روی چند CPU)
Fat Binary چیه؟
Fat Binary یه نوع خاص از Mach-O هست که میتونه کدهای چندین معماری مختلف رو داخل یک فایل داشته باشه مثلا یه برنامه که هم روی Intel و هم روی ARM (Apple Silicon) اجرا بشه
4 Load Commands (دستورات لود)
بعد از Mach Header یه لیست از Load Commands داریم که مشخص میکنه سیستمعامل چطور این فایل رو در حافظه لود کنه
مهمترین Load Commandها
LC_SEGMENT_64 | تعریف یک Segment (بخش حافظهای)
LC_LOAD_DYLIB لود کردن یک کتابخانه داینامیک (Dylib)
LC_MAIN مشخص کردن نقطه ورود برنامه
LC_SYMTAB | جدول نمادها (برای دیباگ و سمبلها)
مثلاً اگه برنامه از یک DLL خارجی استفاده کنه Load Command مربوط به LC_LOAD_DYLIB نشون میده که کدوم کتابخونهها باید لود بشن
5 Segments & Sections (کد، دادهها و سکشنها)
بعد از Load Commands میرسیم به بخش اصلی فایل که شامل Segments & Sections هست این بخش دقیقا مشابه سکشنهای .text، .data و ... در PE و ELF عمل میکنه
مهمترین Segments در Mach-O:
Segment | توضیح
__TEXT | شامل کد اجرایی برنامه (مشابه .text در PE/ELF)
__DATA | شامل متغیرهای استاتیک (مشابه .data در PE/ELF)
__LINKEDIT | شامل اطلاعات مربوط به لینک شدن (مشابه Symbol Table در ELF)
مهمترین Sections در Mach-O:
| Section | داخل کدوم Segment توضیح |
| text | TEXT | شامل کد اسمبلی اجرایی برنامه
| cstring | TEXT | شامل رشتههای متنی برنامه |
| data | DATA | شامل متغیرهای مقداردهی شده
| bss | DATA | شامل متغیرهای مقداردهی نشده |
مهندسی معکوس در Mach-O بیشتر روی TEXT و DATA انجام میشه،چون کد و متغیرهای مهم اینجا هستن
6 مقایسه Mach-O با PE و ELF
Mach-O انعطافپذیرتر از PE و ELF هست، ولی بررسیش سختتره چون Load Commands به جای Section Table استفاده میشن
7 کاربرد Mach-O در مهندسی معکوس
اگر بخوای کرک کنی یا بایپس کنی:
باید __TEXT (کد برنامه) و LC_LOAD_DYLIB (وابستگی به کتابخانهها) رو بررسی کنی
اگر بخوای اپلیکیشنهای iOS مهندسی معکوس کنی:
باید با Mach-O و ابزارهایی مثل Hopper، Ghidra، otool و jtool کار کنی
اگر بخوای دیباگ کنی: باید بدونی که متغیرها توی DATA و کد داخل TEXT هستن
ساختارش شامل Mach Header Load Commands و Segments هست
نقطه ورود (Entry Point) در LC_MAIN تعریف میشه
کد برنامه در TEXT و متغیرها در DATA قرار دارن
برای بررسی Mach-O از ابزارهایی مثل otool, jtool, Hopper, و Ghidra استفاده میشه
🔥5❤1
📌 ابزارهای دیکامپایل و بازگردانی سورسکد
اگه برنامهای به زبانهای سطح بالا مثل C#، Java یا Python نوشته شده باشه میتونی سورسکدش رو برگردونی
🔹 dnSpy / ILSpy → دیکامپایلر برای برنامههای داتنت (C# و VB)
🔹 JADX / Bytecode Viewer → دیکامپایلر برای برنامههای اندروید (APK)
🔹 Ghidra (با پلاگینهای decompiler) → دیکامپایلر برای باینریهای کامپایلشده
🔹 Decompiler.com → یه سرویس آنلاین برای دیکامپایل زبانهای مختلف
💡
وقتی بخوای ببینی یه برنامهای که به زبان Java یا C# نوشته شده، چه کدی داره
اگه برنامهای به زبانهای سطح بالا مثل C#، Java یا Python نوشته شده باشه میتونی سورسکدش رو برگردونی
🔹 dnSpy / ILSpy → دیکامپایلر برای برنامههای داتنت (C# و VB)
🔹 JADX / Bytecode Viewer → دیکامپایلر برای برنامههای اندروید (APK)
🔹 Ghidra (با پلاگینهای decompiler) → دیکامپایلر برای باینریهای کامپایلشده
🔹 Decompiler.com → یه سرویس آنلاین برای دیکامپایل زبانهای مختلف
💡
وقتی بخوای ببینی یه برنامهای که به زبان Java یا C# نوشته شده، چه کدی داره
🔥4👍1
The_IDA_Pro_book_The_unofficial_guide_to_the_worlds_most_popular.pdf
6.1 MB
کتاب The IDA Pro Book یکی از بهترین منابع برای یادگیری مهندسی معکوس با IDA Pro هست توی این کتاب یاد میگیرید که چطور کدهای باینری و اسمبلی رو تحلیل کنید ساختار یه برنامه رو بشناسید مکانیزمهای ضد مهندسی معکوس رو دور بزنید و حتی بدافزارها رو بررسی کنید
چرا این کتاب مهمه؟
چون IDA Pro یکی از قویترین ابزارهای مهندسی معکوسه و این کتاب قدمبهقدم بهت یاد میده بهتون که چطور ازش استفاده کنید از رابط کاربری و اسکریپتنویسی گرفته تا دیباگ کردن و تحلیل نرمافزارها
اگه ردتیمینگ کار میکنید و دنبال اینید که بفهمید برنامهها چطور از مهندسی معکوس محافظت میشن
چرا این کتاب مهمه؟
چون IDA Pro یکی از قویترین ابزارهای مهندسی معکوسه و این کتاب قدمبهقدم بهت یاد میده بهتون که چطور ازش استفاده کنید از رابط کاربری و اسکریپتنویسی گرفته تا دیباگ کردن و تحلیل نرمافزارها
اگه ردتیمینگ کار میکنید و دنبال اینید که بفهمید برنامهها چطور از مهندسی معکوس محافظت میشن
🔥10👍1
تکنیکهای ضد دیباگ و ضد مهندسی معکوس در نرمافزارها
حالا که ساختار فایلهای اجرایی (PE, ELF, Mach-O) رو شناختید باید بدونید که چطور توسعهدهندهها از مهندسی معکوس جلوگیری میکنن توی این بخش میریم سراغ مکانیزمهای ضد دیباگ و ضد مهندسی معکوس که توی نرمافزارهای مختلف استفاده میشن
1 چرا نرمافزارها از ضد دیباگ استفاده میکنن؟
تکنیکهای ضد دیباگ (Anti-Debugging) و ضد مهندسی معکوس (Anti-Reversing)
معمولا برای این کارها استفاده میشن:
✅ جلوگیری از کرک شدن نرمافزار
✅ سختتر کردن تحلیل بدافزارها
✅ محافظت از الگوریتمهای حساس و لایسنس نرمافزار
✅ جلوگیری از دستکاری و مهندسی معکوس
برنامههایی مثل بازیها نرمافزارهای امنیتی DRM و بدافزارها از این تکنیکها زیاد استفاده میکنن
2 روشهای تشخیص دیباگر در ویندوز (Anti-Debugging در PE)
ویندوز یه سری API داره که برنامهها با استفاده از اونها میتونن بفهمن که آیا تحت دیباگ هستن یا نه
📌 مهمترین روشها :
IsDebuggerPresent()
این تابع از kernel32.dll چک میکنه که برنامه داره تحت دیباگ اجرا میشه یا نه
برای بایپس کردن این تابع میتونیم مقدار برگشتی رو تغییر بدیم
NtQueryInformationProcess()
این تابع از ntdll.dll اطلاعاتی در مورد پروسه میگیره، از جمله اینکه آیا دیباگ میشه یا نه
این روش رو میتونیم با تغییر مقدار ProcessDebugPort در رجیسترها دور بزنیم.
3 روشهای ضد دیباگ در لینوکس (ELF Anti-Debugging)
توی لینوکس، برنامهها میتونن با استفاده از ptrace() تشخیص بدن که تحت دیباگ هستن
استفاده از ptrace() برای جلوگیری از دیباگ
برای بایپس این روش، میتونیم با gdb مقدار برگشتی ptrace() رو تغییر بدیم
4 روشهای ضد دیباگ در macOS (Mach-O Anti-Debugging)
توی macOS، روشهای مشابه لینوکس استفاده میشه ولی از sysctl() هم میشه برای تشخیص دیباگر استفاده کرد:
برای بایپس، میتونیم مقدار p_flag رو تغییر بدیم
5 تکنیکهای پیشرفته ضد مهندسی معکوس
بعضی برنامهها از روشهای پیچیدهتری برای جلوگیری از تحلیل شدن استفاده میکنن
مهمترین تکنیکها:
بدافزارهای حرفهای مثل Zeus و TrickBot از این تکنیکها استفاده میکنن
6 ابزارهای دور زدن ضد دیباگ
🔹 Windows: ScyllaHide, x64dbg, Cheat Engine
🔹 Linux: GDB, ptrace hooks, Frida
🔹 macOS: LLDB, Hopper, Frida
حالا که ساختار فایلهای اجرایی (PE, ELF, Mach-O) رو شناختید باید بدونید که چطور توسعهدهندهها از مهندسی معکوس جلوگیری میکنن توی این بخش میریم سراغ مکانیزمهای ضد دیباگ و ضد مهندسی معکوس که توی نرمافزارهای مختلف استفاده میشن
1 چرا نرمافزارها از ضد دیباگ استفاده میکنن؟
تکنیکهای ضد دیباگ (Anti-Debugging) و ضد مهندسی معکوس (Anti-Reversing)
معمولا برای این کارها استفاده میشن:
✅ جلوگیری از کرک شدن نرمافزار
✅ سختتر کردن تحلیل بدافزارها
✅ محافظت از الگوریتمهای حساس و لایسنس نرمافزار
✅ جلوگیری از دستکاری و مهندسی معکوس
برنامههایی مثل بازیها نرمافزارهای امنیتی DRM و بدافزارها از این تکنیکها زیاد استفاده میکنن
2 روشهای تشخیص دیباگر در ویندوز (Anti-Debugging در PE)
ویندوز یه سری API داره که برنامهها با استفاده از اونها میتونن بفهمن که آیا تحت دیباگ هستن یا نه
📌 مهمترین روشها :
IsDebuggerPresent()
این تابع از kernel32.dll چک میکنه که برنامه داره تحت دیباگ اجرا میشه یا نه
#include <windows.h>
#include <iostream>
int main() {
if (IsDebuggerPresent()) {
std::cout << "Debugger detected!" << std::endl;
return 1;
}
std::cout << "No debugger detected." << std::endl;
return 0;
}
🔹 چطور بایپسش کنیم؟
🔹 مقدار PEB->BeingDebugged رو توی دیباگر تغییر بدیم.
CheckRemoteDebuggerPresent()
این API چک میکنه که یه دیباگر خارجی مثل x64dbg به پروسه وصل شده یا نه
BOOL IsDebuggerAttached() {
BOOL isDebugger = FALSE;
CheckRemoteDebuggerPresent(GetCurrentProcess(), &isDebugger);
return isDebugger;
}
برای بایپس کردن این تابع میتونیم مقدار برگشتی رو تغییر بدیم
NtQueryInformationProcess()
این تابع از ntdll.dll اطلاعاتی در مورد پروسه میگیره، از جمله اینکه آیا دیباگ میشه یا نه
#include <windows.h>
#include <winternl.h>
#include <iostream>
typedef NTSTATUS(WINAPI* pNtQueryInformationProcess)(HANDLE, ULONG, PVOID, ULONG, PULONG);
int main() {
pNtQueryInformationProcess NtQIP = (pNtQueryInformationProcess)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtQueryInformationProcess");
DWORD isDebuggerPresent = 0;
NtQIP(GetCurrentProcess(), 0x07, &isDebuggerPresent, sizeof(DWORD), NULL);
if (isDebuggerPresent) {
std::cout << "Debugger detected!" << std::endl;
return 1;
}
std::cout << "No debugger detected." << std::endl;
return 0;
این روش رو میتونیم با تغییر مقدار ProcessDebugPort در رجیسترها دور بزنیم.
3 روشهای ضد دیباگ در لینوکس (ELF Anti-Debugging)
توی لینوکس، برنامهها میتونن با استفاده از ptrace() تشخیص بدن که تحت دیباگ هستن
استفاده از ptrace() برای جلوگیری از دیباگ
#include <sys/ptrace.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void anti_debug() {
if (ptrace(PTRACE_TRACEME, 0, 0, 0) == -1) {
printf("Debugger detected!\n");
exit(1);
}
}
int main() {
anti_debug();
printf("Program is running normally.\n");
return 0;
}
برای بایپس این روش، میتونیم با gdb مقدار برگشتی ptrace() رو تغییر بدیم
4 روشهای ضد دیباگ در macOS (Mach-O Anti-Debugging)
توی macOS، روشهای مشابه لینوکس استفاده میشه ولی از sysctl() هم میشه برای تشخیص دیباگر استفاده کرد:
#include <sys/types.h>
#include <sys/sysctl.h>
#include <stdio.h>
int is_debugger_attached() {
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()};
struct kinfo_proc info;
size_t size = sizeof(info);
sysctl(mib, 4, &info, &size, NULL, 0);
return (info.kp_proc.p_flag & P_TRACED) != 0;
}
int main() {
if (is_debugger_attached()) {
printf("Debugger detected!\n");
return 1;
}
printf("No debugger detected.\n");
return 0;
}
برای بایپس، میتونیم مقدار p_flag رو تغییر بدیم
5 تکنیکهای پیشرفته ضد مهندسی معکوس
بعضی برنامهها از روشهای پیچیدهتری برای جلوگیری از تحلیل شدن استفاده میکنن
مهمترین تکنیکها:
بدافزارهای حرفهای مثل Zeus و TrickBot از این تکنیکها استفاده میکنن
6 ابزارهای دور زدن ضد دیباگ
🔹 Windows: ScyllaHide, x64dbg, Cheat Engine
🔹 Linux: GDB, ptrace hooks, Frida
🔹 macOS: LLDB, Hopper, Frida
👍5❤2
برای دور زدن مکانیزمهای ضد دیباگ، میتونیم APIهای مربوطه رو هوک کنیم یا مقدار برگشتی اونها رو تغییر بدیم
برنامهها از تکنیکهای ضد دیباگ برای جلوگیری از کرک و مهندسی معکوس استفاده میکنن.
روشهای ساده مثل IsDebuggerPresent() و ptrace() در ویندوز و لینوکس استفاده میشن.
روشهای پیشرفتهتر مثل Code Virtualization و Packing در بدافزارها دیده میشن
ابزارهایی مثل Frida و x64dbg میتونن این مکانیزمها رو دور بزنن
برنامهها از تکنیکهای ضد دیباگ برای جلوگیری از کرک و مهندسی معکوس استفاده میکنن.
روشهای ساده مثل IsDebuggerPresent() و ptrace() در ویندوز و لینوکس استفاده میشن.
روشهای پیشرفتهتر مثل Code Virtualization و Packing در بدافزارها دیده میشن
ابزارهایی مثل Frida و x64dbg میتونن این مکانیزمها رو دور بزنن
👍4👏1
The_Ghidra_Book_The_Definitive_Guide_by_Chris_Eagle,_Kara_Nance.pdf
17.6 MB
معرفی کتاب "The Ghidra Book"
📚 نام کتاب: The Ghidra Book: The Definitive Guide
✍️ نویسندگان: Chris Eagle و Kara Nance
📅 انتشار: سال 2020
📖 موضوع: مهندسی معکوس با Ghidra
🔍 کتاب درباره چی هست؟
کتاب The Ghidra Book یکی از بهترین منابع برای یادگیری Ghidra، ابزار رایگان و متنباز تحلیل باینری توسعهیافته توسط NSA است. این کتاب از مقدماتی تا پیشرفته تمام قابلیتهای Ghidra رو آموزش میده و به مهندسی معکوس نرمافزارها، آنالیز بدافزارها و کرک کردن باینریها میپردازه
📚 نام کتاب: The Ghidra Book: The Definitive Guide
✍️ نویسندگان: Chris Eagle و Kara Nance
📅 انتشار: سال 2020
📖 موضوع: مهندسی معکوس با Ghidra
🔍 کتاب درباره چی هست؟
کتاب The Ghidra Book یکی از بهترین منابع برای یادگیری Ghidra، ابزار رایگان و متنباز تحلیل باینری توسعهیافته توسط NSA است. این کتاب از مقدماتی تا پیشرفته تمام قابلیتهای Ghidra رو آموزش میده و به مهندسی معکوس نرمافزارها، آنالیز بدافزارها و کرک کردن باینریها میپردازه
👍17
روند کار cpu به صورت انیمشین
https://www.linkedin.com/posts/onhex-group_cpu-ugcPost-7305645972016005121-xIvj?utm_source=share&utm_medium=member_desktop&rcm=ACoAACblG4kB0PHR1ZRBvvVzW7X1SO04asr6j5U
https://www.linkedin.com/posts/onhex-group_cpu-ugcPost-7305645972016005121-xIvj?utm_source=share&utm_medium=member_desktop&rcm=ACoAACblG4kB0PHR1ZRBvvVzW7X1SO04asr6j5U
Linkedin
اگه دوست دارید بدونید، CPU چطوری کار میکنه، میتونید بصورت انیمیشن، این قصه رو ببینید. | OnHex Group
اگه دوست دارید بدونید، CPU چطوری کار میکنه، میتونید بصورت انیمیشن، این قصه رو ببینید.
https://lnkd.in/dmdbAxyA
#CPU
https://lnkd.in/dmdbAxyA
#CPU
👍7❤1
پکینگ و آنپکینگ باینریها
حالا که با تکنیکهای ضد دیباگ و ضد مهندسی معکوس آشنا شدید وقتشه پکینگ (Packing) و آنپکینگ (Unpacking) باینریها رو بررسی کنیم این یکی از مهمترین بخشهای مهندسی معکوس هست چون بسیاری از بدافزارها و نرمافزارهای محافظتشده از پکینگ استفاده میکنن
1 پکینگ (Packing) چیست و چرا استفاده میشود؟
🔹 پکینگ یعنی فشردهسازی یا رمزگذاری کد اجرایی برای مخفی کردن ساختار اصلی آن
🔹 این کار معمولاً با پکرها (Packers) انجام میشه که فایل اجرایی رو تغییر میدن و کد اصلی فقط در زمان اجرا در حافظه باز میشه
📌 دلایل استفاده از پکینگ:
✅ جلوگیری از مهندسی معکوس و کرک شدن نرمافزارها (مثل بازیها و برنامههای پولی)
✅ کاهش حجم فایلهای اجرایی (در نسخههای قدیمیتر برای نرمافزارهای فشردهشده)
✅ مخفی کردن بدافزارها از آنتیویروسها
بسیاری از ویروسها تروجانها و باجافزارها از پکینگ استفاده میکنن تا کد مخربشون رو مخفی کنن
2 پکرهای معروف و پرکاربرد
🔹 پکرهای قانونی:
برای محافظت از نرمافزارهای تجاری
🔹 پکرهای بدافزار:
برای مخفی کردن بدافزارها و دور زدن آنتیویروس
📌 برخی از پکرهای معروف:
پکرهایی مثل Themida و VMProtect در نرمافزارهای پولی استفاده میشن ولی UPX بیشتر برای فشردهسازی ساده کاربرد داره
3 روشهای تشخیص یک فایل پکشده
وقتی یک فایل اجرایی رو باز میکنی شاید متوجه بشی که کدش واضح نیست یا خیلی فشرده و عجیب به نظر میرسه برای فهمیدن اینکه یه فایل پک شده یا نه این روشها رو بررسی کن
🔹 روش 1: بررسی امضای پکرها با PEiD یا Detect It Easy (DIE)
🔹 ابزار PEiD یا DIE میتونن پکر مورد استفاده در یک فایل PE رو شناسایی کنن
💻 در ویندوز:
1 PEiD یا Detect It Easy (DIE) رو اجرا کن.
2 فایل اجرایی رو داخلش بکش
3 اگر یه اسم پکر مثل UPX یا ASPack نشون داد، یعنی پک شده.
🔹 روش 2: بررسی جدول بخشهای فایل (Sections) در PE
🔹 پکشدهها معمولاً بخشهای غیرعادی مثل UPX0, UPX1, .text با اندازه خیلی کم دارن
🔹 میتونی با PE-Bear یا CFF Explorer فایل PE رو باز کنید و ببینید که آیا بخشهای مشکوک داره یا نه
🔹 روش 3: اجرای باینری در دیباگر و بررسی تغییرات حافظه
🔹 بعضی پکشدهها موقع اجرا کد واقعیشون رو در حافظه Extract میکنن
🔹 میتونی با x64dbg یا OllyDbg اجراش کنی و ببینی که آیا در طول اجرا کدش تغییر میکنه یا نه
4 آنپکینگ دستی باینریها (Unpacking)
برای باز کردن کد مخفی شده چندین روش وجود داره:
🔹 روش1:
آنپک کردن خودکار با UPX
اگر فایل با UPX پک شده باشه به راحتیه میتونید آنپکش کنید:
upx -d packed.exe -o unpacked.exe
اما... پکرهای پیچیدهتر مثل Themida یا VMProtect اینقدر راحت آنپک نمیشن
🔹 روش ۲:
پیدا کردن OEP (Entry Point اصلی) و دامپ کردن فایل از حافظه
📌 مراحل آنپکینگ دستی در دیباگر (مثلاً x64dbg):
1 فایل پکشده رو توی x64dbg باز کن
2 نقاط مشکوک رو پیدا کن:
اغلب پکشدهها قبل از اجرای کد اصلی، روی NtProtectVirtualMemory یا VirtualAlloc توقف دارن
3 روی OEP (Original Entry Point) بریکپوینت بذار:
معمولاً JMP EAX یا JMP ESP نشونه اینه که کد آنپک شده و آماده اجراست
4 وقتی به OEP رسیدی فایل رو از حافظه دامپ کن:
از Scylla یا OllyDump برای استخراج باینری استفاده کن
5 ریبیلد کردن بخشهای PE:
اگر آدرس Import Table خراب شد میتونی با Import Reconstructor اصلاحش کنی
این روش معمولاً برای پکرهای پیچیده مثل Themida و VMProtect استفاده میشه
5 ابزارهای مهم برای آنپک کردن باینریها
🔹 ابزارهای تشخیص پکرها:
✅ PEiD – شناسایی پکرهای رایج
✅ Detect It Easy (DIE) – تحلیل باینری و پیدا کردن امضای پکرها
✅ Exeinfo PE – نمایش اطلاعات پکرهای پیشرفته
🔹 ابزارهای دیباگ و آنپکینگ:
✅ x64dbg / OllyDbg – دیباگ و یافتن OEP
✅ Scylla / ImpRec – ریبیلد کردن Import Table بعد از آنپکینگ
✅ UPX – برای پک و آنپک کردن UPX
🔹 ابزارهای تحلیل حافظه :
Process Hacker – نمایش حافظه پروسهها
Hollows Hunter – تشخیص کدهای تزریق شده و Unpacking Runtime
پکینگ یعنی فشردهسازی و رمزگذاری کد اجرایی برای جلوگیری از مهندسی معکوس کاهش حجم و مخفی کردن بدافزارها
پکرهای معروف مثل UPX Themida و VMProtect در نرمافزارهای قانونی و بدافزارها استفاده میشن
برای تشخیص یک فایل پکشده ابزارهایی مثل PEiD DIE و x64dbg استفاده میشن
آنپکینگ دستی باینریها شامل پیدا کردن OEP دامپ کردن از حافظه و بازسازی Import Table هست
ابزارهایی مثل Scylla OllyDbg و Process Hacker برای آنپکینگ استفاده میشن
حالا که با تکنیکهای ضد دیباگ و ضد مهندسی معکوس آشنا شدید وقتشه پکینگ (Packing) و آنپکینگ (Unpacking) باینریها رو بررسی کنیم این یکی از مهمترین بخشهای مهندسی معکوس هست چون بسیاری از بدافزارها و نرمافزارهای محافظتشده از پکینگ استفاده میکنن
1 پکینگ (Packing) چیست و چرا استفاده میشود؟
🔹 پکینگ یعنی فشردهسازی یا رمزگذاری کد اجرایی برای مخفی کردن ساختار اصلی آن
🔹 این کار معمولاً با پکرها (Packers) انجام میشه که فایل اجرایی رو تغییر میدن و کد اصلی فقط در زمان اجرا در حافظه باز میشه
📌 دلایل استفاده از پکینگ:
✅ جلوگیری از مهندسی معکوس و کرک شدن نرمافزارها (مثل بازیها و برنامههای پولی)
✅ کاهش حجم فایلهای اجرایی (در نسخههای قدیمیتر برای نرمافزارهای فشردهشده)
✅ مخفی کردن بدافزارها از آنتیویروسها
بسیاری از ویروسها تروجانها و باجافزارها از پکینگ استفاده میکنن تا کد مخربشون رو مخفی کنن
2 پکرهای معروف و پرکاربرد
🔹 پکرهای قانونی:
برای محافظت از نرمافزارهای تجاری
🔹 پکرهای بدافزار:
برای مخفی کردن بدافزارها و دور زدن آنتیویروس
📌 برخی از پکرهای معروف:
پکرهایی مثل Themida و VMProtect در نرمافزارهای پولی استفاده میشن ولی UPX بیشتر برای فشردهسازی ساده کاربرد داره
3 روشهای تشخیص یک فایل پکشده
وقتی یک فایل اجرایی رو باز میکنی شاید متوجه بشی که کدش واضح نیست یا خیلی فشرده و عجیب به نظر میرسه برای فهمیدن اینکه یه فایل پک شده یا نه این روشها رو بررسی کن
🔹 روش 1: بررسی امضای پکرها با PEiD یا Detect It Easy (DIE)
🔹 ابزار PEiD یا DIE میتونن پکر مورد استفاده در یک فایل PE رو شناسایی کنن
💻 در ویندوز:
1 PEiD یا Detect It Easy (DIE) رو اجرا کن.
2 فایل اجرایی رو داخلش بکش
3 اگر یه اسم پکر مثل UPX یا ASPack نشون داد، یعنی پک شده.
🔹 روش 2: بررسی جدول بخشهای فایل (Sections) در PE
🔹 پکشدهها معمولاً بخشهای غیرعادی مثل UPX0, UPX1, .text با اندازه خیلی کم دارن
🔹 میتونی با PE-Bear یا CFF Explorer فایل PE رو باز کنید و ببینید که آیا بخشهای مشکوک داره یا نه
🔹 روش 3: اجرای باینری در دیباگر و بررسی تغییرات حافظه
🔹 بعضی پکشدهها موقع اجرا کد واقعیشون رو در حافظه Extract میکنن
🔹 میتونی با x64dbg یا OllyDbg اجراش کنی و ببینی که آیا در طول اجرا کدش تغییر میکنه یا نه
4 آنپکینگ دستی باینریها (Unpacking)
برای باز کردن کد مخفی شده چندین روش وجود داره:
🔹 روش1:
آنپک کردن خودکار با UPX
اگر فایل با UPX پک شده باشه به راحتیه میتونید آنپکش کنید:
upx -d packed.exe -o unpacked.exe
اما... پکرهای پیچیدهتر مثل Themida یا VMProtect اینقدر راحت آنپک نمیشن
🔹 روش ۲:
پیدا کردن OEP (Entry Point اصلی) و دامپ کردن فایل از حافظه
📌 مراحل آنپکینگ دستی در دیباگر (مثلاً x64dbg):
1 فایل پکشده رو توی x64dbg باز کن
2 نقاط مشکوک رو پیدا کن:
اغلب پکشدهها قبل از اجرای کد اصلی، روی NtProtectVirtualMemory یا VirtualAlloc توقف دارن
3 روی OEP (Original Entry Point) بریکپوینت بذار:
معمولاً JMP EAX یا JMP ESP نشونه اینه که کد آنپک شده و آماده اجراست
4 وقتی به OEP رسیدی فایل رو از حافظه دامپ کن:
از Scylla یا OllyDump برای استخراج باینری استفاده کن
5 ریبیلد کردن بخشهای PE:
اگر آدرس Import Table خراب شد میتونی با Import Reconstructor اصلاحش کنی
این روش معمولاً برای پکرهای پیچیده مثل Themida و VMProtect استفاده میشه
5 ابزارهای مهم برای آنپک کردن باینریها
🔹 ابزارهای تشخیص پکرها:
✅ PEiD – شناسایی پکرهای رایج
✅ Detect It Easy (DIE) – تحلیل باینری و پیدا کردن امضای پکرها
✅ Exeinfo PE – نمایش اطلاعات پکرهای پیشرفته
🔹 ابزارهای دیباگ و آنپکینگ:
✅ x64dbg / OllyDbg – دیباگ و یافتن OEP
✅ Scylla / ImpRec – ریبیلد کردن Import Table بعد از آنپکینگ
✅ UPX – برای پک و آنپک کردن UPX
🔹 ابزارهای تحلیل حافظه :
Process Hacker – نمایش حافظه پروسهها
Hollows Hunter – تشخیص کدهای تزریق شده و Unpacking Runtime
پکینگ یعنی فشردهسازی و رمزگذاری کد اجرایی برای جلوگیری از مهندسی معکوس کاهش حجم و مخفی کردن بدافزارها
پکرهای معروف مثل UPX Themida و VMProtect در نرمافزارهای قانونی و بدافزارها استفاده میشن
برای تشخیص یک فایل پکشده ابزارهایی مثل PEiD DIE و x64dbg استفاده میشن
آنپکینگ دستی باینریها شامل پیدا کردن OEP دامپ کردن از حافظه و بازسازی Import Table هست
ابزارهایی مثل Scylla OllyDbg و Process Hacker برای آنپکینگ استفاده میشن
👍12❤3
دیباگ کردن برنامهها بدون سورسکد
🔍 دیباگ (Debugging) چیست و چرا مهمه؟
🔹 دیباگ کردن یعنی اجرای یک برنامه بهصورت خط به خط برای فهمیدن چگونگی عملکرد اون
🔹 وقتی سورسکد رو نداریم با دیباگ کردن میتونیم مقدار متغیرها شرطها و الگوریتمهای داخلی برنامه رو بفهمیم
🔹 این کار برای آنالیز بدافزارها کرک کردن نرمافزارها و رفع باگ در برنامههای ناشناس استفاده میشه
📌 اهداف دیباگ بدون سورسکد:
✅ فهمیدن ساختار برنامه
✅ پیدا کردن کلیدهای رمزنگاری توکنها و پسوردهای داخلی
✅ بایپس کردن مکانیزمهای امنیتی مثل ضد دیباگ و لایسنس
✅ شناسایی نقاط ورود و اجرای کد
ابزارهای دیباگ برای برنامههای ویندوزی
🔹 برای دیباگ برنامههای کامپایل شده (مثلاً فایلهای EXE یا DLL) از دیباگرهای سطح پایین استفاده میکنیم مهمترین ابزارها اینا هستن:
دیباگرهای معروف برای باینریهای ویندوز
✅ x64dbg – محبوبترین دیباگر برای مهندسی معکوس و کرک نرمافزار
✅ OllyDbg – نسخه قدیمیتر ولی همچنان کاربردی
✅ WinDbg – دیباگر مایکروسافت برای ویندوز و کرنلدیباگینگ
✅ IDA Pro – قویترین ابزار برای دیکامپایل و دیباگ کردن توابع
ابزارهای کمکی برای دیباگ
✅ Process Hacker – نمایش جزئیات پردازشهای در حال اجرا
✅ Cheat Engine – برای تغییر مقدار متغیرها در حافظه
✅ Scylla – دامپ کردن و بازسازی Import Table
آشنایی با محیط x64dbg برای دیباگ باینریها
🔹 x64dbg یکی از بهترین ابزارها برای دیباگ کردن برنامههای 32 بیتی و 64 بیتی در ویندوز هست.
🔹 میتونیم فایل اجرایی (EXE) رو باز کنیم کد اسمبلی رو ببینیم روی نقاط مختلف بریکپوینت بذاریم و مقدار متغیرها رو بررسی کنیم
🔍 دیباگ (Debugging) چیست و چرا مهمه؟
🔹 دیباگ کردن یعنی اجرای یک برنامه بهصورت خط به خط برای فهمیدن چگونگی عملکرد اون
🔹 وقتی سورسکد رو نداریم با دیباگ کردن میتونیم مقدار متغیرها شرطها و الگوریتمهای داخلی برنامه رو بفهمیم
🔹 این کار برای آنالیز بدافزارها کرک کردن نرمافزارها و رفع باگ در برنامههای ناشناس استفاده میشه
📌 اهداف دیباگ بدون سورسکد:
✅ فهمیدن ساختار برنامه
✅ پیدا کردن کلیدهای رمزنگاری توکنها و پسوردهای داخلی
✅ بایپس کردن مکانیزمهای امنیتی مثل ضد دیباگ و لایسنس
✅ شناسایی نقاط ورود و اجرای کد
ابزارهای دیباگ برای برنامههای ویندوزی
🔹 برای دیباگ برنامههای کامپایل شده (مثلاً فایلهای EXE یا DLL) از دیباگرهای سطح پایین استفاده میکنیم مهمترین ابزارها اینا هستن:
دیباگرهای معروف برای باینریهای ویندوز
✅ x64dbg – محبوبترین دیباگر برای مهندسی معکوس و کرک نرمافزار
✅ OllyDbg – نسخه قدیمیتر ولی همچنان کاربردی
✅ WinDbg – دیباگر مایکروسافت برای ویندوز و کرنلدیباگینگ
✅ IDA Pro – قویترین ابزار برای دیکامپایل و دیباگ کردن توابع
ابزارهای کمکی برای دیباگ
✅ Process Hacker – نمایش جزئیات پردازشهای در حال اجرا
✅ Cheat Engine – برای تغییر مقدار متغیرها در حافظه
✅ Scylla – دامپ کردن و بازسازی Import Table
آشنایی با محیط x64dbg برای دیباگ باینریها
🔹 x64dbg یکی از بهترین ابزارها برای دیباگ کردن برنامههای 32 بیتی و 64 بیتی در ویندوز هست.
🔹 میتونیم فایل اجرایی (EXE) رو باز کنیم کد اسمبلی رو ببینیم روی نقاط مختلف بریکپوینت بذاریم و مقدار متغیرها رو بررسی کنیم
🔥11👍1
Reversing_secrets_of_reverse_engineering_by_Eldad_Eilam_2005_@bookzillaaa.pdf
8.4 MB
کتاب Secrets of Reverse Engineering نوشته Eldad Eilam است
این کتاب یکی از بهترین منابع برای یادگیری مهندسی معکوس نرمافزاره و مفاهیم کلیدی رو از پایه تا سطح پیشرفته توضیح میده برخی از موضوعاتی که در کتاب پوشش داده شدن
مقدمهای بر مهندسی معکوس و کاربردهای آن
تحلیل باینریها و ساختارهای اجرایی
ابزارهای مورد استفاده مانند IDA Pro، OllyDbg و SoftICE
تکنیکهای دیباگینگ و تحلیل بدافزارها
مکانیزمهای ضد مهندسی معکوس و روشهای بایپس آنها
اگر تازهکار هستی این کتاب یه نقطه شروع عالیه
این کتاب یکی از بهترین منابع برای یادگیری مهندسی معکوس نرمافزاره و مفاهیم کلیدی رو از پایه تا سطح پیشرفته توضیح میده برخی از موضوعاتی که در کتاب پوشش داده شدن
مقدمهای بر مهندسی معکوس و کاربردهای آن
تحلیل باینریها و ساختارهای اجرایی
ابزارهای مورد استفاده مانند IDA Pro، OllyDbg و SoftICE
تکنیکهای دیباگینگ و تحلیل بدافزارها
مکانیزمهای ضد مهندسی معکوس و روشهای بایپس آنها
اگر تازهکار هستی این کتاب یه نقطه شروع عالیه
❤17👍2
📌 چطور یک فایل EXE را در x64dbg دیباگ کنیم؟
1️⃣ x64dbg رو باز کن و برنامه رو Load کن
از منوی File → Open، فایل EXE رو انتخاب کن.
2️⃣ روی نقطه ورود (Entry Point) بریکپوینت بذار معمولاً
در اولین دستور PUSH EBP یا MOV EBP, ESP
3️⃣ اجرای برنامه تا رسیدن به بریکپوینت
روی دکمه Run (F9) کلیک کن تا برنامه اجرا بشه و به اولین بریکپوینت برسه
4️⃣ بررسی رجیسترها و استک
پنل رجیسترها رو ببینید و مقدار متغیرها و آدرسهای حافظه رو بررسی کنید
5️⃣ ردیابی دستورات مهم مثل CALL, JMP, CMP
این دستورات نشون میدن که برنامه چطور دادهها رو پردازش میکنه و کجا تصمیمگیری انجام میشه.
6️⃣ تغییر مقدار متغیرها و بایپس کردن شرطها
اگه برنامه یه مکانیزم ضد دیباگ یا لایسنس داره میتونیم مقدار متغیرهای خاص رو تغییر بدیم تا برنامه گول بخوره
پیدا کردن رشتههای مهم در حافظه برنامه
🔹 بعضی وقتها برنامهها پسوردها، کلیدهای لایسنس، توکنهای API یا پیامهای مخفی دارن.
🔹 میتونیم با ابزارهای دیباگ این رشتهها رو استخراج کنیم
📌 چطور رشتههای مخفی رو پیدا کنیم؟
✅ با x64dbg:
1. از منوی Search → Search for گزینه Strings رو انتخاب کنید
2. تمام رشتههای استفاده شده در برنامه رو ببینیپ و دنبال چیزهای مشکوک بگردید
✅ با ابزارهای کمکی مثل Strings از Sysinternals:
strings.exe my_program.exe
این دستور، تمام رشتههای خوانا داخل فایل اجرایی رو نشون میده.
✅ بررسی حافظه با Cheat Engine:
برنامه رو اجرا کن و Cheat Engine رو باز کن.
پروسه برنامه رو انتخاب کنید و جستجوی Text/String انجام بدید.
اگر چیزی پیدا شد مقدارش رو تغییر بدید و ببینید چه اتفاقی میافته ایا برنامه کرک میشه یا نه
1️⃣ x64dbg رو باز کن و برنامه رو Load کن
از منوی File → Open، فایل EXE رو انتخاب کن.
2️⃣ روی نقطه ورود (Entry Point) بریکپوینت بذار معمولاً
در اولین دستور PUSH EBP یا MOV EBP, ESP
3️⃣ اجرای برنامه تا رسیدن به بریکپوینت
روی دکمه Run (F9) کلیک کن تا برنامه اجرا بشه و به اولین بریکپوینت برسه
4️⃣ بررسی رجیسترها و استک
پنل رجیسترها رو ببینید و مقدار متغیرها و آدرسهای حافظه رو بررسی کنید
5️⃣ ردیابی دستورات مهم مثل CALL, JMP, CMP
این دستورات نشون میدن که برنامه چطور دادهها رو پردازش میکنه و کجا تصمیمگیری انجام میشه.
6️⃣ تغییر مقدار متغیرها و بایپس کردن شرطها
اگه برنامه یه مکانیزم ضد دیباگ یا لایسنس داره میتونیم مقدار متغیرهای خاص رو تغییر بدیم تا برنامه گول بخوره
پیدا کردن رشتههای مهم در حافظه برنامه
🔹 بعضی وقتها برنامهها پسوردها، کلیدهای لایسنس، توکنهای API یا پیامهای مخفی دارن.
🔹 میتونیم با ابزارهای دیباگ این رشتهها رو استخراج کنیم
📌 چطور رشتههای مخفی رو پیدا کنیم؟
✅ با x64dbg:
1. از منوی Search → Search for گزینه Strings رو انتخاب کنید
2. تمام رشتههای استفاده شده در برنامه رو ببینیپ و دنبال چیزهای مشکوک بگردید
✅ با ابزارهای کمکی مثل Strings از Sysinternals:
strings.exe my_program.exe
این دستور، تمام رشتههای خوانا داخل فایل اجرایی رو نشون میده.
✅ بررسی حافظه با Cheat Engine:
برنامه رو اجرا کن و Cheat Engine رو باز کن.
پروسه برنامه رو انتخاب کنید و جستجوی Text/String انجام بدید.
اگر چیزی پیدا شد مقدارش رو تغییر بدید و ببینید چه اتفاقی میافته ایا برنامه کرک میشه یا نه
👍16🔥3❤1