در مهندسی معکوس و تحلیل بدافزار ما از اجرای single-stepping یا به تعبیری اجرای خط به خط برای رفتار شناسی قطعه کد مشکوک استفاده میکنیم. هکر دنبال آن است که این حرکت ما را شناسایی کند تا بتواند خود را از این آنالیز برهاند. یک راهکار استفاده از تکنیکهای زمانبندی برای شناسایی "single-stepping" در فرآیند دیباگ یا مهندسی معکوس است. در این روش، زمان دقیق (با دقت میلیثانیه) از لحظه شروع سیستم تا اجرای دستور خاصی اندازهگیری میشود. دستور rdtsc در معماری x86 برای این منظور استفاده میشود، که زمان سیستمی را در دو رجیستر EDX و EAX ذخیره میکند.
در فرآیند شبیهسازی دیباگ یا مهندسی معکوس (reverse engineering)، وقتی یک متخصص امنیت در حال اجرای کد است، ممکن است از تکنیکهایی مانند "single-stepping" استفاده کند. این به معنای اجرای کد خط به خط و بررسی هر دستور است. اما این کار باعث تأخیرهای زمانی میشود، چون در این فرآیند، پردازش کد به صورت تدریجی انجام میشود. اگر بتوان زمان دقیق قبل و بعد از اجرای یک دستور را محاسبه کرد، تأخیر ناشی از این فرآیند به وضوح قابل مشاهده خواهد بود.
با استفاده از دستور rdtsc، تفاوت زمانی بین دو نقطه (قبل و بعد از اجرای یک دستور) محاسبه میشود. اگر تأخیری در اجرای دستور مشاهده شود، این به احتمال زیاد نشاندهنده این است که یک دیباگر در حال "single-stepping" در کد است و این تکنیک میتواند برای شناسایی و مقابله با مهندسی معکوس استفاده شود.
دستور rdtsc (Read Time-Stamp Counter) یک دستور در معماری x86 است که برای خواندن شمارنده زمانسنج (Timestamp Counter) استفاده میشود. این شمارنده یک شمارنده 64 بیتی است که از زمان بوت شدن سیستم شروع به افزایش میکند و به صورت پیوسته از آن زمان افزایش مییابد. هدف اصلی این دستور دسترسی به این شمارنده است که برای اندازهگیری زمان و انجام محاسبات زمانی دقیق (با دقت بسیار بالا) کاربرد دارد.
پی نوشت: زمانی که دستور rdtsc اجرا میشود، مقدار شمارنده زمانسنج سیستم (که زمان از شروع سیستم تا آن لحظه را نشان میدهد) در دو رجیستر EDX و EAX ذخیره میشود. EAX نیمی از شمارنده (کمتر از 32 بیت) و EDX نیمه دیگر را نگه میدارد
کتاب Evasive Malware را در نوروز در کانال تلگرام آکادمی روزبه دنبال کنید.