كلیدهای محرمانه
سیستمهای كلید محرمانه تنها از یک كلید برای رمزنگاری و رمزگشایی اطلاعات استفاده میکنن در این شیوه رمزنگاری، لازمه كه هر جفت فرستنده و گیرنده اطلاعات كلید جدا ای رو برای رمزنگاری داشته باشند و حفظ كلید به صورت محرمانه بسیار اهمیت داره امنیت این روش در گرو حفظ امنیت كلیده الگوریتم Data Encryption Standard) DES) یک نمونه از الگوریتمهای كلید محرمانه هست. چون فرض میکنیم كه الگوریتم شناخته شده و معلومه امن بودن انتقال و ذخیره كلید بسیار مهمه
کارتهای هوشمند معمولاً برای ذخیره كلیدهای محرمانه استفاده میشن در این حالت تضمین اینكه قلمرو كلید محدوده مهمه: باید همیشه فرض كنیم كه یک كارت ممكنه توسط افراد غیرمجاز با موفقیت تحلیل شه و به این ترتیب كل سیستم در خطر قرار بگیره در شكل زیر یک عملیات انتقال اطلاعات با استفاده از كلید محرمانه نشون داده شده كه در اون یک كاربر بانک، اطلاعات رو با استفاده از كلید محرمانه رمزنگاری میکنه و برای كارمند بانک ارسال میکنه شخص نیز اطلاعات رو با كلید مشابهی رمزگشایی میکنه
سیستمهای كلید محرمانه تنها از یک كلید برای رمزنگاری و رمزگشایی اطلاعات استفاده میکنن در این شیوه رمزنگاری، لازمه كه هر جفت فرستنده و گیرنده اطلاعات كلید جدا ای رو برای رمزنگاری داشته باشند و حفظ كلید به صورت محرمانه بسیار اهمیت داره امنیت این روش در گرو حفظ امنیت كلیده الگوریتم Data Encryption Standard) DES) یک نمونه از الگوریتمهای كلید محرمانه هست. چون فرض میکنیم كه الگوریتم شناخته شده و معلومه امن بودن انتقال و ذخیره كلید بسیار مهمه
کارتهای هوشمند معمولاً برای ذخیره كلیدهای محرمانه استفاده میشن در این حالت تضمین اینكه قلمرو كلید محدوده مهمه: باید همیشه فرض كنیم كه یک كارت ممكنه توسط افراد غیرمجاز با موفقیت تحلیل شه و به این ترتیب كل سیستم در خطر قرار بگیره در شكل زیر یک عملیات انتقال اطلاعات با استفاده از كلید محرمانه نشون داده شده كه در اون یک كاربر بانک، اطلاعات رو با استفاده از كلید محرمانه رمزنگاری میکنه و برای كارمند بانک ارسال میکنه شخص نیز اطلاعات رو با كلید مشابهی رمزگشایی میکنه
👏9👍2
كلیدهای اصلی و مشتق شده (Master and derived keys)
یكی از ایراداتی كه به روشهای پیشین وارده تعداد زیاد كلیدهاست كه طبیعتاً منجر به سختتر شدن مدیریت كلید میشه یک روش برای كم کردن از تعداد كلیدهایی كه باید منتقل و ذخیره شن مشتق گرفتن از آنها در زمان مورد نیازه در یک برنامه اشتقاق كلید یک كلید اصلی همراه با چند پارامتر مجزا برای محاسبه كلید مشتق شده استفاده میشه كه بعداً برای رمزنگاری استفاده میشه. برای مثال، اگر یک صادر كننده با تعداد زیادی كارت سروكار داره
میتونه برای هر كارت، با استفاده از كلید اصلی، شماره كارت رو رمز كنه و به این ترتیب كلید مشتق شده حاصل میشود و به اون كارت اختصاص داده میشه شكل دیگری از كلیدهای مشتق شده با استفاده از tokenها به دست میان كه token ها محاسبهگرهای الكترونیكی با عملكردهای مخصوصن ورودی اونها ممكنه یک مقدار گرفته شده از سیستم مركزی یک PIN وارد شده توسط كاربر و یا تاریخ و زمان باشه خود token شامل الگوریتم و یک كلید اصلیه چنین token هایی اغلب برای دسترسی به سیستمهای كامپیوتری امن استفاده میشن
یكی از ایراداتی كه به روشهای پیشین وارده تعداد زیاد كلیدهاست كه طبیعتاً منجر به سختتر شدن مدیریت كلید میشه یک روش برای كم کردن از تعداد كلیدهایی كه باید منتقل و ذخیره شن مشتق گرفتن از آنها در زمان مورد نیازه در یک برنامه اشتقاق كلید یک كلید اصلی همراه با چند پارامتر مجزا برای محاسبه كلید مشتق شده استفاده میشه كه بعداً برای رمزنگاری استفاده میشه. برای مثال، اگر یک صادر كننده با تعداد زیادی كارت سروكار داره
میتونه برای هر كارت، با استفاده از كلید اصلی، شماره كارت رو رمز كنه و به این ترتیب كلید مشتق شده حاصل میشود و به اون كارت اختصاص داده میشه شكل دیگری از كلیدهای مشتق شده با استفاده از tokenها به دست میان كه token ها محاسبهگرهای الكترونیكی با عملكردهای مخصوصن ورودی اونها ممكنه یک مقدار گرفته شده از سیستم مركزی یک PIN وارد شده توسط كاربر و یا تاریخ و زمان باشه خود token شامل الگوریتم و یک كلید اصلیه چنین token هایی اغلب برای دسترسی به سیستمهای كامپیوتری امن استفاده میشن
❤9👍1
ReverseEngineering
دوستان اگه براتون مقدوره لطفا ری اکشن هم بزنید ممنون
خیلی عشقید منم تا جایی که بتونم براتون سنگ تموم میزارم و نمیزارم چیزی کم و کسر باشه دم تون گرم🫶🏼
❤32👏3
كلیدهای رمز كننده كلید (Key-encrypting keys)
از اونجا كه ارسال كلید یک نقطه ضعف از نظر امنیتی در سیستمها بشمار میره رمز کردن كلیدها هنگام ارسال و ذخیره اون ها به شکل رمز شده منطقی به نظر میرسه كلیدهای رمز کننده كلید هرگز به خارج از یک سیستم كامپیوتری (یا كارت هوشمند) ارسال نمیشن و میتونیم آسانتر محافظت شن اغلب برای تبادل كلیدها الگوریتم متفاوتی از اونچه كه برای رمز کردن پیامها استفاده میشه، مورد استفاده قرار میگیره. از مفهوم دامنه كلید (key domain) برای محدود كردن میدان كلیدها و محافظت كردن از كلیدها در دامنه شون استفاده میکنیم معمولاً یک دامنه یک سیستم كامپیوتری هست كه میتوان به صورت فیزیكی و منطقی محافظت شه كلیدهای استفاده شده در یک دامنه توسط یک كلید رمز کننده كلید محلی ذخیره میشن هنگامی كه كلیدها میخان به یک سیستم كامپیوتری دیگه فرستاده بشن رمزگشایی و تحت یک كلید جدید رمز میشن كه اغلب به عنوان كلید كنترل ناحیه (zone control key) شناخته میشه با دریافت این كلیدها در طرف دیگه تحت كلید محلی سیستم جدید رمز میشن بنابراین كلیدهایی كه در دامنههای یک ناحیه قرار دارند از دامنهای به دامنه دیگر به صورتی كه بیان کردیم منتقل میشن
از اونجا كه ارسال كلید یک نقطه ضعف از نظر امنیتی در سیستمها بشمار میره رمز کردن كلیدها هنگام ارسال و ذخیره اون ها به شکل رمز شده منطقی به نظر میرسه كلیدهای رمز کننده كلید هرگز به خارج از یک سیستم كامپیوتری (یا كارت هوشمند) ارسال نمیشن و میتونیم آسانتر محافظت شن اغلب برای تبادل كلیدها الگوریتم متفاوتی از اونچه كه برای رمز کردن پیامها استفاده میشه، مورد استفاده قرار میگیره. از مفهوم دامنه كلید (key domain) برای محدود كردن میدان كلیدها و محافظت كردن از كلیدها در دامنه شون استفاده میکنیم معمولاً یک دامنه یک سیستم كامپیوتری هست كه میتوان به صورت فیزیكی و منطقی محافظت شه كلیدهای استفاده شده در یک دامنه توسط یک كلید رمز کننده كلید محلی ذخیره میشن هنگامی كه كلیدها میخان به یک سیستم كامپیوتری دیگه فرستاده بشن رمزگشایی و تحت یک كلید جدید رمز میشن كه اغلب به عنوان كلید كنترل ناحیه (zone control key) شناخته میشه با دریافت این كلیدها در طرف دیگه تحت كلید محلی سیستم جدید رمز میشن بنابراین كلیدهایی كه در دامنههای یک ناحیه قرار دارند از دامنهای به دامنه دیگر به صورتی كه بیان کردیم منتقل میشن
❤4💋1💘1
كلیدهای نشست (Session keys)
برای محدود كردن مدت زمانی كه كلیدها معتبرن معمولا یک كلید جدید برای هر نشست یا هر تراكنش تولید میشه این كلید ممكنه یک عدد تصادفی تولید شده توسط ترمینالی باشه كه در مرحله تصدیق كارت قرار داره اگر كارت قادر به رمزگشایی روش كلید عمومی باشه یعنی كلید نشست میتونه با استفاده از كلید عمومی كارت رمز شه بخشی از تراكنش كه در اون كلید منتقل میشه اغلب در مقایسه با بقیه تراكنش کوتاهتره بنابراین بار اضافی این بخش نسبت به كل تراكنش قابل صرف نظره چنانچه بقیه تراكنش به سبب استفاده از كلید متقارن (محرمانه) با بالاسری كمتری رمز شه زمان پردازش برای فاز تایید هویت و انتقال كلید قابل پذیرش است (توضیح اینكه روشهای رمز متقارن از نامتقارن به مراتب سریعتر هستن بنابراین میتونیم ابتدا یک كلید متقارن را با استفاده از روش نامتقارن انتقال بدیم و سپس از اون كلید متقارن برای انجام بقیه تراكنش استفاده بکنیم). شكل خاصی از كلید نشست، سیستم انتقال كلید است كه در برخی سیستمهای پرداخت الكترونیک و مبادله دیتای الكترونیک استفاده میشه بدین صورت كه در پایان هر تراكنش یک كلید جدید منتقل میشه و این كلید برای تراكنش بعدی مورد استفاده قرار میگیره
برای محدود كردن مدت زمانی كه كلیدها معتبرن معمولا یک كلید جدید برای هر نشست یا هر تراكنش تولید میشه این كلید ممكنه یک عدد تصادفی تولید شده توسط ترمینالی باشه كه در مرحله تصدیق كارت قرار داره اگر كارت قادر به رمزگشایی روش كلید عمومی باشه یعنی كلید نشست میتونه با استفاده از كلید عمومی كارت رمز شه بخشی از تراكنش كه در اون كلید منتقل میشه اغلب در مقایسه با بقیه تراكنش کوتاهتره بنابراین بار اضافی این بخش نسبت به كل تراكنش قابل صرف نظره چنانچه بقیه تراكنش به سبب استفاده از كلید متقارن (محرمانه) با بالاسری كمتری رمز شه زمان پردازش برای فاز تایید هویت و انتقال كلید قابل پذیرش است (توضیح اینكه روشهای رمز متقارن از نامتقارن به مراتب سریعتر هستن بنابراین میتونیم ابتدا یک كلید متقارن را با استفاده از روش نامتقارن انتقال بدیم و سپس از اون كلید متقارن برای انجام بقیه تراكنش استفاده بکنیم). شكل خاصی از كلید نشست، سیستم انتقال كلید است كه در برخی سیستمهای پرداخت الكترونیک و مبادله دیتای الكترونیک استفاده میشه بدین صورت كه در پایان هر تراكنش یک كلید جدید منتقل میشه و این كلید برای تراكنش بعدی مورد استفاده قرار میگیره
❤3
کرک کردن نرمافزار یعنی دور زدن یا غیرفعال کردن مکانیزمهای امنیتی یک نرمافزار برای استفاده بدون مجوز، روشهای کرک کردن نرمافزار شامل موارد زیر میشه:
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
در برخی موارد که نرمافزار از مکانیزمهای سادهای برای اعتبارسنجی استفاده میکنه میتونیم با امتحان کردن ترکیبهای مختلف، رمز عبور یا سریال صحیح رو پیدا کنیم
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 استفاده میشه
حالا توی رمزنگاری انتقال که بعضی وقتا بهش میگن رمزنگاری آنلاین پیغام وقتی که فرستاده میشه رمز میشه اما هر بار که به یک نقطه توی شبکه میرسه رمزگشایی میشه و دوباره رمز میشه توی این روش رمزنگاری از چشم کاربر پنهانه و بخشی از پروسه انتقاله
دو تا سطح ارتباطی داریم که رمزنگاری میتونه توشون انجام بشه این رمزنگاری به دو دسته تقسیم میشه:
یکی رمزنگاری از مبدأ تا مقصد
و یکی هم رمزنگاری انتقال توی رمزنگاری از مبدأ تا مقصد
که بعضی وقتا بهش میگن رمزنگاری آفلاین پیغامها وقتی که فرستاده میشن رمز میشن و بعد توی مقصد رمزگشایی میشن توی این روش نیازی نیست که شبکه بفهمه پیغام رمز شده گاهی اوقات کاربر میتونه این نوع رمزنگاری رو انتخاب کنه پیغام تا آخر مسیر رمز میمونه خوبیش اینه که لازم نیست همه جا امن باشه این روش الان توی سیستمهای معروف مثل SSL و TLS استفاده میشه
حالا توی رمزنگاری انتقال که بعضی وقتا بهش میگن رمزنگاری آنلاین پیغام وقتی که فرستاده میشه رمز میشه اما هر بار که به یک نقطه توی شبکه میرسه رمزگشایی میشه و دوباره رمز میشه توی این روش رمزنگاری از چشم کاربر پنهانه و بخشی از پروسه انتقاله
👍2
ReverseEngineering
رمزنگاری از مبدا تا مقصد و رمزنگاری انتقال دو تا سطح ارتباطی داریم که رمزنگاری میتونه توشون انجام بشه این رمزنگاری به دو دسته تقسیم میشه: یکی رمزنگاری از مبدأ تا مقصد و یکی هم رمزنگاری انتقال توی رمزنگاری از مبدأ تا مقصد که بعضی وقتا بهش میگن رمزنگاری…
یک مثال که براتون خوب جا بیوفته
1 رمزنگاری مبدأ به مقصد (End-to-End یا آفلاین) :
فرض کن میخوای یه پیامو از نقطه A به نقطه B بفرستی تو این روش، پیام دقیقاً همونجا که فرستندس (همون نقطه A) قفل میشه، و فقط وقتی به دست گیرنده (نقطه B) میرسه، باز میشه مثلاً مثل این میمونه که تو خودت توی خونهت یه جعبه رو قفل کنی و کلیدشو فقط به دوستت بدی توی این روش حتی شبکه یا مسیری که پیام ازش رد میشه (مثل اینترنت یا سرورها) نمیدونن داخل پیام چیه چون از اول تا آخر مسیر پیام همون قفله. مثلاً سیستمهای معروفی مثل SSL یا TLS از این روش استفاده میکنن. خوبیش اینه که لازم نیست به تمام نقاطِ مسیر اعتماد کنی؛ حتی اگه یه هکر توی مسیر باشه نمیتونه پیامو بخونه
2 رمزنگاری انتقال (Link Encryption یا آنلاین) :
این روش یه کم فرق داره اینجا پیام بازم قفل میشه، ولی نه فقط توی مبدأ! هر بار که پیام به یه «گره» یا ایستگاهِ تو مسیر میرسه (مثلاً یه سرور یا روتر)، قفلش باز میشه و دوباره با یه قفل جدید بسته میشه تا به ایستگاه بعدی بره یعنی پیام کل مسیرو یه جورایی با قفلهای مختلف میره مثلا فرض کن پستچیه هر بار نامه رو به یه اداره پست میبره، اونجا نامه رو باز میکنن چک میکنن بعد با یه پاکت جدید میفرستن به اداره بعدی. بدی این روش اینه که توی هر ایستگاه، پیام رمزگشایی میشه پس اگه به اون ایستگاه ها اعتماد نداشته باشی خطر نفوذ وجود داره ولی خوبیش اینه که کاربر اصلاً درگیر نمیشه و همه چیز خودکشه
نکته مهم:
تو رمزنگاری مبدأ به مقصد خود کاربر میتونه انتخاب کنه چیو رمز کنه (مثلاً تو برنامه های چت)
تو رمزنگاری انتقال کاربر اصلاً متوجه نمیشه پیام رمز شده یا نه این کار خودِ شبکه انجام میده
هر دو روش خوبیها و بدیهایی دارن مثلا End-to-End امنتره ولی شاید سرعتش کمتر باشه رمزنگاری انتقال سریعتره ولی باید به همه گرههای شبکه اعتماد کنی!
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 → یه ابزار خط فرمانی و قدرتمند برای تحلیل باینریها
💡 کی ازشون استفاده کنیم؟
وقتی میخوای ببینی یه فایل اجرایی چه توابعی داره رشتههای متنیش چیه و چه کارهایی انجام میده
🔍 تحلیل استاتیک یعنی بررسی کد باینری بدون اجرای برنامه. این ابزارها بهتون کمک میکنن که ساختار برنامه رو بفهمید و بفهمید چه توابع و کلاسهایی داره.
🔹 IDA Pro → قویترین دیساسمبلر برای آنالیز فایلهای اجرایی (پولی، ولی کرک شدش هست!)
🔹 Ghidra → یه ابزار رایگان و متنباز که توسط NSA ساخته شده، مثل IDA ولی رایگان
🔹 Binary Ninja → یه دیساسمبلر سبک برای تحلیل سریع باینریها
🔹 Radare2 → یه ابزار خط فرمانی و قدرتمند برای تحلیل باینریها
💡 کی ازشون استفاده کنیم؟
وقتی میخوای ببینی یه فایل اجرایی چه توابعی داره رشتههای متنیش چیه و چه کارهایی انجام میده
👍6❤1
رمزنگاری (Encryption)
فرآیند تبدیل دادههای قابلخوندن به یک قالب غیرقابل خوندن اما با داشتن کلید صحیح میتونیم اونو دوباره به حالت اولیه برگردونیم هدف اصلی رمزنگاری حفظ محرمانگی اطلاعاته دو نوع اصلی رمزنگاری داریم:
1 رمزنگاری متقارن (Symmetric Encryption):
در این روش از یک کلید واحد برای رمزگذاری و رمزگشایی استفاده میشه (مثلا AES)
2 رمزنگاری نامتقارن (Asymmetric Encryption):
در این روش یک جفت کلید عمومی و خصوصی وجود داره دادهای که با یکی رمز میشه فقط با داده ی دیگه قابل رمزگشایی است (مثلاً RSA)
هشینگ (Hashing)
یک عملیات یکطرفه است که دادهای رو به یک مقدار ثابت (هش) تبدیل میکنه و امکان برگردوندن اون به مقدار اولیه وجود نداره هشینگ برای تضمین یکپارچگی دادهها و ذخیره امن رمزهای عبور استفاده میشه
ویژگیهای کلیدی هشینگ:
یکطرفه بودن: نمیتونیم مقدار اولیه رو از هش استخراج کنیم
حساسیت به تغییرات:
کوچکترین تغییر در ورودی هش کاملا متفاوتی تولید میکنه
تعیین اندازه خروجی:
مقدار هش همیشه طول ثابتی داره (مثلا SHA-256 همیشه 256 بیت خروجی میده)
به زبون ساده رمزنگاری برای محرمانگیه (قابل بازگشت)
ولی هشینگ برای یکپارچگیه (غیرقابل بازگشت)
فرآیند تبدیل دادههای قابلخوندن به یک قالب غیرقابل خوندن اما با داشتن کلید صحیح میتونیم اونو دوباره به حالت اولیه برگردونیم هدف اصلی رمزنگاری حفظ محرمانگی اطلاعاته دو نوع اصلی رمزنگاری داریم:
1 رمزنگاری متقارن (Symmetric Encryption):
در این روش از یک کلید واحد برای رمزگذاری و رمزگشایی استفاده میشه (مثلا AES)
2 رمزنگاری نامتقارن (Asymmetric Encryption):
در این روش یک جفت کلید عمومی و خصوصی وجود داره دادهای که با یکی رمز میشه فقط با داده ی دیگه قابل رمزگشایی است (مثلاً RSA)
هشینگ (Hashing)
یک عملیات یکطرفه است که دادهای رو به یک مقدار ثابت (هش) تبدیل میکنه و امکان برگردوندن اون به مقدار اولیه وجود نداره هشینگ برای تضمین یکپارچگی دادهها و ذخیره امن رمزهای عبور استفاده میشه
ویژگیهای کلیدی هشینگ:
یکطرفه بودن: نمیتونیم مقدار اولیه رو از هش استخراج کنیم
حساسیت به تغییرات:
کوچکترین تغییر در ورودی هش کاملا متفاوتی تولید میکنه
تعیین اندازه خروجی:
مقدار هش همیشه طول ثابتی داره (مثلا SHA-256 همیشه 256 بیت خروجی میده)
به زبون ساده رمزنگاری برای محرمانگیه (قابل بازگشت)
ولی هشینگ برای یکپارچگیه (غیرقابل بازگشت)
👍2❤1
رمز ترنسپوزیشن چیه؟
رمز ترنسپوزیشن یه روش رمزنگاریه که توش حروف متن اصلی تغییر نمیکنن فقط جاشون عوض میشه یعنی همون حروف هستن ولی یه ترتیب دیگه دارن
یه مثال ساده:
کلمه "سلام" رو در نظر بگیرید اگه جای حروف رو جابهجا کنیم میتونیم چیزایی مثل "مالس" یا "لامس" بسازیم این دقیقا همون مفهوم ترنسپوزیشنه
روش جابهجایی ساده (Simple Transposition)
کاری که میکنه: جای حروف رو با یه ترتیب خاص عوض میکنه
مثال :
متن اصلی: HELLO
اگه جای حروف رو دوتا دوتا عوض کنیم میشه:
EHLOL
رمز ترنسپوزیشن یه روش رمزنگاریه که توش حروف متن اصلی تغییر نمیکنن فقط جاشون عوض میشه یعنی همون حروف هستن ولی یه ترتیب دیگه دارن
یه مثال ساده:
کلمه "سلام" رو در نظر بگیرید اگه جای حروف رو جابهجا کنیم میتونیم چیزایی مثل "مالس" یا "لامس" بسازیم این دقیقا همون مفهوم ترنسپوزیشنه
روش جابهجایی ساده (Simple Transposition)
کاری که میکنه: جای حروف رو با یه ترتیب خاص عوض میکنه
مثال :
متن اصلی: HELLO
اگه جای حروف رو دوتا دوتا عوض کنیم میشه:
EHLOL
❤3
2 ابزارهای دیباگینگ و تحلیل داینامیک
🔍 تحلیل داینامیک یعنی بررسی یه برنامه حین اجرا این کار باعث میشه بفهمی که متغیرها چطور تغییر میکنن و برنامه چجوری کار میکنه
🔹 x64dbg / x32dbg → محبوبترین دیباگر برای مهندسی معکوس و کرکینگ (ویندوز)
🔹 OllyDbg → یه دیباگر قدیمی ولی هنوز کاربردی برای برنامههای
32 بیتی
🔹 WinDbg → دیباگر رسمی مایکروسافت برای ویندوز
🔹 GDB → دیباگر خط فرمانی برای لینوکس
🔹 Frida → یه ابزار برای دیباگ کردن اپلیکیشنهای اندروید و iOS
🔹 API Monitor → نمایش تمام ای پی ای هایی که یه برنامه فراخوانی میکنه
💡 کی ازشون استفاده کنیم؟
وقتی بخوای بفهمی کدوم بخش برنامه مسئول چک کردن لایسنسه یا مثلا یه برنامه موقع اجرا چه تغییراتی روی فایلهای سیستم انجام میده
🔍 تحلیل داینامیک یعنی بررسی یه برنامه حین اجرا این کار باعث میشه بفهمی که متغیرها چطور تغییر میکنن و برنامه چجوری کار میکنه
🔹 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
زمان اجرا رو اندازهگیری میکنه. اگه زمان بیشتر از حد عادی باشه یعنی دیباگر فعاله
مثال ساده:
چرا جواب میده؟
چون اگه دیباگر فعال باشه اجرای برنامه متوقف میشه و این وقفه باعث میشه تاخیر بیشتر بشه و لو بری
چطور دورش بزنیم؟
Patch کردن API ها
(Sleepمثلاً مقدار
رو تغییر بدی)
Hook کردن GetTickCount و مقدار فیک برگردوندن
2 استفاده از RDTSC (دستور تایمر CPU)
دستور RDTSC تعداد سیکلهای CPU از زمان روشن شدن سیستم رو میشمره اگه برنامه ببینه مقدار تغییر یافته بیش از حد معمول باشه یعنی احتمالا یه دیباگر فعاله
کد اسمبلی:
چطور دورش بزنیم؟
پچ کردن کدی که RDTSC رو اجرا میکنه
Hook کردن RDTSC و مقدار فیک برگردوندن
استفاده از پلاگینهای Anti-Anti-Debug مثل ScyllaHide
3 مقایسه زمان Sleep() با مقدار واقعی
برنامه یه تاخیر عمدی (مثلاً Sleep(500)) ایجاد میکنه و بعد چک میکنه آیا واقعا همونقدر طول کشیده یا نه اگه بیشتر طول کشیده باشه → یعنی دیباگر توی کاره
مثال:
چطور دورش بزنیم؟
Patch کردن Sleep()
تا مقدار واقعی Sleep نادیده گرفته بشه
Hook QueryPerformanceCounter
و مقدار ثابت برگردوندن
تاخیر در اجرای کد برای شناسایی دیباگر 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
و مقدار ثابت برگردوندن
👍8❤3