🧑‍💻Cyber.vision🧑‍💻
465 subscribers
170 photos
12 videos
20 files
144 links
Python tips and tricks
The Good, Bad and the Ugly
متخصص امنیت شبکه های کنترل صنعتی
👨‍💻این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی این چند سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازه‌کار)
https://t.iss.one/Hacker0x01
Download Telegram
( ربطی به مبحث چنل نداره ولی دیدم این مبحث معماری کامپیوتر جذابه 🦦)

Swap (سواپ):

سواپ یه فرآیندیه  که در آن سیستم عامل اون prosses که به طور فعال استفاده نمی‌شوند را از  (RAM) به فضای ( Virtual memory)( یه حافظه مجازی ) منتقل می‌کند. این یک روش برای مدیریت حافظه است و به سیستم اجازه می‌دهد تا بیش از ظرفیت فیزیکی RAM خود به نظر برسد. سواپ عمدتاً زمانی اتفاق می‌افتد که Ram پر شود و به فضای بیشتری برای اجرای برنامه‌ها نیاز باشد و معمولا افزایش یا کاهش Swap دست خودمونه.

خب حالا یه سوال پیش میاد ؟
من میتونم هر برنامه ای مثلا یه گیم با 20 گیگ رم رو تویه سیستم با 8 گیگ رم اجرا کنم؟
نه ، چند تا بحث هس :

اولیش اینه که یه مفهومی هس به اسم ( working set ) و نشون میده که یه  مجموعه‌ای از صفحات حافظه ( page tables ) است که یک پروسه در طول یک دوره زمانی خاص به آن‌ها دسترسی دارد یا از آن‌ها استفاده می‌کند ( اصل لوکالیتی) .
حالا چون برنامه یه سری پروسه ها رو نیاز داره و باید اجرا بشه دنبالش تویه RAM میگرده و پیداش نمیکنه ( اصطلاحا میگن miss خورده) و حالا باید بره از Virtual memory بیاره که اوردر پیدا کردن و آوردنش خیلی بیشتر از پیدا کردن تویه خود ram هست و سرعتو کاهش میده

و یه مسئله دیگه هم اینه که برخی از برنامه‌ها به گونه‌ای طراحی شده‌اند که نیاز به مقدار مشخصی از RAM دارند و عملکرد صحیح آن‌ها در صورت کمبود RAM به شدت تحت تأثیر قرار می‌گیرد یا اصلاً اجرا نمی‌شن

خب حالا از کجا میفهمه من اونقدر حجم ندارم ؟
برنامه‌ها هنگام اجرا می‌توانند درخواست حافظه کنند. اگر سیستم عامل نتواند این مقدار حافظه را فوراً تخصیص دهد (چه به دلیل کمبود RAM، چه نیاز به سواپ کردن داده‌ها)، برنامه ممکن است با خطا یا کاهش عملکرد مواجه بشه
یا اینکه کلا برنامه میتونه از طریق API های سیستم عامل مقدار حجم ram رو ببینه مثلا تویه لینوکس : /proc/meminfo
Channel name was changed to «🧑‍💻Cyber.vision🧑‍💻»
با فرض داشتن دانش لازم مقدماتی که قبلا توی نقشه های راه تو همین کانال توضیح دادم :
اگر وارد حوزه امنیت میخایین بشین پیشنهاد من دوره CEH است
اما اگر مقدمات امنیت رو کار کردین پیشنهاد من همین دوره OSCP هستش (خصوصا اگر قصد استخدام تو شرکتهایی هستین که نفر امنیتی میخان)
{متاسفانه تو اموزشگاه ها سرسری از روی مباحث این دوره میگذرن و در حد کار کردن با چند تا از ابزارهای کالی میدونن اما واقعا یه دوره خوب و قابل اتوجه هستش خصوصا برای کسانی که میخان وارد تست نفوذ شبکه بشن هر چند ماحث وب هم داره}
پس اگر میخایین به عنوان نیروی جونیور وارد شرکتهایی بشین که پوزیشن باز امنیتی دارن بهترین گزینه است

