📌 سری یادداشتهای واحد توسعه محصول آیو (نوراویون):
یک سری نکات در مورد اینتراپت 2d وجود دارد که بسیار از منظر توسعه محصول اهمیت دارد. وقتی int 2D اجرا میشود، سیستم از آدرس درون ثبات EIP به عنوان Exception Address استفاده میکند و آن را یک واحد افزایش خواهد داد. بعد هم اگر دیباگری وجود داشته باشد، EXCEPTION_BREAKPOINT را تولید میکند، اگر هم دیباگری وجود نداشت هم که هیچ چیزی تولید نخواهد شد (منظور از وجود دیباگر، پیوست آن به پروسه است).
به همین دلیل رفتار اینتراپت 2D، میتوان با استفاده از آن به وجود دیباگر پیبرد و علاوه بر توسعه محصول، به عنوان Anti-Debugging توسط توسعهدهندگان بدافزار استفاده شود. در حقیقت از آن برای اهداف مخرب سوء استفاده میشود. با این حال، فرض کنید، یک برنامه بسیار خاص داریم که عملکرد آن برای ما خیلی مهم هست و قرار است یک جایی روی سیستم یک مشتری یا یک سازمان یا هر چیزی استفاده شود. مثلا Ai000 Open XDR را در نظر بگیرید.
یکی از امکاناتی که در برنامه Ai000 Open XDR وجود دارد این است که وقتی مثلا یک Runtime Anomaly اتفاق افتاد، int 2D اجرا میشود که اگر دیباگری وجود داشت، آدرس Exception را بردارد و سپس تحلیلگر به آن آدرس رجوع کند تا متوجه شود چه اتفاقی رخ داده است (چون همانطور که ذکر شد، int 2D آدرس موجود در EIP رو به عنوان Exception Address اعلام میکند). این مکانیزم برای پاسخگویی سریع به مشکلات مشتریان در نظر گرفته شده است.
در این شرایط، وقتی یک سازمان مشتری تماس بگیرد که محصول در زمان اجرا و در محیط عملیاتی دارای مشکل است، شخص ریسپاندر میتواند با کمک این مکانیزم در محیط حاضر شود و با استفاده از یک دیباگر مسئله را از نزدیک تحلیل کند. اگر هم دیباگر به برنامه Attach نشده باشد، محصول Ai000 Open XDR رفتار عادی نشان میدهد و هیچ تفاوتی با اجرای عادی نخواهد داشت.
در واقع این مکانیزم در Ai000 Open XDR به ما شرایط Live Debugging در سیستمهای همیشه در حال اجرا و بدون وقفه ارائه میدهد. بنابراین در این محصول که ماهیت خیلی حساس دارد، چند لایه مکانیزم تحلیل و اشکالزدایی در نظر گرفته شده است تا برای مواقعی که نیاز به رفع اشکال هست. این موارد به شرح زیر هستند:
1. اولین لایه مکانیزم لاگ هست.
2. دومین لایه مکانیزم Debug Message است که وقتی یک دیباگر یا مثلا DbgView.exe در حال اجرا بود، یک سری اطلاعات در کنسول چاپ شود و اگر هم چنین چیزی در حال اجرا نبود که کاربر اصلا پیغام رو دریافت نخواهد کرد.
3. سومین لایه مکانیزم Debug تعاملی است که فقط یک طرفه برنامه چیزی را در خروجی چاپ نکند، بلکه بشود در شرایط از پیش تعریف شده، با وقوع آن شرایط، در دیباگر آن برنامه متوقف شود و تحلیلگر بتواند تحلیل انجام بدهد.
4. چهارمین لایه مکانیزمهای Profiling و امثالهم است.
5. پنجمین لایه مکانیزم Try/Catch و Try/Except است که در زبانهای برنامهنویسی مثل Cpp یا حتی Windows API تعریف شده است.
6. ششمین لایه استفاده از مکانیزمهای RPC است که در محیط آزمایشگاهی توسعه محصول استفاده میشود.
در هر صورت، هیچ محصولی در نگاه اول نمیتواند بدون مشکل و ضعف باشد از همین روی، در هنگام توسعه باید انواع رویکردها را برای Fast Response در نظر گرفت تا اگر محصول دچار مشکل در محیط مشتری شد، شناسایی و به سرعت رفع شود. در تمامی محصولات واحد توسعه Ai000 (نوراویون) این موارد به عنوان Best Practice استفاده میشود.
✍️ نویسنده میلاد کهساری الهادی
➖راهبر فنی تیم تحقیقات و توسعه آیو
⏰ سه شنبه - ۱ آبان ۱۴۰۳
@aioooir | #developunit #xdr #dlp