رمز ترنسپوزیشن چیه؟
رمز ترنسپوزیشن یه روش رمزنگاریه که توش حروف متن اصلی تغییر نمیکنن فقط جاشون عوض میشه یعنی همون حروف هستن ولی یه ترتیب دیگه دارن
یه مثال ساده:
کلمه "سلام" رو در نظر بگیرید اگه جای حروف رو جابهجا کنیم میتونیم چیزایی مثل "مالس" یا "لامس" بسازیم این دقیقا همون مفهوم ترنسپوزیشنه
روش جابهجایی ساده (Simple Transposition)
کاری که میکنه: جای حروف رو با یه ترتیب خاص عوض میکنه
مثال :
متن اصلی: HELLO
اگه جای حروف رو دوتا دوتا عوض کنیم میشه:
EHLOL
رمز ترنسپوزیشن یه روش رمزنگاریه که توش حروف متن اصلی تغییر نمیکنن فقط جاشون عوض میشه یعنی همون حروف هستن ولی یه ترتیب دیگه دارن
یه مثال ساده:
کلمه "سلام" رو در نظر بگیرید اگه جای حروف رو جابهجا کنیم میتونیم چیزایی مثل "مالس" یا "لامس" بسازیم این دقیقا همون مفهوم ترنسپوزیشنه
روش جابهجایی ساده (Simple Transposition)
کاری که میکنه: جای حروف رو با یه ترتیب خاص عوض میکنه
مثال :
متن اصلی: HELLO
اگه جای حروف رو دوتا دوتا عوض کنیم میشه:
EHLOL
❤3
2 ابزارهای دیباگینگ و تحلیل داینامیک
🔍 تحلیل داینامیک یعنی بررسی یه برنامه حین اجرا این کار باعث میشه بفهمی که متغیرها چطور تغییر میکنن و برنامه چجوری کار میکنه
🔹 x64dbg / x32dbg → محبوبترین دیباگر برای مهندسی معکوس و کرکینگ (ویندوز)
🔹 OllyDbg → یه دیباگر قدیمی ولی هنوز کاربردی برای برنامههای
32 بیتی
🔹 WinDbg → دیباگر رسمی مایکروسافت برای ویندوز
🔹 GDB → دیباگر خط فرمانی برای لینوکس
🔹 Frida → یه ابزار برای دیباگ کردن اپلیکیشنهای اندروید و iOS
🔹 API Monitor → نمایش تمام ای پی ای هایی که یه برنامه فراخوانی میکنه
💡 کی ازشون استفاده کنیم؟
وقتی بخوای بفهمی کدوم بخش برنامه مسئول چک کردن لایسنسه یا مثلا یه برنامه موقع اجرا چه تغییراتی روی فایلهای سیستم انجام میده
🔍 تحلیل داینامیک یعنی بررسی یه برنامه حین اجرا این کار باعث میشه بفهمی که متغیرها چطور تغییر میکنن و برنامه چجوری کار میکنه
🔹 x64dbg / x32dbg → محبوبترین دیباگر برای مهندسی معکوس و کرکینگ (ویندوز)
🔹 OllyDbg → یه دیباگر قدیمی ولی هنوز کاربردی برای برنامههای
32 بیتی
🔹 WinDbg → دیباگر رسمی مایکروسافت برای ویندوز
🔹 GDB → دیباگر خط فرمانی برای لینوکس
🔹 Frida → یه ابزار برای دیباگ کردن اپلیکیشنهای اندروید و iOS
🔹 API Monitor → نمایش تمام ای پی ای هایی که یه برنامه فراخوانی میکنه
💡 کی ازشون استفاده کنیم؟
وقتی بخوای بفهمی کدوم بخش برنامه مسئول چک کردن لایسنسه یا مثلا یه برنامه موقع اجرا چه تغییراتی روی فایلهای سیستم انجام میده
❤2👍2
تحلیل ضد دیباگینگ و ضد مهندسی معکوس
تاخیر در اجرای کد برای شناسایی دیباگر Timing checks
شناسایی دیباگرها با Timing Check
یکی از روشهای محبوب برای تشخیص اینکه یه برنامه تحت دیباگ اجرا میشه یا نه،اینه که زمان اجرای بخشهای مختلف کد رو بررسی کنه چرا چون وقتی یه دیباگر فعال باشه اجرای کد یه مقدار کندتر میشه مخصوصا وقتی Breakpoint بزاری یا دستور Single-Step اجرا کنی
روشهای رایج Timing Check و چجوری بایپسشون کنیم؟
1 اندازهگیری زمان با APIهای ویندوز
برنامه میاد با یه سری توابع مثل
GetTickCount، QueryPerformanceCounter، RDTSC
زمان اجرا رو اندازهگیری میکنه. اگه زمان بیشتر از حد عادی باشه یعنی دیباگر فعاله
مثال ساده:
چرا جواب میده؟
چون اگه دیباگر فعال باشه اجرای برنامه متوقف میشه و این وقفه باعث میشه تاخیر بیشتر بشه و لو بری
چطور دورش بزنیم؟
Patch کردن API ها
(Sleepمثلاً مقدار
رو تغییر بدی)
Hook کردن GetTickCount و مقدار فیک برگردوندن
2 استفاده از RDTSC (دستور تایمر CPU)
دستور RDTSC تعداد سیکلهای CPU از زمان روشن شدن سیستم رو میشمره اگه برنامه ببینه مقدار تغییر یافته بیش از حد معمول باشه یعنی احتمالا یه دیباگر فعاله
کد اسمبلی:
چطور دورش بزنیم؟
پچ کردن کدی که RDTSC رو اجرا میکنه
Hook کردن RDTSC و مقدار فیک برگردوندن
استفاده از پلاگینهای Anti-Anti-Debug مثل ScyllaHide
3 مقایسه زمان Sleep() با مقدار واقعی
برنامه یه تاخیر عمدی (مثلاً Sleep(500)) ایجاد میکنه و بعد چک میکنه آیا واقعا همونقدر طول کشیده یا نه اگه بیشتر طول کشیده باشه → یعنی دیباگر توی کاره
مثال:
چطور دورش بزنیم؟
Patch کردن Sleep()
تا مقدار واقعی Sleep نادیده گرفته بشه
Hook QueryPerformanceCounter
و مقدار ثابت برگردوندن
تاخیر در اجرای کد برای شناسایی دیباگر Timing checks
شناسایی دیباگرها با Timing Check
یکی از روشهای محبوب برای تشخیص اینکه یه برنامه تحت دیباگ اجرا میشه یا نه،اینه که زمان اجرای بخشهای مختلف کد رو بررسی کنه چرا چون وقتی یه دیباگر فعال باشه اجرای کد یه مقدار کندتر میشه مخصوصا وقتی Breakpoint بزاری یا دستور Single-Step اجرا کنی
روشهای رایج Timing Check و چجوری بایپسشون کنیم؟
1 اندازهگیری زمان با APIهای ویندوز
برنامه میاد با یه سری توابع مثل
GetTickCount، QueryPerformanceCounter، RDTSC
زمان اجرا رو اندازهگیری میکنه. اگه زمان بیشتر از حد عادی باشه یعنی دیباگر فعاله
مثال ساده:
#include <windows.h>
#include <iostream>
int main() {
DWORD start = GetTickCount();
Sleep(100);
DWORD end = GetTickCount();
if (end - start > 110) {
std::cout << "Debugger detected!" << std::endl;
} else {
std::cout << "No debugger found." << std::endl;
}
}
چرا جواب میده؟
چون اگه دیباگر فعال باشه اجرای برنامه متوقف میشه و این وقفه باعث میشه تاخیر بیشتر بشه و لو بری
چطور دورش بزنیم؟
Patch کردن API ها
(Sleepمثلاً مقدار
رو تغییر بدی)
Hook کردن GetTickCount و مقدار فیک برگردوندن
2 استفاده از RDTSC (دستور تایمر CPU)
دستور RDTSC تعداد سیکلهای CPU از زمان روشن شدن سیستم رو میشمره اگه برنامه ببینه مقدار تغییر یافته بیش از حد معمول باشه یعنی احتمالا یه دیباگر فعاله
کد اسمبلی:
rdtsc
mov ebx, eax
; اجرای یه بخش از کد
rdtsc
sub eax, ebx
cmp eax, 1000
jg debugger_detected
چطور دورش بزنیم؟
پچ کردن کدی که RDTSC رو اجرا میکنه
Hook کردن RDTSC و مقدار فیک برگردوندن
استفاده از پلاگینهای Anti-Anti-Debug مثل ScyllaHide
3 مقایسه زمان Sleep() با مقدار واقعی
برنامه یه تاخیر عمدی (مثلاً Sleep(500)) ایجاد میکنه و بعد چک میکنه آیا واقعا همونقدر طول کشیده یا نه اگه بیشتر طول کشیده باشه → یعنی دیباگر توی کاره
مثال:
#include <windows.h>
#include <iostream>
int main() {
LARGE_INTEGER freq, start, end;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
Sleep(500);
QueryPerformanceCounter(&end);
double elapsed = (double)(end.QuadPart - start.QuadPart) / freq.QuadPart;
if (elapsed > 0.55) {
std::cout << "Debugger detected!" << std::endl;
} else {
std::cout << "No debugger found." << std::endl;
}
}
چطور دورش بزنیم؟
Patch کردن Sleep()
تا مقدار واقعی Sleep نادیده گرفته بشه
Hook QueryPerformanceCounter
و مقدار ثابت برگردوندن
👍8❤3
ReverseEngineering
رمز ترنسپوزیشن چیه؟ رمز ترنسپوزیشن یه روش رمزنگاریه که توش حروف متن اصلی تغییر نمیکنن فقط جاشون عوض میشه یعنی همون حروف هستن ولی یه ترتیب دیگه دارن یه مثال ساده: کلمه "سلام" رو در نظر بگیرید اگه جای حروف رو جابهجا کنیم میتونیم چیزایی مثل "مالس" یا "لامس"…
روش راهآهنی (Rail Fence Cipher)
تو این روش متن رو بهشکل زیگزاگی مینویسیم و بعد خط به خط میخونیم
مثال :
متن: HELLO WORLD
اگه با 3 ردیف اینو بنویسیم میشه :
H L O W D E L O R L O
بعد اگه از بالا به پایین بخونیم متن رمز شده میشه :
HLOWD ELOR LO
تو این روش متن رو بهشکل زیگزاگی مینویسیم و بعد خط به خط میخونیم
مثال :
متن: HELLO WORLD
اگه با 3 ردیف اینو بنویسیم میشه :
H L O W D E L O R L O
بعد اگه از بالا به پایین بخونیم متن رمز شده میشه :
HLOWD ELOR LO
👍2❤1
https://medium.com/@fedoraman/kashi-ctf-2025-reverse-engineering-writeup-painfully-slow-f44819a16894
Medium
Kashi CTF 2025 Reverse Engineering Writeup “Painfully Slow”
Greetings, my name is fedoraman737, and I am the leader of our CTF team noscriptd “Fedoraman Project” . Our team has participated in Kashi CTF…
❤1
ابزارهای بررسی حافظه و انالیز رفتار برنامه
این ابزارها کمک میکنن که بفهمی یه برنامه چه کارهایی توی سیستم انجام میده
Process Hacker نمایش همه پردازشهای در حال اجرا و اطلاعات مربوط به اونها
Procmon (Process Monitor) بررسی تمام فعالیتهای یک برنامه روی فایلها و رجیستری
HxD / 010 Editor ویرایشگر هگز برای تغییر فایلهای باینری
Cheat Engine تغییر مقدار متغیرهای داخل حافظه (برای کرکینگ و بازیها)
وقتی بخوای ببینی یه برنامه موقع اجرا چه فایلی میخونه چه تغییری توی رجیستری میده یا چه دادهای توی حافظه ذخیره کرده از اینا استفاده میکنیم
این ابزارها کمک میکنن که بفهمی یه برنامه چه کارهایی توی سیستم انجام میده
Process Hacker نمایش همه پردازشهای در حال اجرا و اطلاعات مربوط به اونها
Procmon (Process Monitor) بررسی تمام فعالیتهای یک برنامه روی فایلها و رجیستری
HxD / 010 Editor ویرایشگر هگز برای تغییر فایلهای باینری
Cheat Engine تغییر مقدار متغیرهای داخل حافظه (برای کرکینگ و بازیها)
وقتی بخوای ببینی یه برنامه موقع اجرا چه فایلی میخونه چه تغییری توی رجیستری میده یا چه دادهای توی حافظه ذخیره کرده از اینا استفاده میکنیم
👍6❤1
Practical_reverse_engineering_x86,_x64,_ARM,_Windows_Kernel,_reversing.pdf
4.6 MB
این کتاب شامل تمرینها و راهحلهایی با ویروسها و روتکیتهای واقعی و مخربه نویسندگان این کتاب عمدا این کار رو انجام دادن تا اطمینان پیدا کنن که خوانندگان میتونن فورا مهارتهای که یاد گرفتن خودشون استفاده کنن نمونههای بدافزار به ترتیب حروف الفبا (نمونه A، B، C، …)
انواع معماری رو هم میگه Arm x64 x86
انواع معماری رو هم میگه Arm x64 x86
❤5👏1
ابزارهای بررسی و ویرایش فایلهای اجرایی
این ابزارها برای بررسی و تغییر فایلهای PE (ویندوز) و ELF (لینوکس) استفاده میشن
🔹 PE-bear → نمایش ساختار فایلهای PE و ویرایش اونها
🔹 LordPE → استخراج توابع و اطلاعات PE
🔹 CFF Explorer → بررسی هدرهای فایل PE و تغییر مشخصات اون
وقتی بخوایم بفهمیم یه فایل اجرایی چجوری ساخته شده یا مثلا یه امضای دیجیتال رو ازش حذف کنیم
این ابزارها برای بررسی و تغییر فایلهای PE (ویندوز) و ELF (لینوکس) استفاده میشن
🔹 PE-bear → نمایش ساختار فایلهای PE و ویرایش اونها
🔹 LordPE → استخراج توابع و اطلاعات PE
🔹 CFF Explorer → بررسی هدرهای فایل PE و تغییر مشخصات اون
وقتی بخوایم بفهمیم یه فایل اجرایی چجوری ساخته شده یا مثلا یه امضای دیجیتال رو ازش حذف کنیم
👍4
https://medium.com/@fedoraman/kashi-ctf-2025-reverse-engineering-writeup-painfully-slow-f44819a16894
Medium
Kashi CTF 2025 Reverse Engineering Writeup “Painfully Slow”
Greetings, my name is fedoraman737, and I am the leader of our CTF team noscriptd “Fedoraman Project” . Our team has participated in Kashi CTF…
تحلیل ساختار فایلهای اجرایی PE در ویندوز
باید بدونید که فایلهای اجرایی (EXE، DLL و...) چجوری ساخته میشن و چطور داخل حافظه لود میشن چون مهندسی معکوس بیشتر روی این فایلها انجام میشه فهمیدن ساختارشون خیلی مهمه
فرمتهای مختلف فایلهای اجرایی
وقتی یه برنامه رو توی ویندوز یا لینوکس اجرا میکنید اون فایل اجرایی توی حافظه لود میشه فایلهای اجرایی توی سیستمعاملهای مختلف فرمتهای متفاوتی دارن:
PE (Portable Executable) → مخصوص ویندوز
ELF (Executable and Linkable Format) → مخصوص لینوکس و اندروید
Mach-O → مخصوص macOS و iOS
2. ساختار فایل PE در ویندوز (EXE و DLL)
هر فایل اجرایی در ویندوز یه فرمت استاندارد به اسم PE (Portable Executable) داره این فرمت برای EXEها و DLLها استفاده میشن
ساختار کلی یک فایل PE :
| DOS Header |
اطلاعات ابتدایی (شاملMZ Signature) |
| PE Header | اطلاعات کلی فایل اجرایی |
| Section Table | فهرست سکشنهای فایل (کد، داده، منابع و ...) |
| Sections | بخشهای مختلف برنامه (کد اسمبلی، دادهها و ...) |
با ابزار CFF Explorer یا PEview میتونید این اطلاعات رو ببینید
بخشهای مهم در فایل PE
1 DOS Header:
اولین قسمت فایل PE هست و همیشه با MZ Signature شروع میشه این بخش قدیمیه و برای سازگاری با DOS استفاده میشه
2 PE Header (NT Headers):
این قسمت شامل اطلاعات کلی درباره فایل اجراییه مثل:
نوع پردازنده (32 یا 64 بیت)
تعداد سکشنها
آدرس نقاط ورود (Entry Point)
3 Section Table (جدول سکشنها):
فایل PE به چند سکشن (بخش) تقسیم میشه. هر سکشن یه هدف خاص داره:
توی مهندسی معکوس معمولا کد مخرب یا مکانیزمهای کرک در سکشن .text یا .data قرار دارن
4 Import Table (جدول ایمپورتها):
این جدول نشون میده که برنامه از کدوم DLLها و APIها استفاده میکنه برای مهندسی معکوس خیلی مهمه چون میتونی بفهمی که یه برنامه چجوری کار میکنه
5 Entry Point :
این آدرسیه که برنامه از اونجا اجرا میشه توی دیباگر (مثلاً x64dbg) این نقطه همونجاییه که اولین دستور اسمبلی اجرا میشه
باید بدونید که فایلهای اجرایی (EXE، DLL و...) چجوری ساخته میشن و چطور داخل حافظه لود میشن چون مهندسی معکوس بیشتر روی این فایلها انجام میشه فهمیدن ساختارشون خیلی مهمه
فرمتهای مختلف فایلهای اجرایی
وقتی یه برنامه رو توی ویندوز یا لینوکس اجرا میکنید اون فایل اجرایی توی حافظه لود میشه فایلهای اجرایی توی سیستمعاملهای مختلف فرمتهای متفاوتی دارن:
PE (Portable Executable) → مخصوص ویندوز
ELF (Executable and Linkable Format) → مخصوص لینوکس و اندروید
Mach-O → مخصوص macOS و iOS
2. ساختار فایل PE در ویندوز (EXE و DLL)
هر فایل اجرایی در ویندوز یه فرمت استاندارد به اسم PE (Portable Executable) داره این فرمت برای EXEها و DLLها استفاده میشن
ساختار کلی یک فایل PE :
| DOS Header |
اطلاعات ابتدایی (شاملMZ Signature) |
| PE Header | اطلاعات کلی فایل اجرایی |
| Section Table | فهرست سکشنهای فایل (کد، داده، منابع و ...) |
| Sections | بخشهای مختلف برنامه (کد اسمبلی، دادهها و ...) |
با ابزار CFF Explorer یا PEview میتونید این اطلاعات رو ببینید
بخشهای مهم در فایل PE
1 DOS Header:
اولین قسمت فایل PE هست و همیشه با MZ Signature شروع میشه این بخش قدیمیه و برای سازگاری با DOS استفاده میشه
2 PE Header (NT Headers):
این قسمت شامل اطلاعات کلی درباره فایل اجراییه مثل:
نوع پردازنده (32 یا 64 بیت)
تعداد سکشنها
آدرس نقاط ورود (Entry Point)
3 Section Table (جدول سکشنها):
فایل PE به چند سکشن (بخش) تقسیم میشه. هر سکشن یه هدف خاص داره:
توی مهندسی معکوس معمولا کد مخرب یا مکانیزمهای کرک در سکشن .text یا .data قرار دارن
4 Import Table (جدول ایمپورتها):
این جدول نشون میده که برنامه از کدوم DLLها و APIها استفاده میکنه برای مهندسی معکوس خیلی مهمه چون میتونی بفهمی که یه برنامه چجوری کار میکنه
5 Entry Point :
این آدرسیه که برنامه از اونجا اجرا میشه توی دیباگر (مثلاً x64dbg) این نقطه همونجاییه که اولین دستور اسمبلی اجرا میشه
👍5🔥1
ChaCha20 or Salsa20
یک الگوریتم رمزنگاریه که برای امنیت بالا و سرعت زیاد طراحی شده باهاش میشه دادهها رو رمزگذاری کرد تا کسی بدون کلید نتونه بخونه این الگوریتم جایگزین خوبی برای AES هست مخصوصاً توی موبایلها و پردازندههایی که سختافزار مخصوص رمزنگاری ندارن
چطوری کار میکنه؟
ChaCha20 یه جور رمزنگاری جریانیه، یعنی دادهها رو دونهدونه رمز میکنه نه بهصورت بلوکهای بزرگ
ورودیهاش چیه؟
یه کلید 256 بیتی همون رمز اصلی
یه مقدار تصادفی Nonce برای جلوگیری از تکراری شدن رمزها
یه شمارنده که توی هر بلاک تغییر میکنه
چی کار میکنه؟
چند تا عملیات ریاضی ساده مثل جمع XOR و چرخش بیتی روی دادهها انجام میده
این عملیات 20 بار تکرار میشه تا یه سری اعداد تصادفی قوی تولید کنه
این اعداد با متن اصلی ترکیب میشن و دادهی رمزگذاریشده تولید میشه
چرا از ChaCha20 استفاده کنیم؟
سریعتره چون نیاز به محاسبات پیچیدهی AES نداره
امنیت بالایی داره و در برابر حملات رمزنگاری مقاومه
روی موبایل و دستگاههای کمقدرت بهتر کار میکنه، چون نیاز به سختافزار خاصی نداره
در برابر حملات جانبی مثل حملات کش CPU امن تره
کجاها ازش استفاده میشه؟
توی HTTPS امن کردن اینترنت
توی WireGuard VPN برای اتصال امن
توی OpenSSH برای ارتباطات رمزگذاریشده
توی Google QUIC که اینترنت رو سریعتر و امنتر میکنه
یک الگوریتم رمزنگاریه که برای امنیت بالا و سرعت زیاد طراحی شده باهاش میشه دادهها رو رمزگذاری کرد تا کسی بدون کلید نتونه بخونه این الگوریتم جایگزین خوبی برای AES هست مخصوصاً توی موبایلها و پردازندههایی که سختافزار مخصوص رمزنگاری ندارن
چطوری کار میکنه؟
ChaCha20 یه جور رمزنگاری جریانیه، یعنی دادهها رو دونهدونه رمز میکنه نه بهصورت بلوکهای بزرگ
ورودیهاش چیه؟
یه کلید 256 بیتی همون رمز اصلی
یه مقدار تصادفی Nonce برای جلوگیری از تکراری شدن رمزها
یه شمارنده که توی هر بلاک تغییر میکنه
چی کار میکنه؟
چند تا عملیات ریاضی ساده مثل جمع XOR و چرخش بیتی روی دادهها انجام میده
این عملیات 20 بار تکرار میشه تا یه سری اعداد تصادفی قوی تولید کنه
این اعداد با متن اصلی ترکیب میشن و دادهی رمزگذاریشده تولید میشه
چرا از ChaCha20 استفاده کنیم؟
سریعتره چون نیاز به محاسبات پیچیدهی AES نداره
امنیت بالایی داره و در برابر حملات رمزنگاری مقاومه
روی موبایل و دستگاههای کمقدرت بهتر کار میکنه، چون نیاز به سختافزار خاصی نداره
در برابر حملات جانبی مثل حملات کش CPU امن تره
کجاها ازش استفاده میشه؟
توی HTTPS امن کردن اینترنت
توی WireGuard VPN برای اتصال امن
توی OpenSSH برای ارتباطات رمزگذاریشده
توی Google QUIC که اینترنت رو سریعتر و امنتر میکنه
👍5
ساختار فایل 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