اما اگر میخایین وارد حوزه وب تخصصی بشین پیشنهادم دوره تست نفوذ وبه که در حال برگزاریه

دوره های تخصصی دیگه که در حال برگزاریه و مناسب کسانی که تازه کار هستن نیس متاسفانه
(هیشکی از پول گرفتن بدش نمیاد اما دوره های دیگه من مناسب افراد تازه کار نیس و پول هدر دادنه برای شما)


خیلی از کاربران چندین وقته این سوالات رو میپرسن گفتم یه جا توی یه پست همه اون سوالات رو یه جا جواب بدم
2/3

پکیج منیجرها در لینوکس: داینامیک ریپازیتوری و بهینگی Dependencyها
در اکوسیستم لینوکس، سیستم‌های مدیریت پکیج (مثل apt، ‏dnf، ‏pacman) با مکانیزمی متمرکز و بهینه عمل می‌کنن. هر پکیج به شکل صریح لیست وابستگی‌هاش رو توی متادیتای خودش تعریف می‌کنه. وقتی دستور نصب اجرا می‌شه، پکیج منیجر به شکل خودکار:
‏1. Dependencyهای لازم رو از ریپازیتوری‌های مرکزی پیدا می‌کنه.
2. بررسی می‌کنه که آیا نسخه‌های نصب‌شده فعلی با نیازمندی‌های پکیج جدید Compatible (سازگار) هستن یا نه.
3. در صورت نیاز، آپگرید یا دانگرید کتابخونه‌ها رو انجام میده تا تضمین کنه همه چیز بدون Conflict (تداخل) کار می‌کنه.

مثلاً نصب یک وب‌سرور مثل nginx روی لینوکس باعث می‌شه پکیج منیجر به شکل خودکار کتابخونه‌های ضروری مثل libpcre،‏ openssl و zlib رو نصب کنه. اگر نسخه‌های موجود قدیمی باشن، پکیج منیجر نسخه‌های آپدیت شده رو از ریپازیتوری میاره. این فرایندها روی پکیج‌های باینری و متادیتاهای Precompiled (ازپیش-کامپایل‌شده) تکیه دارن که Dependency Resolution رو سریع و قابل پیش‌بینی می‌کنه.

چرا تداخل نسخه‌ها به ندرت پیش میاد؟
- کتابخونه‌ها در لینوکس معمولاً با Semantic Versioning نام‌گذاری می‌شن. مثلاً libfoo1.2 و libfoo2.0 می‌تونن همزمان نصب باشن بدون تداخل، چون اسم پکیج‌ها متفاوته.
- سیستم مدیریت پکیج از Symbolic Links و SONAME‏ (Shared Object Name) استفاده می‌کنه تا مطمئن شه برنامه‌ها به نسخه صحیح لینک می‌شن. مثلاً اگر برنامه به libc.so.6 نیاز داره، لینک سمبولیک /lib/libc.so.6 به فایل واقعی مثل libc-‌2.31‌.s‌o اشاره می‌کنه.

~>@pythonwithmedev
کرک کردن نرم‌افزار یعنی دور زدن یا غیرفعال کردن مکانیزم‌های امنیتی یک نرم‌افزار برای استفاده بدون مجوز، روش‌های کرک کردن نرم‌افزار شامل موارد زیر میشه:

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

در برخی موارد که نرم‌افزار از مکانیزم‌های ساده‌ای برای اعتبارسنجی استفاده میکنه می‌تونیم با امتحان کردن ترکیب‌های مختلف، رمز عبور یا سریال صحیح رو پیدا کنیم
👍2
3/3

مقایسه تکنیکال: Static Linking vs Dynamic Linking
- ویندوز (غالباً Static/خودمحور): برنامه‌ها ترجیح میدن تا حد امکان از کتابخونه‌های اختصاصی یا Static-Linked استفاده کنن تا Dependencyها رو به حداقل برسونن. نتیجه؟ حجم بالای فایل‌های EXE و نصبِ تکراری کتابخونه‌ها (مثل چندین نسخه از VC++ Redistributable).
- لینوکس (غالباً Dynamic/متمرکز): پکیج‌ها به کتابخونه‌های داینامیک وابسته می‌شن که فقط یک بار نصب می‌شن و بین همه برنامه‌ها به اشتراک گذاشته می‌شن. حجم نهایی سیستم کمتر می‌شه و آپدیت امنیتی یک کتابخونه، همه برنامه‌های وابسته رو تحت پوشش قرار میده.

