ReverseEngineering – Telegram
ReverseEngineering
1.24K subscribers
40 photos
10 videos
55 files
666 links
Download Telegram
کرک کردن نرم‌افزار یعنی دور زدن یا غیرفعال کردن مکانیزم‌های امنیتی یک نرم‌افزار برای استفاده بدون مجوز، روش‌های کرک کردن نرم‌افزار شامل موارد زیر میشه:

1 پچ کردن (Patching)

در این روش، فایل‌های اجرایی نرم‌افزار (مثل .exe یا .dll) دستکاری میشن تا مکانیزم‌های امنیتی مثل بررسی سریال یا لایسنس دور زده بشن معمولاً با ابزارهایی مثل OllyDbg، x64dbg یا IDA Pro انجام میشه

2 کیجن (Keygen)

کیجن (Key Generator) نرم‌افزاری است که یک سریال معتبر برای فعال‌سازی برنامه تولید می‌کنه معمولاً با تحلیل الگوریتم تولید کلید در نرم‌افزار اصلی ساخته میشه

3 سریال جعلی (Fake Serial)

بعضی از برنامه‌ها به‌صورت ساده یک سریال مشخص رو قبول میکنن کرکرها این سریال رو پیدا کرده و منتشر می‌کنن

4 امولیتور Dongle

بعضی نرم‌افزارها برای اجرا به یک دانگل سخت‌افزاری نیاز دارن کرکرها دانگل رو با نرم‌افزار شبیه‌سازی (emulator) جایگزین می‌کنند تا نرم‌افزار فکر کنه دانگل متصله

5 مهندسی معکوس (Reverse Engineering)

در این روش، سورس‌کد باینری برنامه بررسی و تحلیل میشه تا مکانیزم امنیتی اون شناسایی و دور زده شه

6 تغییرات رجیستری Registry changes

بعضی از نرم‌افزارها اطلاعات لایسنس رو در رجیستری ویندوز ذخیره می‌کنن با تغییر کلیدهای رجیستری میتونیم اون ها رو فعال کتیم

7 دور زدن سرور تایید لایسنس (License Server Bypass)

در این روش، ارتباط نرم‌افزار با سرور لایسنس مسدود شده یا به یک سرور جعلی هدایت میشه که پاسخ‌های معتبر ارسال می‌کننه

8 دی‌کامپایل و اصلاح سورس کد

