ReverseEngineering – Telegram
ReverseEngineering
1.24K subscribers
40 photos
10 videos
55 files
666 links
Download Telegram
گرفتن 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
چرا این کارو می‌کنن؟

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

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

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

دستی (Manual)

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

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

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



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

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

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

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

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

Diaphora: پلاگین مقایسه برای IDA
👍7👏1