آمار و فکت‌های کلیدی:
- توی ویندوز ۱۰، بیش از ۱۵ نسخه مختلف از Visual C++ Redistributable ممکنه نصب باشه که هر کدوم بین ۲۰MB تا ۱۰۰MB فضا اشغال می‌کنن.
- توی لینوکس، پکیج libc6 (کتابخونه استاندارد سی) فقط یک بار نصب می‌شه و بیش از ۸۵٪ از پکیج‌های موجود در ریپازیتوری‌های معتبر بهش وابسته‌ان. حجم این پکیج حدود ۴MB هستش.
- بر اساس مستندات فنی، سیستم‌های مدیریت پکیج لینوکس از الگوریتم‌های پیشرفته برای Dependency Resolution استفاده می‌کنن تا ناسازگاری نسخه‌ها رو حذف کنن.

نکته فنی: مکانیزم کش (Cache) پکیج منیجرها در دایرکتوری‌های خاصی (مثل /var/lib/apt/lists یا /var/cache/dnf) لیستی از تمام پکیج‌ها و وابستگی‌هاشون رو نگه می‌داره. وقتی دستور آپدیت میدی، این کش با ریپازیتوری همگام‌سازی می‌شه و Dependencyها روی آخرین نسخه‌ها چک می‌شن. توی ویندوز، چنین سیستمی به صورت مرکزی وجود نداره و هر برنامه جداگانه چک می‌کنه آپدیت جدیدی واسه DLLهای خاص خودش هست یا نه.

مسئله Checksum و امنیت:
پکیج منیجرهای لینوکس به صورت پیش‌فرض از الگوریتم‌های هشینگ مثل SHA-256 برای تأیید یکپارچگی پکیج‌ها استفاده می‌کنن. هر پکیج قبل از نصب، بررسی می‌شه تا مطمئن شه با نسخه موجود در ریپازیتوری مطابقت داره. توی ویندوز، اگرچه امضای دیجیتال برای فایل‌های اجرایی وجود داره، اما هیچ سیستم متمرکزی برای بررسی یکپارچگی DLLهای سیستمی تعریف نشده.
با سلام و وقت بخیر آکادمی راوین شعبه استان خوزستان جهت تکمیل کادر خود قصد دارد از ظرفیت های بومی استان برای جذب در آکادمی استفاده کنند چنانچه که دوستانی هستند که در حوزه های امنیت سایبری سابقه کار دارند و یا در حال اموزش هستند جهت استعداد سنجی و تکمیل کادر اموزشی به ایدی بنده که در بیو چنل قرار داده شده پیام داده و رزومه خودشان را برای بنده ارسال کنند تا بررسی های لازم انجام شود.
آسیب پذیری DNS Rebinding =

قبل از شروع باید یه سری پیش نیاز هارو باهم مرور کنیم:
1. یه دامنه میتونه چندین رکورد A داشته باشه و در نتیجه به چندین آیپی resolve بشه. اولویت ها بر اساس آیپی هایی هست که بالاتر قرار دارن و اگه آیپی اولی جواب نده از آیپی بعدی استفاده میشه.
2. هر DNS response که دریافت میکنیم یک TTL داره که بر حسب ثانیه کار میکنه و مقدار زمانی که داخلش تعریف شده تو سیستم ما cache میشه. مثلا اگه سایت google.com رو باز کنیم و TTL 100 رو داشته باشه، IP این سایت که تو فرایند name resolution به دست اومده تا 100 ثانیه تو سیستم ما ذخیره میشه.
3. مفهوم Same Origin Policy و SSRF رو تو پست های قبلی توضیح دادم که پیشنهاد میکنم مرورشون کنین.


⁉️حالا DNS Rebinding چی هست؟

