ReverseEngineering – Telegram
ReverseEngineering
1.24K subscribers
40 photos
10 videos
55 files
666 links
Download Telegram
توضیح کاربردها:

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


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


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

برای فریب دادن الگوریتم‌های decompiler

برای طولانی و بی‌نظم کردن گراف کنترل جریان (CFG)

برای کند کردن اسکریپت‌های تحلیل خودکار
👍8👏1
روش‌های شناسایی و حذف Junk Code:

دستی (Manual)

توی Ghidra یا IDA دنبال دستوراتی بگردید که:
ورودی و خروجی ندارن

روی ثبات‌ها (registers) تغییری ایجاد نمی‌کنن

به مسیر اجرایی اصلی مرتبط نیستن



خودکار با اسکریپت Ghidra

می‌تونیید اسکریپت بنویسید که:

دنبال nop, push/pop جفتی و xor reg, reg بگرده

بلاک‌هایی که فقط اینا رو دارن پاک یا علامت‌گذاری کنه
👍5👏1
ابزارهای آماده

BinDiff: برای مقایسه نسخه مبهم‌سازی‌شده با نسخه اصلی (اگه داشته باشید)

Diaphora: پلاگین مقایسه برای IDA
👍7👏1
مخرب ترین تکنیک‌های Obfuscation که فقط بدافزارنویسا بلدن

1 Control Flow Flattening

ساختار کد کاملاً به‌هم می‌ریزه به‌جای if/else و loop های مرسوم همه چی توی یه سوییچ و Dispatcher بزرگ قایم میشه
هدف؟ دیس‌اسمبلر رو گمراه میکنه دیباگر رو دیوونه میکنه

2 Virtualization Obfuscation

کل برنامه به یه زبان ماشین خیالی (VM-based) ترجمه میشه چیزی شبیه VMProtect
نتیجه؟ به‌جای opcodeهای x86 با دستوراتی عجیب و ناشناخته طرفی

3 Polymorphic Code

هر بار اجرا یا build کد تغییر می‌کنه ولی همون کار رو انجام میده
بدافزارها عاشقشن چون آنتی‌ویروس‌ها رو کور میکنن

4 Call Stack Tampering

فانکشن صدا زده می‌شه ولی نه از راهی که انتظار می‌ره؛ مثلا با دستکاری ESP یا EBP.
چرا مهمه؟ چون ابزارهایی مثل IDA به‌سختی می‌فهمن این یه "تابع" هست

5 API Hiding با Hash کردن نام توابع

به‌جای استفاده مستقیم از مثلا LoadLibrary یا GetProcAddress اسم APIها هش شده‌ست و در زمان اجرا resolve میشن
یعنی چی؟ یعنی ابزار تحلیل نمی‌فهمه برنامه چه APIهایی صدا میزنه
🔥71👍1👏1
آموزش عملی آنپکینگ UPX با OllyDbg (قدم به قدم)

مرحله 1: تشخیص پک UPX

با ابزارهایی مثل PEiD یا Detect It Easy بررسی کند که فایل UPX شده باشه


مرحله 2: بارگذاری فایل در OllyDbg

فایل رو باز کنید و منتظر باشید تا دیباگر برنامه رو لود کنه


مرحله 3: پیدا کردن نقطه اصلی اجرای کد

با دستورالعمل‌های داخل دیباگر جلو برید و به دنبال آدرس Entry Point واقعی باشید


مرحله 4: ذخیره حافظه Dump

وقتی رسیدید به نقطه‌ای که کد اصلی آنپک شده و اجرا می‌شه، حافظه رو Dump کنید


مرحله 5: اصلاح فایل

از ابزارهای مثل Scylla استفاده کنید تا IAT (Import Address Table) اصلاح بشه و فایل قابل اجرا بشه
👍4