ReverseEngineering – Telegram
ReverseEngineering
1.24K subscribers
40 photos
10 videos
55 files
666 links
Download Telegram
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 استفاده میشه
🔥51
📌 ابزارهای دی‌کامپایل و بازگردانی سورس‌کد

اگه برنامه‌ای به زبان‌های سطح بالا مثل 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 یکی از قوی‌ترین ابزارهای مهندسی معکوسه و این کتاب قدم‌به‌قدم بهت یاد میده بهتون که چطور ازش استفاده کنید از رابط کاربری و اسکریپت‌نویسی گرفته تا دیباگ کردن و تحلیل نرم‌افزارها


اگه ردتیمینگ کار می‌کنید و دنبال اینید که بفهمید برنامه‌ها چطور از مهندسی معکوس محافظت می‌شن
🔥10👍1
تکنیک‌های ضد دیباگ و ضد مهندسی معکوس در نرم‌افزارها


حالا که ساختار فایل‌های اجرایی (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
👍52
برای دور زدن مکانیزم‌های ضد دیباگ، می‌تونیم APIهای مربوطه رو هوک کنیم یا مقدار برگشتی اون‌ها رو تغییر بدیم



برنامه‌ها از تکنیک‌های ضد دیباگ برای جلوگیری از کرک و مهندسی معکوس استفاده می‌کنن.

روش‌های ساده مثل 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 رو آموزش میده و به مهندسی معکوس نرم‌افزارها، آنالیز بدافزارها و کرک کردن باینری‌ها می‌پردازه
👍17
پکینگ و آنپکینگ باینری‌ها


حالا که با تکنیک‌های ضد دیباگ و ضد مهندسی معکوس آشنا شدید وقتشه پکینگ (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 برای آنپکینگ استفاده میشن
👍123
دیباگ کردن برنامه‌ها بدون سورس‌کد



🔍 دیباگ (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

تکنیک‌های دیباگینگ و تحلیل بدافزارها

مکانیزم‌های ضد مهندسی معکوس و روش‌های بایپس آن‌ها


اگر تازه‌کار هستی این کتاب یه نقطه شروع عالیه
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 انجام بدید.


اگر چیزی پیدا شد مقدارش رو تغییر بدید و ببینید چه اتفاقی می‌افته ایا برنامه کرک میشه یا نه
👍16🔥31
📌 دیباگ کردن برنامه‌های پایتونی:

از ابزار PySpy یا Frida برای مانیتورینگ کد در حال اجرا استفاده کنید
فایل‌های pyc رو با uncompyle6 دی‌کامپایل کنید

📌 دیباگ کردن برنامه‌های جاوا:

از JD-GUI یا Bytecode Viewer برای دیدن کد استفاده کنید
با JDB (Java Debugger) می‌تونی متغیرها و توابع رو بررسی کنید


📌 دیباگ کردن برنامه‌های دات نت:

از dnSpy برای دی‌کامپایل و دیباگ کد C# استفاده کنید
توابع رو ویرایش کنید و مجددا کامپایل کنید
#debug
#python
#java
👍19👏1
18👏4
اگه ممبرهای کانال نره بالا متاسفانه مجبور میشم فعالیت رو متوقف کنم چون واقعا انگیزه ای نیست برای ادامه دادن پس تا جایی که میتونید کانال رو share کنید دمتون گرم عیدتونم مبارک سال خوبی داشته باشید❤️‍🔥🫶🏼
47👎3👏1😁1🍌1
ReverseEngineering pinned «اگه ممبرهای کانال نره بالا متاسفانه مجبور میشم فعالیت رو متوقف کنم چون واقعا انگیزه ای نیست برای ادامه دادن پس تا جایی که میتونید کانال رو share کنید دمتون گرم عیدتونم مبارک سال خوبی داشته باشید❤️‍🔥🫶🏼»