یه متود برای دور زدن مکانیزم های امنیتی که بر اساس hostname کار میکنن. توی web application ها برای bypass کردن SSRF و SOP استفاده میشه.

1️⃣ استفاده از DNS Rebinding برای بایپس SSRF :
وقتی از DNS Rebinding تو SSRF استفاده میکنیم که نزاره به آیپی های داخلی درخواست بزنیم، حالا چطور؟
چند تا روش هست برای جلوگیری از ارسال درخواست به شبکه داخلی تو SSRF:
1. استفاده از blacklist IP ها، یعنی لیستی از آیپی های داخلی رو به عنوان blacklist تعریف کنیم.
2. اول روی ورودی کاربر DNS resolution انجام بدیم و روی آیپی آن blacklist check رو انجام بدیم. برای مثال هکر یه دامنه بالا میاره به اسم dns.attacker.com که به آیپی 127.0.0.1 اشاره میکنه. با این روش جلوش گرفته میشه.

اگه تا این حد امن شده باشه، هکر میتونه از HTTP redirect ها استفاده کنه و داخل سورس کدش به 127.0.0.1 redirect بشه. اما این روش در صورتی جواب میده که follow redirect انجام بشه و قبل از ارسال درخواست توسط فانکشن آسیب پذیر به SSRF، ری دایرکت به 127.0.0.1 انجام بشه.
اگه همه این روش ها جواب نداد، تنها راهی که باقی میمونه برای بایپس DNS Rebinding هست.

❗️مراحل DNS rebinding برای بایپس SSRF :
1. هکر یه دامنه بالا میاره به اسم attacker.com که به 2 تا آیپی resolve میشه، اولی آیپی سرور خودش و دومی آیپی لوکالی که قصد داره بهش درخواست بزنه. TTL رو هم خیلی کم ست میکنه.
2. به عنوان ورودی attacker.com رو به تارگت میده و تابع میاد بررسی میکنه میبینه که آیپیش local نیست و ازش عبور میکنه.
3. قبل از اینکه کد برنامه برسه به جایی که درخواست HTTP رو ارسال میکنه، زمان cache یا همون TTL بخاطر پایین بودن تموم میشه و تابعی که آسیب پذیره به SSRF مجبور میشه درخواست name resolution ارسال کنه برای attacker.com تا آیپی رو به دست بیاره و این دفعه attacker.com به یه آیپی local اشاره میکنه.
4. درخواست HTTP به آیپی local ارسال میشه.

حالا اینو چطور انجامش بدیم؟

میتونیم از سایت زیر استفاده کنیم که یه ساب دامنه بهمون میده با دوتا آیپی که میتونیم خودمون بهش بگیم به کدوم آیپی ها resolve بشه
https://lock.cmpxchg8b.com/rebinder.html

#DNS_Rebinding
🧑‍💻Cyber.vision🧑‍💻
آسیب پذیری DNS Rebinding = قبل از شروع باید یه سری پیش نیاز هارو باهم مرور کنیم: 1. یه دامنه میتونه چندین رکورد A داشته باشه و در نتیجه به چندین آیپی resolve بشه. اولویت ها بر اساس آیپی هایی هست که بالاتر قرار دارن و اگه آیپی اولی جواب نده از آیپی بعدی استفاده…
2️⃣ استفاده از DNS Rebinding برای بایپس SOP :

طبق فلوی مرحله قبل میتونیم Hostname رو تغییر بدیم و از این تکنیک میتونیم برای بایپس SOP هم استفاده کنیم.
ولی منظور ما بایپس SOP برای دسترسی به web application های internal هست. مثلا کاربر یه کمپانی داخل شبکه داخلیش روی آیپی 192.168.1.20 یه web application راه اندازی کرده که فکر میکنه بخاطر local بودن هکر نمیتونه بهش دسترسی داشته باشه. ولی هکر با استفاده از DNS rebinding میتونه SOP رو بایپس کنه و بهش دسترسی داشته باشه.

