ReverseEngineering – Telegram
ReverseEngineering
1.24K subscribers
40 photos
10 videos
55 files
666 links
Download Telegram
ساخت آنپکر اختصاصی برای فایل‌های Pack شده

بعد از اینکه فهمیدیم یه فایل pack شده‌ست (مثلاً با UPX یا پکرهای خاص) وقتشه خودمون بتونیم برای اون یک آنپکر بسازیم و باینری اصلی رو بازیابی کنیم


چرا باید خودمون آنپکر بنویسیم؟

همه فایل‌ها با ابزارهای آماده قابل آنپک نیستن (مثلاً نسخه‌های دستکاری‌شده یا سفارشی‌شده‌ی UPX)

در بعضی مواقع نیاز به خودکارسازی داریم (مثلاً اسکن دسته‌ای)

این تمرین باعث می‌شه به درک عمیق‌تری از ساختار PE و مکانیزم اجرای ویندوز برسید
👍4👏1
شناسایی پکر

استفاده از ابزارهایی مثل:

PEiD

Detect It Easy

بررسی سکشن‌ها ساختارهای غیرمعمول سایزهای عجیب و نام بخش‌ها
👍4👏1
پیدا کردن OEP (Original Entry Point)

اجرای فایل در دیباگر مثل x64dbg

گذاشتن Breakpoint روی APIهای کلیدی:

VirtualAlloc

WriteProcessMemory

GetProcAddress

یا حتی روی Entry Point خود فایل


دنبال کردن flow تا وقتی وارد کد unpack شده → اونجا OEP واقعی هست
👍41
گرفتن Dump از حافظه

وقتی به OEP رسیدیم:

از ابزار Scylla یا x64dbg استفاده کنیم برای گرفتن Memory Dump

آدرس‌های سکشن‌ها و Import Table رو ذخیره کنید
👍41
انواع تکنیک‌های رایج Obfuscation

Renaming (تغییر نام‌ها):

تغییر نام تابع‌ها متغیرها کلاس‌ها به اسم‌های بی‌معنا مثل a, b2, _x1 و غیره

در کد NET. و Java خیلی رایجه



2 Control Flow Obfuscation:

تغییر ساختار طبیعی کدها با اضافه کردن پرش‌های بی‌ربط if/elseهای بی‌معنا و لوپ‌های تودرتو

در اسمبلی به شکل JMP‌های زیاد، CALL های بی‌دلیل یا پرش‌های به عقب دیده میشه



3 Junk Code Injection:

تزریق دستوراتی که هیچ کاری نمی‌کنن (NOP، push/pop‌های بی‌اثر) فقط برای گمراه کردن دیباگر یا دیس‌اسمبلر



4 Opaque Predicates:

شرط هایی که همیشه درست یا غلط هستن ولی تحلیل‌گر رو گیج میکنن

مثل:

CMP EAX, EAX
JNE somewhere ; این هیچ‌وقت اجرا نمیشه



5 String Encryption:

رمزنگاری رشته‌ها (مثل نام توابع، URLها کلیدها) که فقط در زمان اجرا رمزگشایی میشن



6 Anti-Decompiler / Anti-Debug Tricks:

مثل IsDebuggerPresent, CheckRemoteDebuggerPresent و دستوراتی که ابزارهای تحلیل رو crash میکنن
👍4👏1
توضیح کاربردها:

بدافزارها برای پنهان کردن رفتار واقعی‌شون استفاده می‌کنن


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


حتی گاهی برای مخفی کردن بخشی از منطق تجاری یا کد لایسنس استفاده میشه
👍41
تحلیل یک باینری با Control Flow Obfuscation
توی این قسمت یاد می‌گیریم چطور کدهایی که عمدا ساختار طبیعی‌شون به‌هم ریخته رو شناسایی کنیم و تمیز کنیم
👍32
ReverseEngineering
تحلیل یک باینری با Control Flow Obfuscation توی این قسمت یاد می‌گیریم چطور کدهایی که عمدا ساختار طبیعی‌شون به‌هم ریخته رو شناسایی کنیم و تمیز کنیم
Asm
start:
push ebp
mov ebp, esp
cmp eax, eax
jne fake_branch
nop
nop
call real_function
jmp end

fake_branch:
xor eax, eax
call junk_function
jmp start

real_function:
; کد واقعی برنامه
; ...
ret

junk_function:
nop
nop
ret

end:
mov esp, ebp
pop ebp
ret
👍2👏2
ReverseEngineering
Asm start: push ebp mov ebp, esp cmp eax, eax jne fake_branch nop nop call real_function jmp end fake_branch: xor eax, eax call junk_function jmp start real_function: ; کد واقعی برنامه ; ... ret junk_function: nop nop ret…
تحلیل کد بالا در ابزارهایی مثل Ghidra یا IDA:

cmp eax, eax + jne همیشه falseمیشه، پس مسیر fake_branch عملا مرده‌ست

junk_function هیچ کاری نمی‌کنه و فقط برای گیج کردن دیس‌اسمبلر استفاده شده

real_function هدف اصلیه ولی وسط یک ساختار غیرخطی پنهان شده
👍3👏1
تکنیک‌های Deobfuscation

با استفاده از Ghidra یا IDA:

مسیرهای شرطی غیرمنطقی (مثل cmp eax, eax) رو شناسایی و حذف کنید

برچسب‌ها (labels) و نام تابع‌ها رو خودتون معنی دار کنید تا سردرگم نشید

توی Ghidra می‌تونی از Script Manager استفاده کنید و اسکریپت‌هایی بنویسید که:

بلاک‌های غیرقابل دسترس (dead code) رو علامت‌گذاری کنن

توابع جعلی یا بی‌اثر رو از مسیر تحلیل حذف کنید
👍3👏1
ابزارهای مفید:

ابزارهای کاربرد

Ghidra تحلیل کد پیچیده ساخت گراف کنترل جریان

IDA Pro دیس‌اسمبلی پیشرفته و دید بصری گراف‌ها

Binary Ninja ساده‌تر ولی مناسب برای
obfuscation

Ghidra Scripts نوشتن اسکریپت‌های تحلیل خودکار
👍3👏1
Junk Code Injection
روش‌های حذفش

یعنی تزریق دستوراتی که هیچ اثری روی اجرای برنامه ندارن فقط برای گمراه کردن تحلیلگر یا دیباگر استفاده میشن
👍71
ReverseEngineering
مثال ساده از Junk Code: push eax pop eax nop xor ecx, ecx add ecx, 0 jmp real_code
تغییری در وضعیت ایجاد نمی‌کنه / push eax pop eax

nop بی اثر است
no-operation

و بعد add ecx, 0 باعث می‌شه ecx همچنان صفر بمونه

در نهایت با jmp مستقیم به کد اصلی میره
👍6👏1