#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
🔥17❤1