صفحه اول > مقالات

 

 

نوشتن 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) يا ليست پردازنده وجود دارد. يك از اين روش‌ها باز كردن يك پنجره مخفي در هنگام روشن شده دستگاه و مقداردهي مناسب به  پارامتر‌هاي لازمه به صورت زير است.