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

|