❗️فلوی بایپس SOP با DNS Rebinding :
1. هکر دامنه attacker.com رو بالا میاره که همچنان دوتا IP داره یکی به سرور هکر اشاره میکنه که داخلش کدهای مخرب JavaScript قرار داره و یکی هم به IP داخلی ای اشاره میکنه که قربانی روی اون آیپی تو شبکه داخلیش یه web application داره. و همچنین TTL هم کم در نظر گرفته میشه.
2. هکر آدرس دامنه رو به قربانی میده و بعد از name resolution قربانی برای آیپی سرور مخرب درخواست ارسال میکنه و کدهای JavaScript روی مرورگرش لود میشه.

function attemptRequest() {
const xhr = new XMLHttpRequest();
xhr.open('GET', `https://attacker.com/sensitive_information_path`, true);
xhr.onload = function () {
console.log('Response:', xhr.responseText);
};
xhr.onerror = function () {
console.log('Request failed');
};
xhr.send();
}
setTimeout(attemptRequest, 5000);

کدی که لود شده روی مرورگر، بعد از 5 ثانیه یه درخواست برای attacker.com میفرسته ولی بدلیل TTL کم، cache تموم شده و مرورگر کاربر مجبور میشه دوباره درخواست ارسال کنه برای اینکه آیپی شو به دست بیاره و این دفعه آیپی 192.168.1.20 به عنوان رکورد A دامنه هکر برای قربانی برمیگرده.
تو همین زمان مرورگر قربانی یه درخواست برای مسیر sensitive_information_path به 192.168.1.20 ارسال میکنه که حاوی اطلاعات حیاتی این سرویس هست و هکر میتونه این اطلاعات رو با XHR برای سرور خودش ارسال کنه. اگه DNS rebinding با موفقیت انجام بشه دیگه cross origin نیستیم و same origin هستیم.

❗️چند تا نکته مهم :
1. هکر میدونست چه سرویسی روی شبکه داخلی قربانی نصب هست. و بخاطر همین میدونست endpoint حساسش چیه.
2. باید دامنه هکر رو دقیقا به همون آیپی که روی آن web application نصب شده resolve کنیم.
3. اگه وب اپلیکیشن داخلی روی پورت خاصی هست، ماهم باید به اون پورت درخواست ارسال کنیم.

⁉️چه زمانی DNS rebinding نمیتونه SOP رو bypass کنه؟
1. وقتی authentication نیاز باشه.
2. وقتی روی 192.168.1.20 SSL/TLS وجود داشته باشه.(بخاطر مچ نشدن certificate جلوی حمله گرفته میشه)

#DNS_Rebinding
ChaCha20 or Salsa20

یک الگوریتم رمزنگاریه که برای امنیت بالا و سرعت زیاد طراحی شده باهاش میشه داده‌ها رو رمزگذاری کرد تا کسی بدون کلید نتونه بخونه این الگوریتم جایگزین خوبی برای AES هست مخصوصاً توی موبایل‌ها و پردازنده‌هایی که سخت‌افزار مخصوص رمزنگاری ندارن


چطوری کار می‌کنه؟

ChaCha20 یه جور رمزنگاری جریانیه، یعنی داده‌ها رو دونه‌دونه رمز می‌کنه نه به‌صورت بلوک‌های بزرگ

ورودی‌هاش چیه؟

یه کلید 256 بیتی همون رمز اصلی

یه مقدار تصادفی Nonce برای جلوگیری از تکراری شدن رمزها

یه شمارنده که توی هر بلاک تغییر می‌کنه


چی کار می‌کنه؟

چند تا عملیات ریاضی ساده مثل جمع XOR و چرخش بیتی روی داده‌ها انجام میده

این عملیات 20 بار تکرار میشه تا یه سری اعداد تصادفی قوی تولید کنه

این اعداد با متن اصلی ترکیب میشن و داده‌ی رمزگذاری‌شده تولید میشه


چرا از ChaCha20 استفاده کنیم؟

سریع‌تره چون نیاز به محاسبات پیچیده‌ی AES نداره

امنیت بالایی داره و در برابر حملات رمزنگاری مقاومه

روی موبایل و دستگاه‌های کم‌قدرت بهتر کار می‌کنه، چون نیاز به سخت‌افزار خاصی نداره

در برابر حملات جانبی مثل حملات کش CPU امن‌ تره