در برخی زبان‌های سطح بالا (مثل جاوا، پایتون، C#)، باینری‌های برنامه رو می‌تونیم دی‌کامپایل کنیم و مستقیما کد را تغییر بدیم

9 مانیتورینگ API

کرکرها با ابزارهایی مثل API Monitor یا Process Hacker درخواست‌های نرم‌افزار را بررسی میکنن تا بخش‌هایی که لایسنس رو بررسی می‌کند شناسایی و دستکاری کنن

10 حملات Brute Force

در برخی موارد که نرم‌افزار از مکانیزم‌های ساده‌ای برای اعتبارسنجی استفاده میکنه می‌تونیم با امتحان کردن ترکیب‌های مختلف، رمز عبور یا سریال صحیح رو پیدا کنیم
9🔥1
رمزنگاری از مبدا تا مقصد و رمزنگاری انتقال

دو تا سطح ارتباطی داریم که رمزنگاری می‌تونه توشون انجام بشه این رمزنگاری به دو دسته تقسیم میشه:

یکی رمزنگاری از مبدأ تا مقصد

و یکی هم رمزنگاری انتقال توی رمزنگاری از مبدأ تا مقصد

که بعضی وقتا بهش می‌گن رمزنگاری آفلاین پیغام‌ها وقتی که فرستاده می‌شن رمز می‌شن و بعد توی مقصد رمزگشایی می‌شن توی این روش نیازی نیست که شبکه بفهمه پیغام رمز شده گاهی اوقات کاربر می‌تونه این نوع رمزنگاری رو انتخاب کنه پیغام تا آخر مسیر رمز می‌مونه خوبیش اینه که لازم نیست همه جا امن باشه این روش الان توی سیستم‌های معروف مثل SSL و TLS استفاده میشه
حالا توی رمزنگاری انتقال که بعضی وقتا بهش می‌گن رمزنگاری آنلاین پیغام وقتی که فرستاده میشه رمز میشه اما هر بار که به یک نقطه توی شبکه می‌رسه رمزگشایی میشه و دوباره رمز میشه توی این روش رمزنگاری از چشم کاربر پنهانه و بخشی از پروسه انتقاله
👍2
ReverseEngineering
رمزنگاری از مبدا تا مقصد و رمزنگاری انتقال دو تا سطح ارتباطی داریم که رمزنگاری می‌تونه توشون انجام بشه این رمزنگاری به دو دسته تقسیم میشه: یکی رمزنگاری از مبدأ تا مقصد و یکی هم رمزنگاری انتقال توی رمزنگاری از مبدأ تا مقصد که بعضی وقتا بهش می‌گن رمزنگاری…
یک مثال که براتون خوب جا بیوفته

1 رمزنگاری مبدأ به مقصد (End-to-End یا آفلاین) :

فرض کن میخوای یه پیامو از نقطه A به نقطه B بفرستی تو این روش، پیام دقیقاً همونجا که فرستندس (همون نقطه A) قفل میشه، و فقط وقتی به دست گیرنده (نقطه B) میرسه، باز میشه مثلاً مثل این میمونه که تو خودت توی خونهت یه جعبه رو قفل کنی و کلیدشو فقط به دوستت بدی توی این روش حتی شبکه یا مسیری که پیام ازش رد میشه (مثل اینترنت یا سرورها) نمیدونن داخل پیام چیه چون از اول تا آخر مسیر پیام همون قفله. مثلاً سیستمهای معروفی مثل SSL یا TLS از این روش استفاده میکنن. خوبیش اینه که لازم نیست به تمام نقاطِ مسیر اعتماد کنی؛ حتی اگه یه هکر توی مسیر باشه نمیتونه پیامو بخونه

2 رمزنگاری انتقال (Link Encryption یا آنلاین) :

این روش یه کم فرق داره اینجا پیام بازم قفل میشه، ولی نه فقط توی مبدأ! هر بار که پیام به یه «گره» یا ایستگاهِ تو مسیر میرسه (مثلاً یه سرور یا روتر)، قفلش باز میشه و دوباره با یه قفل جدید بسته میشه تا به ایستگاه بعدی بره یعنی پیام کل مسیرو یه جورایی با قفلهای مختلف میره مثلا فرض کن پستچیه هر بار نامه رو به یه اداره پست میبره، اونجا نامه رو باز میکنن چک میکنن بعد با یه پاکت جدید میفرستن به اداره بعدی. بدی این روش اینه که توی هر ایستگاه، پیام رمزگشایی میشه پس اگه به اون ایستگاه ها اعتماد نداشته باشی خطر نفوذ وجود داره ولی خوبیش اینه که کاربر اصلاً درگیر نمیشه و همه چیز خودکشه

نکته مهم:

تو رمزنگاری مبدأ به مقصد خود کاربر میتونه انتخاب کنه چیو رمز کنه (مثلاً تو برنامه های چت)

تو رمزنگاری انتقال کاربر اصلاً متوجه نمیشه پیام رمز شده یا نه این کار خودِ شبکه انجام میده

هر دو روش خوبیها و بدیهایی دارن مثلا End-to-End امنتره ولی شاید سرعتش کمتر باشه رمزنگاری انتقال سریعتره ولی باید به همه گرههای شبکه اعتماد کنی!
2
📌 1. ابزارهای تحلیل استاتیک

🔍 تحلیل استاتیک یعنی بررسی کد باینری بدون اجرای برنامه. این ابزارها بهتون کمک می‌کنن که ساختار برنامه رو بفهمید و بفهمید چه توابع و کلاس‌هایی داره.

🔹 IDA Pro → قوی‌ترین دیس‌اسمبلر برای آنالیز فایل‌های اجرایی (پولی، ولی کرک شدش هست!)

🔹 Ghidra → یه ابزار رایگان و متن‌باز که توسط NSA ساخته شده، مثل IDA ولی رایگان

🔹 Binary Ninja → یه دیس‌اسمبلر سبک برای تحلیل سریع باینری‌ها

🔹 Radare2 → یه ابزار خط فرمانی و قدرتمند برای تحلیل باینری‌ها

💡 کی ازشون استفاده کنیم؟

وقتی می‌خوای ببینی یه فایل اجرایی چه توابعی داره رشته‌های متنیش چیه و چه کارهایی انجام میده
👍61
رمزنگاری (Encryption)

فرآیند تبدیل داده‌های قابل‌خوندن به یک قالب غیرقابل خوندن اما با داشتن کلید صحیح می‌تونیم اونو دوباره به حالت اولیه برگردونیم هدف اصلی رمزنگاری حفظ محرمانگی اطلاعاته دو نوع اصلی رمزنگاری داریم:

1 رمزنگاری متقارن (Symmetric Encryption):

در این روش از یک کلید واحد برای رمزگذاری و رمزگشایی استفاده میشه (مثلا AES)


2 رمزنگاری نامتقارن (Asymmetric Encryption):

در این روش یک جفت کلید عمومی و خصوصی وجود داره داده‌ای که با یکی رمز میشه فقط با داده ی دیگه قابل رمزگشایی است (مثلاً RSA)



هشینگ (Hashing)

یک عملیات یک‌طرفه است که داده‌ای رو به یک مقدار ثابت (هش) تبدیل می‌کنه و امکان برگردوندن اون به مقدار اولیه وجود نداره هشینگ برای تضمین یکپارچگی داده‌ها و ذخیره امن رمزهای عبور استفاده میشه

ویژگی‌های کلیدی هشینگ:

یک‌طرفه بودن: نمی‌تونیم مقدار اولیه رو از هش استخراج کنیم

حساسیت به تغییرات:
کوچک‌ترین تغییر در ورودی هش کاملا متفاوتی تولید میکنه


تعیین اندازه خروجی:
مقدار هش همیشه طول ثابتی داره (مثلا SHA-256 همیشه 256 بیت خروجی میده)


به زبون ساده رمزنگاری برای محرمانگیه (قابل بازگشت)

ولی هشینگ برای یکپارچگیه (غیرقابل بازگشت)
👍21
رمز ترنسپوزیشن چیه؟

رمز ترنسپوزیشن یه روش رمزنگاریه که توش حروف متن اصلی تغییر نمیکنن فقط جاشون عوض میشه یعنی همون حروف هستن ولی یه ترتیب دیگه دارن

یه مثال ساده:

کلمه "سلام" رو در نظر بگیرید اگه جای حروف رو جابه‌جا کنیم می‌تونیم چیزایی مثل "مالس" یا "لامس" بسازیم این دقیقا همون مفهوم ترنسپوزیشنه

روش جابه‌جایی ساده (Simple Transposition)

کاری که میکنه: جای حروف رو با یه ترتیب خاص عوض میکنه

مثال :

متن اصلی: HELLO

اگه جای حروف رو دوتا دوتا عوض کنیم می‌شه:

EHLOL
3
2 ابزارهای دیباگینگ و تحلیل داینامیک

🔍 تحلیل داینامیک یعنی بررسی یه برنامه حین اجرا این کار باعث میشه بفهمی که متغیرها چطور تغییر می‌کنن و برنامه چجوری کار میکنه

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

مثال ساده:

#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

و مقدار ثابت برگردوندن
👍83
ReverseEngineering
رمز ترنسپوزیشن چیه؟ رمز ترنسپوزیشن یه روش رمزنگاریه که توش حروف متن اصلی تغییر نمیکنن فقط جاشون عوض میشه یعنی همون حروف هستن ولی یه ترتیب دیگه دارن یه مثال ساده: کلمه "سلام" رو در نظر بگیرید اگه جای حروف رو جابه‌جا کنیم می‌تونیم چیزایی مثل "مالس" یا "لامس"…
روش راه‌آهنی (Rail Fence Cipher)

تو این روش متن رو به‌شکل زیگزاگی می‌نویسیم و بعد خط به خط میخونیم

مثال :

متن: HELLO WORLD

اگه با 3 ردیف اینو بنویسیم میشه :

H L O W D E L O R L O


بعد اگه از بالا به پایین بخونیم متن رمز شده می‌شه :

HLOWD ELOR LO
👍21
ابزارهای بررسی حافظه و انالیز رفتار برنامه

این ابزارها کمک می‌کنن که بفهمی یه برنامه چه کارهایی توی سیستم انجام میده

Process Hacker نمایش همه پردازش‌های در حال اجرا و اطلاعات مربوط به اون‌ها

Procmon (Process Monitor) بررسی تمام فعالیت‌های یک برنامه روی فایل‌ها و رجیستری

HxD / 010 Editor ویرایشگر هگز برای تغییر فایل‌های باینری

Cheat Engine تغییر مقدار متغیرهای داخل حافظه (برای کرکینگ و بازی‌ها)

وقتی بخوای ببینی یه برنامه موقع اجرا چه فایلی می‌خونه چه تغییری توی رجیستری میده یا چه داده‌ای توی حافظه ذخیره کرده از اینا استفاده میکنیم
👍61
دوستان کتاب هم میخاید براتون بزارم؟
Anonymous Poll
98%
👍🏻
2%
👎🏻
Practical_reverse_engineering_x86,_x64,_ARM,_Windows_Kernel,_reversing.pdf
4.6 MB
این کتاب شامل تمرین‌ها و راه‌حل‌هایی با ویروس‌ها و روت‌کیت‌های واقعی و مخربه نویسندگان این کتاب عمدا این کار رو انجام دادن تا اطمینان پیدا کنن که خوانندگان می‌تونن فورا مهارت‌های که یاد گرفتن خودشون استفاده کنن نمونه‌های بدافزار به ترتیب حروف الفبا (نمونه A، B، C، …)
انواع معماری رو هم میگه Arm x64 x86
5👏1
ابزارهای بررسی و ویرایش فایل‌های اجرایی

این ابزارها برای بررسی و تغییر فایل‌های PE (ویندوز) و ELF (لینوکس) استفاده میشن

🔹 PE-bear → نمایش ساختار فایل‌های PE و ویرایش اون‌ها

🔹 LordPE → استخراج توابع و اطلاعات PE

🔹 CFF Explorer → بررسی هدرهای فایل PE و تغییر مشخصات اون

وقتی بخوایم بفهمیم یه فایل اجرایی چجوری ساخته شده یا مثلا یه امضای دیجیتال رو ازش حذف کنیم
👍4