نوشتن
keylogger
نرمافزاری
در مقاله
keylogger ابزاری برای
جاسوسی قابلیتها و نحوه کار این
ابزار مورد بررسی قرار گرفته، انواع موجود این ابزار معرفی
شدند. در این مقاله به معرفی ساختار
keyloggerهای
نرمافزاری و روش نوشتن برنامههای
keylogger
پرداخته میشود.
Windows hook
هسته بسیاری از
keyloggerها
با استفاده از مکانیزم
Windows hook
بنا شده است.
Hook
نقطهای در مکانیزم مدیریت پیامهای سیستم
ویندوز است که برنامههای مختلف میتوانند با نصب یک زیربرنامه
ترافیک پیامها را قبل از رسیدن به برنامه مقصد شنود نمایند.
Hook
پانزده نوع دارد که هر یک از آنها به رویدادی خاصی از سیستم
مرتبط هستند. پروتوتایپ
hook
به صورت زیر است:
زنجیره
hook
لیستی از اشارهگرها به زیربرنامههای
hook
است. همزمان با ایجاد پیام جدیدی از یک نوع
hook
خاص، سیستم پیام را یک به یک به همه زیربرنامههایی که در
زنجیره
hook
به آنها اشاره شده است ارسال مینماید.
یک زیربرنامه
hook
میتواند بر ارسال پیام در زنجیره
hook
نظارت داشته و یا آن را تغییر دهد. علاوه بر این امکان ممانعت
از رسیدن پیام به زیربرنامه بعدی در لیست و یا به برنامه مقصد
وجود دارد.
تابع
SetWindowsHookEx
که پروتوتایپی مشابه زیر دارد یک زیربرنامه
در ابتدای زنجیره
hook
قرار میدهد.
نمونههای مختلفی از متن برنامههای
Keylogger
از سایت
http://www.planetsourcecode.com
قابل دریافت است. در صورتی آشنایی با طرز کار
windows hooks
نوشتن
keylogger
دشوار نبوده و نیاز به کد زیادی ندارد. تابع
InstallHook
که از یکی از
keyloggerها
برداشته شده است فایلی که برای ثبت گزارشات استفاده میشود را
مشخص نموده، زیربرنامه ثبت فعالیتهای صفحهکلید
KeyboardProc
را در زنجیره
hook
نصب میکند. این کار با فراخوانی تابع
SetWindowsHooksEx
انجام میشود.
در شرایطی که کلا ۱۵ نوع
hook
وجود دارد،
WH_KEYBOARD
و
WH_MOUSE
برای نوشتن
keylogger
ضروری هستند. در اینجا
WH_KEYBOARD
شرح داده میشود و شرح سایر انواع
hook
در سایت
http://msdn.microsoft.com
قابل دسترسی است.
WH_KEYBOARD
این
hook
برنامهها را قادر میسازد که بتوانند ترافیک پیامهای
WM_KEYDOWN
و
WM_KEYUP
که توسط
GetMessage
و
PeekMessage
بازگردانده میشوند را مانیتور نمایند. هرگاه یکی از توابع
GetMessage
و
PeekMessage
فراخوانی شوند و یک پیام مربوط به صفحه کلید (WM_KEYUP
یا
WM_KWYDOWN)
فراخوانی شود، سیستمعامل اقدام به فراخوانی این زیربرنامه
مینماید. پروتوتایپ تابع به شکل زیر است:
متن زیر
KeyboardProc
است که از یکی از
keyloggerها
گرفته شده است. این تابع فایل خروجی را باز نموده و حرف مرتبط
با کلید فشرده شده را در آن مینویسد. در مواقعی که لازم باشد
با فراخوانی تابع
ToAscii
کد کلید مجازی مشخص شده و وضعیت صفحه کلید به حرف یا حروف
متناظر ترجمه میگردد.
هرگاه رویدادی رخ دهد که توسط
hook
خاصی مانیتور میشود، سیستم عامل اولین زیربرنامه در زنجیره
hook
را فراخوانی میکند. هر زیربرنامه
hook
در لیست تصمیم میگیرد که رویداد را به
زیربرنامه بعدی ارسال نماید یا خیر. در صورتی که بنا بر ارسال
رویداد باشد از تابع
CallNextHookEx
استفاده میشود.
مخفی کردن
keylogger
روشهای مختلفی برای جلوگیری از نمایش نام یک
keylogger
فعال در مدیر وظیفه
(task manager)
یا لیست پردازنده وجود دارد. یک از این روشها باز کردن یک
پنجره مخفی در هنگام روشن شده دستگاه و مقداردهی مناسب به
پارامترهای لازمه به صورت زیر است.
|