کجاها ازش استفاده میشه؟

توی HTTPS امن کردن اینترنت

توی WireGuard VPN برای اتصال امن

توی OpenSSH برای ارتباطات رمزگذاری‌شده

توی Google QUIC که اینترنت رو سریع‌تر و امن‌تر می‌کنه
1
تکنیک‌های ضد دیباگ و ضد مهندسی معکوس در نرم‌افزارها


حالا که ساختار فایل‌های اجرایی (PE, ELF, Mach-O) رو شناختید باید بدونید که چطور توسعه‌دهنده‌ها از مهندسی معکوس جلوگیری می‌کنن توی این بخش میریم سراغ مکانیزم‌های ضد دیباگ و ضد مهندسی معکوس که توی نرم‌افزارهای مختلف استفاده میشن



1 چرا نرم‌افزارها از ضد دیباگ استفاده می‌کنن؟

تکنیک‌های ضد دیباگ (Anti-Debugging) و ضد مهندسی معکوس (Anti-Reversing)

معمولا برای این کارها استفاده میشن:

جلوگیری از کرک شدن نرم‌افزار
سخت‌تر کردن تحلیل بدافزارها
محافظت از الگوریتم‌های حساس و لایسنس نرم‌افزار
جلوگیری از دستکاری و مهندسی معکوس

برنامه‌هایی مثل بازی‌ها نرم‌افزارهای امنیتی DRM و بدافزارها از این تکنیک‌ها زیاد استفاده می‌کنن


2 روش‌های تشخیص دیباگر در ویندوز (Anti-Debugging در PE)

ویندوز یه سری API داره که برنامه‌ها با استفاده از اون‌ها می‌تونن بفهمن که آیا تحت دیباگ هستن یا نه

📌 مهم‌ترین روش‌ها :

IsDebuggerPresent()

این تابع از kernel32.dll چک می‌کنه که برنامه داره تحت دیباگ اجرا میشه یا نه


#include <windows.h>
#include <iostream>

int main() {
if (IsDebuggerPresent()) {
std::cout << "Debugger detected!" << std::endl;
return 1;
}
std::cout << "No debugger detected." << std::endl;
return 0;
}

🔹 چطور بایپسش کنیم؟
🔹 مقدار PEB->BeingDebugged رو توی دیباگر تغییر بدیم.




CheckRemoteDebuggerPresent()

این API چک می‌کنه که یه دیباگر خارجی مثل x64dbg به پروسه وصل شده یا نه

BOOL IsDebuggerAttached() {
BOOL isDebugger = FALSE;
CheckRemoteDebuggerPresent(GetCurrentProcess(), &isDebugger);
return isDebugger;
}

برای بایپس کردن این تابع می‌تونیم مقدار برگشتی رو تغییر بدیم



NtQueryInformationProcess()

این تابع از ntdll.dll اطلاعاتی در مورد پروسه می‌گیره، از جمله اینکه آیا دیباگ میشه یا نه

#include <windows.h>
#include <winternl.h>
#include <iostream>

typedef NTSTATUS(WINAPI* pNtQueryInformationProcess)(HANDLE, ULONG, PVOID, ULONG, PULONG);

int main() {
pNtQueryInformationProcess NtQIP = (pNtQueryInformationProcess)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtQueryInformationProcess");

DWORD isDebuggerPresent = 0;
NtQIP(GetCurrentProcess(), 0x07, &isDebuggerPresent, sizeof(DWORD), NULL);

if (isDebuggerPresent) {
std::cout << "Debugger detected!" << std::endl;
return 1;
}

std::cout << "No debugger detected." << std::endl;
return 0;


این روش رو می‌تونیم با تغییر مقدار ProcessDebugPort در رجیسترها دور بزنیم.



3 روش‌های ضد دیباگ در لینوکس (ELF Anti-Debugging)

توی لینوکس، برنامه‌ها می‌تونن با استفاده از ptrace() تشخیص بدن که تحت دیباگ هستن

استفاده از ptrace() برای جلوگیری از دیباگ


#include <sys/ptrace.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void anti_debug() {
if (ptrace(PTRACE_TRACEME, 0, 0, 0) == -1) {
printf("Debugger detected!\n");
exit(1);
}
}

