#Note #CPL1
یکی از دانشجویان دوره C یک سوال جالب پرسید که قبلا درباره آن توضیح داده بودم، اما اینجا توضیح کاملتری را ارائه میکنم.
تصویر (سوال) در پست بعدی ارسال خواهد شد.
در برنامههای C (اینجا از C مثال میزنم چون سوال مربوط به این دوره است) نقطه ورود اصلی به طور پیش فرض تابع main است. البته این تابع میتواند به صورت wmain یا tmain هم باشد که برای برنامههایی با پشتیبانی از یونیکد یا ورودی های خاص استفاده میشوند.
اما اگر بخواهیم تابع main را کنار بگذاریم و یک تابع دیگر را به عنوان نقطه ورود (Entry Point) برنامه تعریف کنیم، چندین حالت وجود دارد.
قبل از اینکه ادامه بدم، پیشنهاد میکنم این ویدیو را ببینید تا با موضوع بیشتر آشنا شوید. بعد از آن، ادامه بحث را با هم جلو میبریم.
همان طور که در تصویر هم میبینید، از فلگ -nostartfiles استفاده شده است. یکی از کاربردهای این فلگ این است که لینکر نقطه شروع پیشفرض (یعنی main) را نادیده بگیرد و به ما اجازه دهد که خودمان نقطه شروع را تعریف کنیم.
تابع _start در این حالت جایگزین main میشود. اگر بخواهید دقیق تر بدانید که چه اتفاقی پشت صحنه تابع main رخ میدهد پیشنهاد میکنم مقاله پشت صحنه اجرای تابع main در C را مطالعه کنید.
کلمه extern هم مشخص است که برای تعریف (دسترسی) یک تابع خارجی استفاده شده و در نهایت تابع _exit اجرا خواهد شد. اگر علاقه دارید، می توانید تحقیق کنید که این تابع چه تفاوتی با exit دارد. ورودی تابع _exit از نوع int است.
در نهایت، کلمه register (storage class specifier) به این منظور استفاده میشود که متغیر در رجیسترهای پردازنده ذخیره شود نه در RAM، که این میتواند سرعت دسترسی به متغیر را افزایش دهد.
🦅 کانال بایت امن | گروه بایت امن
_
یکی از دانشجویان دوره C یک سوال جالب پرسید که قبلا درباره آن توضیح داده بودم، اما اینجا توضیح کاملتری را ارائه میکنم.
تصویر (سوال) در پست بعدی ارسال خواهد شد.
در برنامههای C (اینجا از C مثال میزنم چون سوال مربوط به این دوره است) نقطه ورود اصلی به طور پیش فرض تابع main است. البته این تابع میتواند به صورت wmain یا tmain هم باشد که برای برنامههایی با پشتیبانی از یونیکد یا ورودی های خاص استفاده میشوند.
اما اگر بخواهیم تابع main را کنار بگذاریم و یک تابع دیگر را به عنوان نقطه ورود (Entry Point) برنامه تعریف کنیم، چندین حالت وجود دارد.
قبل از اینکه ادامه بدم، پیشنهاد میکنم این ویدیو را ببینید تا با موضوع بیشتر آشنا شوید. بعد از آن، ادامه بحث را با هم جلو میبریم.
همان طور که در تصویر هم میبینید، از فلگ -nostartfiles استفاده شده است. یکی از کاربردهای این فلگ این است که لینکر نقطه شروع پیشفرض (یعنی main) را نادیده بگیرد و به ما اجازه دهد که خودمان نقطه شروع را تعریف کنیم.
تابع _start در این حالت جایگزین main میشود. اگر بخواهید دقیق تر بدانید که چه اتفاقی پشت صحنه تابع main رخ میدهد پیشنهاد میکنم مقاله پشت صحنه اجرای تابع main در C را مطالعه کنید.
کلمه extern هم مشخص است که برای تعریف (دسترسی) یک تابع خارجی استفاده شده و در نهایت تابع _exit اجرا خواهد شد. اگر علاقه دارید، می توانید تحقیق کنید که این تابع چه تفاوتی با exit دارد. ورودی تابع _exit از نوع int است.
در نهایت، کلمه register (storage class specifier) به این منظور استفاده میشود که متغیر در رجیسترهای پردازنده ذخیره شود نه در RAM، که این میتواند سرعت دسترسی به متغیر را افزایش دهد.
_
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20👍2🔥1🤩1
#Note #GameHacking
تجربه شخصی از تحلیل چندین Anti-Cheat
چند وقت پیش یک تسک داشتم که مربوط میشد به بررسی یه سری آنتیچیت کرنلمد. میدونستم با چی قراره روبرو بشم، ولی این یکی بیش از حد سختگیرانه بود و بیشتر شبیه یه agent امنیتی بود تا یه سیستم ضدتقلب ساده!
واقعیت اینه که سیستمهای DRM و Anti-Cheat که قبلاً فقط برای جلوگیری از کپی یا تقلب طراحی شده بودن، حالا به ابزارهای مانیتورینگ سطح پایین سیستم تبدیل شدن. یعنی خیلی جدیتر از چیزی که شاید انتظار داشته باشید.
روی پردازندههای AMD، این نوع دسترسی از طریق تکنولوژی SVM یا همون AMD-V انجام میشه. سمت اینتل هم با VT-x برای مجازیسازی و VT-d برای کنترل امن ورودی/خروجی، راه برای آنتیچیتها باز شده تا بتونن به جاهایی از سیستم دسترسی داشته باشن که نرمافزارهای عادی حتی بهش فکر هم نمیکنن.
یعنی از لایه های پایینتر میتونن :
حافظه بازی رو لحظهبهلحظه زیر نظر بگیرن
پردازشهایی که مشکوک به نظر میان رو شناسایی کنن
امضاهای رفتاری بسازن
و حتی با روش هایی مثل Kernel Hooking یا Syscall Hooking تقلب ها رو شناسایی کنند اما این روش ها حتی یک لایه ساده تر از تکنولوژی هایی هست که بالاتر گفتم.
از طرفی اینجور دسترسیها یه روی خطرناک هم داره. کافیه یه باگ کوچیک یا تداخل با یه درایور دیگه اتفاق بیفته، بهراحتی ممکنه سیستم کرش کنه، BSOD بده یا حتی اطلاعات کاربر از بین بره.
یا تشخیص بین کاربر حرفهای و متقلب واقعی خیلی سخت بشه. ممکنه یه برنامهنویس یا دیباگر دقیقاً همون کارهایی رو بکنه که یه چیتر میکنه. پس اگر این الگوریتمها درست طراحی نشن، پر از False Positive میشن و کاربر رو مثل متقلب بلاک میکنن.
🦅 کانال بایت امن | گروه بایت امن
_
تجربه شخصی از تحلیل چندین Anti-Cheat
چند وقت پیش یک تسک داشتم که مربوط میشد به بررسی یه سری آنتیچیت کرنلمد. میدونستم با چی قراره روبرو بشم، ولی این یکی بیش از حد سختگیرانه بود و بیشتر شبیه یه agent امنیتی بود تا یه سیستم ضدتقلب ساده!
واقعیت اینه که سیستمهای DRM و Anti-Cheat که قبلاً فقط برای جلوگیری از کپی یا تقلب طراحی شده بودن، حالا به ابزارهای مانیتورینگ سطح پایین سیستم تبدیل شدن. یعنی خیلی جدیتر از چیزی که شاید انتظار داشته باشید.
روی پردازندههای AMD، این نوع دسترسی از طریق تکنولوژی SVM یا همون AMD-V انجام میشه. سمت اینتل هم با VT-x برای مجازیسازی و VT-d برای کنترل امن ورودی/خروجی، راه برای آنتیچیتها باز شده تا بتونن به جاهایی از سیستم دسترسی داشته باشن که نرمافزارهای عادی حتی بهش فکر هم نمیکنن.
یعنی از لایه های پایینتر میتونن :
حافظه بازی رو لحظهبهلحظه زیر نظر بگیرن
پردازشهایی که مشکوک به نظر میان رو شناسایی کنن
امضاهای رفتاری بسازن
و حتی با روش هایی مثل Kernel Hooking یا Syscall Hooking تقلب ها رو شناسایی کنند اما این روش ها حتی یک لایه ساده تر از تکنولوژی هایی هست که بالاتر گفتم.
از طرفی اینجور دسترسیها یه روی خطرناک هم داره. کافیه یه باگ کوچیک یا تداخل با یه درایور دیگه اتفاق بیفته، بهراحتی ممکنه سیستم کرش کنه، BSOD بده یا حتی اطلاعات کاربر از بین بره.
یا تشخیص بین کاربر حرفهای و متقلب واقعی خیلی سخت بشه. ممکنه یه برنامهنویس یا دیباگر دقیقاً همون کارهایی رو بکنه که یه چیتر میکنه. پس اگر این الگوریتمها درست طراحی نشن، پر از False Positive میشن و کاربر رو مثل متقلب بلاک میکنن.
_
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22❤1
#Note #Tools
چرا LSASS (Local Security Authority Subsystem Service) هدف جذابی برای مهاجمان است؟
پروسس LSASS مسئول مدیریت احراز هویت، توکنها و کلیدهای سیستم عامل است. دسترسی به حافظه آن یعنی دسترسی به مجموعهای از اسرار معتبر سیستم که میتواند برای حملات و تکینیک هایی همچون حرکت جانبی (lateral movement)، فرار از تشخیص (Evasion) و ارتقای امتیازات (privilege escalation) مورد سوءاستفاده قرار گیرد.
چه دادههایی در حافظهٔ LSASS یافت میشوند؟
🏷 هش : NTLM hashes (NT hash) | قابل استفاده برای تکنیکهای Pass-the-Hash
🏷 تکیت : Kerberos tickets (TGT / Service Tickets) | قابل استفاده برای تکنیک Pass-the-Ticket.
🏷 گذرواژهها و اعتبارنامههای متنی (plaintext credentials)| بسته به نسخه/پچ و پیکربندی احراز هویت، ممکن است username/password بهصورت متن خوانا در حافظه حضور داشته باشند.
🏷 کلید: DPAPI master keys و سایر کلیدهای مرتبط | برای بازکردن دادههای رمزنگاریشده محلی یا سرویسها.
🏷 سایر دادههای حساس نظیر LSA secrets, cached credentials و credential blobs که توسط credential providers / SSPها نگهداری میشوند.
✒️ حالا در این ریپازیتوری با نحوه دامپ گرفتن از پروسس LSASS به چندین روش مختلف آشنا خواهید شد.
🦅 کانال بایت امن | گروه بایت امن
_
چرا LSASS (Local Security Authority Subsystem Service) هدف جذابی برای مهاجمان است؟
پروسس LSASS مسئول مدیریت احراز هویت، توکنها و کلیدهای سیستم عامل است. دسترسی به حافظه آن یعنی دسترسی به مجموعهای از اسرار معتبر سیستم که میتواند برای حملات و تکینیک هایی همچون حرکت جانبی (lateral movement)، فرار از تشخیص (Evasion) و ارتقای امتیازات (privilege escalation) مورد سوءاستفاده قرار گیرد.
چه دادههایی در حافظهٔ LSASS یافت میشوند؟
_
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14🔥2👍1
#Note #CTF
چالش های وب سایت باینری گلف (binary.golf)
هدف BGGP5 این بود که کوچکترین کد ممکن ساخته بشه که یک فایل متنی رو از وبسایت BGGP دانلود و نمایش بده. در این چالش روش Peter Ferrie برام جالب بود.
یک رشته ۲۴۹ بایت که base64 شده و یک کاراکتر Sentinel که در آخر اضافه شده که هم دکودر و هم Payload رو در خودش جا میده.
این ۲۴۹ بایت در اصل متن ASCII است، ولی وقتی آن را بهعنوان کد اجرایی 16 بیتی مثلا COM اجرا میکنید، به عنوان کد اسمبلی پردازش میشه یعنی فایل متنی خودش تبدیل به برنامه میشه.
دکودر به صورت Self-Modifying نوشته شده و از ترفندی مثل دستکاری در Prefetch Queue و تغییر بایتها در محل اجرای کد استفاده میکند تا دادههای رمزشده را بازسازی کند.
⬅️ چنین تکنیکهایی (فشردهسازی، رمزگذاری درون متن، دکودینگ در حافظه، اجرا شدن بهصورت خود-تغییرده) مشابه تکنیکهایی است که در بدافزارهای کوچک و Obfuscated بهکار میرود. بنابراین دیدن این کارها هم از منظر هنر چالش برنامهنویسی جالب است و هم از منظر تهدیدات باید با احتیاط بررسی شود.
⬅️ اجرای یک فایل متنی که بهعنوان باینری اجرا میشود ممکن است خطرناک باشد اگر از منبع نامطمئن اجرا شود.
🦅 کانال بایت امن | گروه بایت امن
_
چالش های وب سایت باینری گلف (binary.golf)
هدف BGGP5 این بود که کوچکترین کد ممکن ساخته بشه که یک فایل متنی رو از وبسایت BGGP دانلود و نمایش بده. در این چالش روش Peter Ferrie برام جالب بود.
XN4T4MP354Q0D+kP5X2P6CF0T4uOM/063349+76391
N7M0MMJ4/65L8L1762+3M7378LM92060+36394M6+0
N053L4J63690151013/461N73M1+J04N2M86614L86
0907/+/8M4J3000T3PMtEq3EM0hjgYsALA9STH/8q6
J+ruVAYxPBB4GHwe4AEvNIc0gGS9jY3VybCAtTCBia
W5hcnkuZ29sZi81LzUNAAB6AQAAAAIAAAACAAB=!
یک رشته ۲۴۹ بایت که base64 شده و یک کاراکتر Sentinel که در آخر اضافه شده که هم دکودر و هم Payload رو در خودش جا میده.
این ۲۴۹ بایت در اصل متن ASCII است، ولی وقتی آن را بهعنوان کد اجرایی 16 بیتی مثلا COM اجرا میکنید، به عنوان کد اسمبلی پردازش میشه یعنی فایل متنی خودش تبدیل به برنامه میشه.
دکودر به صورت Self-Modifying نوشته شده و از ترفندی مثل دستکاری در Prefetch Queue و تغییر بایتها در محل اجرای کد استفاده میکند تا دادههای رمزشده را بازسازی کند.
_
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍4🔥3
#Note #PE #MalwareAnalysis
گاهی وقتها برای تحلیل یک باینری، اولین قدم پیدا کردن رشتههاست چه با Static Analysis، چه با Dynamic Analysis.
اگر با ساختار PE آشنا باشیم، این رشتهها معمولا کجا پیدا میشوند ؟در سکشن ها و دایرکتوری ها.
سکشن rdata.
شامل رشتههای ثابت و Read-Only مثل پیامهای خطا، متنهای ثابت، اسم توابع و… .
سکشن data.
محل ذخیرهی رشتههایی که برنامه میتواند در طول اجرا تغییرشان بدهد. (Writable)
دایرکتوری Import Table
اسامی DLLها و توابعی که باینری به آنها وابسته است همینجا ذخیره میشود.
دایرکتوری Export Table
در مورد DLLها، نام توابع یا نمادهایی که Export شدهاند از این قسمت قابل استخراج است.
سکشن Resource (.rsrc)
شامل متادیتا، دیالوگها، اطلاعات نسخه، آیکونها و سایر منابعی که معمولا رشتههای قابل مشاهده در آنها قرار دارد.
سکشن Debug.
اگر Strip نشده باشند، ممکن است مسیر فایلهای سورس، کامنتها یا اطلاعات Build را در خود داشته باشند. برای همین هست که پروتکتوری مثل VMProtect یک گزینه جدا برای این مورد دارد.
و اما سکشن BSS., شامل متغیرهای مقداردهینشده (Uninitialized Data) است یعنی متغیرهایی که فقط تعریف شدهاند ولی هنگام کامپایل مقدار اولیه ندارند. فقط به اندازهی طول متغیر حافظه رزرو میکند و محتوایش در فایل PE وجود ندارد.
حالا خودتون در مورد idata. و edata. جستجو کنید چون این بخش های غیر مستقیم به موضوع رشته ها مربوط هستند.
🦅 کانال بایت امن | گروه بایت امن
_
گاهی وقتها برای تحلیل یک باینری، اولین قدم پیدا کردن رشتههاست چه با Static Analysis، چه با Dynamic Analysis.
اگر با ساختار PE آشنا باشیم، این رشتهها معمولا کجا پیدا میشوند ؟
سکشن rdata.
شامل رشتههای ثابت و Read-Only مثل پیامهای خطا، متنهای ثابت، اسم توابع و… .
سکشن data.
محل ذخیرهی رشتههایی که برنامه میتواند در طول اجرا تغییرشان بدهد. (Writable)
دایرکتوری Import Table
اسامی DLLها و توابعی که باینری به آنها وابسته است همینجا ذخیره میشود.
دایرکتوری Export Table
در مورد DLLها، نام توابع یا نمادهایی که Export شدهاند از این قسمت قابل استخراج است.
سکشن Resource (.rsrc)
شامل متادیتا، دیالوگها، اطلاعات نسخه، آیکونها و سایر منابعی که معمولا رشتههای قابل مشاهده در آنها قرار دارد.
سکشن Debug.
اگر Strip نشده باشند، ممکن است مسیر فایلهای سورس، کامنتها یا اطلاعات Build را در خود داشته باشند. برای همین هست که پروتکتوری مثل VMProtect یک گزینه جدا برای این مورد دارد.
و اما سکشن BSS., شامل متغیرهای مقداردهینشده (Uninitialized Data) است یعنی متغیرهایی که فقط تعریف شدهاند ولی هنگام کامپایل مقدار اولیه ندارند. فقط به اندازهی طول متغیر حافظه رزرو میکند و محتوایش در فایل PE وجود ندارد.
حالا خودتون در مورد idata. و edata. جستجو کنید چون این بخش های غیر مستقیم به موضوع رشته ها مربوط هستند.
_
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥5👎3👍1