PDA

View Full Version : نوشتن keylogger نرم*افزاری


khazaei
12-02-2008, 10:40 AM
در مقاله keylogger ابزاری برای جاسوسی قابلیت*ها و نحوه کار این ابزار مورد بررسی قرار گرفته، انواع موجود این ابزار معرفی شدند. در این مقاله به معرفی ساختار keylogger*های نرم*افزاری و روش نوشتن برنامه*های keylogger پرداخته می*شود.



Windows hook

هسته بسیاری از keyloggerها با استفاده از مکانیزم Windows hook بنا شده است. Hook نقطه*ای در مکانیزم مدیریت پیام*های سیستم ویندوز است که برنامه*های مختلف می*توانند با نصب یک زیربرنامه ترافیک پیام*ها را قبل از رسیدن به برنامه مقصد شنود نمایند. Hook پانزده نوع دارد که هر یک از آنها به رویدادی خاصی از سیستم مرتبط هستند. پروتوتایپ hook به صورت زیر است:



http://ircert.com/Articles/images/image099.jpg

زنجیره hook* لیستی از اشاره*گرها به زیربرنامه*های hook* است. همزمان با ایجاد پیام جدیدی از یک نوع hook خاص، سیستم پیام را یک به یک به همه زیربرنامه*هایی که در زنجیره hook* به آنها اشاره شده است ارسال می*نماید.

یک زیربرنامه hook* می*تواند بر ارسال پیام در زنجیره hook* نظارت داشته و یا آن را تغییر دهد. علاوه *بر این امکان ممانعت از رسیدن پیام به زیربرنامه بعدی در لیست و یا به برنامه مقصد وجود دارد.

تابع SetWindowsHookEx که پروتوتایپی مشابه زیر دارد یک زیربرنامه در ابتدای زنجیره hook قرار می*دهد.

http://ircert.com/Articles/images/image100.jpg

نمونه*های مختلفی از متن برنامه*های Keylogger از سایت http://www.planetsourcecode.com قابل دریافت است. در صورتی آشنایی با طرز کار windows hooks نوشتن keylogger* دشوار نبوده و نیاز به کد زیادی ندارد. تابع InstallHook که از یکی از keyloggerها برداشته شده است فایلی که برای ثبت گزارشات استفاده می*شود را مشخص نموده، زیربرنامه ثبت فعالیت*های صفحه*کلید KeyboardProc را در زنجیره hook نصب می*کند. این کار با فراخوانی تابع SetWindowsHooksEx انجام می*شود.

http://ircert.com/Articles/images/image101.jpg

در شرایطی که کلا ۱۵ نوع 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*) فراخوانی شود، سیستم*عامل اقدام به فراخوانی این زیربرنامه می*نماید. پروتوتایپ تابع به شکل زیر است:

http://ircert.com/Articles/images/image102.jpg

متن زیر KeyboardProc است که از یکی از keyloggerها گرفته شده است. این تابع فایل خروجی را باز نموده و حرف مرتبط با کلید فشرده شده را در آن می*نویسد. در مواقعی که لازم باشد با فراخوانی تابع ToAscii کد کلید مجازی مشخص شده و وضعیت صفحه کلید به حرف یا حروف متناظر ترجمه می*گردد.