int main() {
anti_debug();
printf("Program is running normally.\n");
return 0;
}

برای بایپس این روش، می‌تونیم با gdb مقدار برگشتی ptrace() رو تغییر بدیم


4 روش‌های ضد دیباگ در macOS (Mach-O Anti-Debugging)

توی macOS، روش‌های مشابه لینوکس استفاده میشه ولی از sysctl() هم میشه برای تشخیص دیباگر استفاده کرد:

#include <sys/types.h>
#include <sys/sysctl.h>
#include <stdio.h>

int is_debugger_attached() {
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()};
struct kinfo_proc info;
size_t size = sizeof(info);

sysctl(mib, 4, &info, &size, NULL, 0);

return (info.kp_proc.p_flag & P_TRACED) != 0;
}

int main() {
if (is_debugger_attached()) {
printf("Debugger detected!\n");
return 1;
}

printf("No debugger detected.\n");
return 0;
}

برای بایپس، می‌تونیم مقدار p_flag رو تغییر بدیم



5 تکنیک‌های پیشرفته ضد مهندسی معکوس

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

مهم‌ترین تکنیک‌ها:

بدافزارهای حرفه‌ای مثل Zeus و TrickBot از این تکنیک‌ها استفاده می‌کنن



6 ابزارهای دور زدن ضد دیباگ

🔹 Windows: ScyllaHide, x64dbg, Cheat Engine

🔹 Linux: GDB, ptrace hooks, Frida

🔹 macOS: LLDB, Hopper, Frida
This media is not supported in your browser
VIEW IN TELEGRAM
#CVE-2025-29927 #Node.js
آسیب پذیری #Bypass_Authorization برای Node.js روی یکی از سایت های برگزار کننده دوره های امنیتی که بواسطه اکسپلویت زیر کشف شد و البته در ویدیو نیز بصورت دستی تست انجام شده است.

این آسیب پذیری ظرفیت دور زدن هر صفحه ای که دارای کنترل سطح دسترسی هست رو داره، اما در تصویر مربوطه هدف بیرون کشیدن اطلاعات حساس نبوده و صرفا گوش زد وجود یک آسیب پذیری بوده است.

https://gist.github.com/a9v8i/91b3f669c1b1927b540a54cbcc8481a5
📅 برنامه LinuxFest منتشر شد! 🚀 🐧

سه روز پر از یادگیری و تجربه با بهترین‌های دنیای لینوکس، متن‌باز، داکر، کوبرنتیز، امنیت و DevOps!

🔹 📅 تاریخ: ۲۰ تا ۲۲ فروردین ماه

🔹📍 مکان: دانشگاه صنعتی امیرکبیر

🔹 ظرفیت محدود! همین الان ثبت‌نام کنید!

🔉  اطلاعات بیشتر و ثبت نام: linux-fest.ir
This media is not supported in your browser
VIEW IN TELEGRAM
دیتای صفر و یکی از نگاه فیزیک:

شاید مثل من دوست داشته باشید در ساختار مموری ها ریز بشید تا بفهمید چطوری دیتا به صورت صفر و یکی ذخیره میشه. این توضیحی که میگم فقط مختص حافظه های Flash و RAM هست و حافظه های مغناطیسی مکانیسمشون متفاوت هست.
در هر سلول حافظه‌ی Flash یک ترانزیستور و در حافظه‌ی RAM یک ترانزیستور و یا یک خازن در ابعاد نانومتر وجود داره که وقتی الکترون ها داخلشون وجود دارند حالت شارژ (۱) هستند و وقتی خالی از الکترون هستند در حالت دشارژ (۰) هستند؛ کل پروسه هم توسط جریان برق انجام میشه.


چطوری ترانزیستور و خازن به این ریزی در سلول ها جا شده؟!
فناوری میکروالکترونیک به طراحان این امکان رو میده که اجزای الکتریکی رو در مقیاس نانو تولید کنند!


حالا حساب کنیم چند تا ترانزیستور در یک فلش ۴ گیگابایتی وجود داره؟
هر گیگابایت معادل دو به توان ۳۰ بایت هست و هر بایت هم ۸ بیت هست، اگر طراحی حافظه طوری باشه که هر سلول توانایی نگهداری یک بیت رو داشته باشه در نتیجه معادل ۳۲ ضربدر دو به توان ۳۰ تا سلول داریم که به همین تعداد هم ترانزیستور داریم! خودتون بزرگی این عدد رو مجسم کنید تو ذهنتون!


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

⚠️ اگر جایی رو اشتباه گفتم بهم ایمیل بزنید بگید، من محاسباتم رو اونقدر درآوردم واسه یه فلش ۴ گیگی.
[email protected]


#فیزیک
#کامپیوتر
‼️تلگرام را هک‌کنید و تا ۴ میلیون دلار جایزه بگیرید.

⭕️ طبق اعلام شرکت، Operation Zero مبلغ ۵۰۰ هزار دلار برای آسیب‌پذیری «اجرای کد از راه دور» (RCE) با یک کلیک، ۱.۵ میلیون دلار برای نوع بدون کلیک (Zero-Click RCE) و تا ۴ میلیون دلار برای مجموعه‌ای از آسیب‌پذیری‌های زنجیره‌ای که می‌تواند کنترل کامل دستگاه کاربر را به هکر‌ها بدهد، پیشنهاد داده است
یک بردار حمله جدید از طریق بایگانی محبوب WinRAR کشف شده است.

⚠️ یک آسیب پذیری در بایگانی WinRAR کشف شده است که به شما امکان می دهد مکانیسم امنیتی "Mark of the Web" ویندوز را دور بزنید. این مشکل تمام نسخه‌های بایگانی محبوب تا 7.11 را تحت تأثیر قرار می‌دهد و مهاجمان می‌توانند از آن برای اجرای کدهای مخرب بدون هشدار سیستم استفاده کنند.

🔍 این آسیب پذیری شناسه CVE-2025-31334 و امتیاز CVSS 6.8 را دریافت کرده است. هنگام باز کردن یک پیوند نمادین به یک فایل اجرایی در بایگانی، ویندوز اخطار استاندارد در مورد اجرای فایل دانلود شده از اینترنت را نمایش نمی دهد، که حملات مهندسی اجتماعی را به ویژه خطرناک می کند.

🛡 توسعه دهنده WinRAR، RARLAB، به روز رسانی را منتشر کرده است که آسیب پذیری کشف شده را برطرف می کند. اکیداً به همه کاربران توصیه می شود که به نسخه 7.11 یا بالاتر به روز رسانی کنند و قبل از باز کردن آرشیوها با راه حل های آنتی ویروس اسکن کنند.
#CVE-2025-29927 #Bypass_Authorization
آسیب پذیری Bypass Authorization که برای Next.js در نسخه های زیر 13.5.6 و 14.2.25 و 15.2.3 آمده است.

ماجرا از این قرار که Middleware های طراحی شده در Next.js امکان اعمال تغییر در درخواست دریافتی را دارند، قبل از اینکه پارسر کد درخواست رو تحویل بگیره.

دور زدن مکانیزم کنترل سطح دسترسی یا Authorization زمانی انجام میشود که در درخواست ارسالی Header با نام x-middleware-subrequest تنظیم شده که بدان معنی است درخواست به Middleware تحویل داده شود و در شرط خط 707 اومده که زمانی که نام middleware در آرایه subrequests قرار داشته باشه پاسخ از نوع ()NextResponse.next برگشت داده شده و عملیات همزمان با ()Promise.resolve ادامه پیدا خواهد کرد.

اگر Header با نام x-middleware-subrequest تعریف شده باشه، Middleware بررسی امنیتی رو نادیده گرفته و درخواست رو به مقصد اصلی هدایت خواهد کرد که اینجا آسیب پذیری رخ خواهد داد.

مقدار MiddlewareInfo.name میتونه بدست بیاد و مسیر Middleware امکان تشخیص رو داشته چرا که در مسیریابی pages و با نام middleware.ts_ قرار داشته است.
👍1