PDA

View Full Version : تشخیص فشرده شدن کليدهای کيبرد



MTD_GOLD
دوشنبه 05 مرداد 1388, 22:21 عصر
تشخیص فشرده شدن کليدهای کيبرد
http://www.persianblog.ir/templates/public/cyber/images/storybox-right.gif http://www.persianblog.ir/templates/public/cyber/images/sidebox-bar-px.gif http://www.persianblog.ir/templates/public/cyber/images/pixel.gif
یکی از دوستان سوال کرده بودند که چگونه می توان کلیدهای کیبرد را حتی وقتی فوکوس روی برنامه ما نیست تشخیص داد مانند دیکشنری ها که مثلاً با CTRL+F12 فعال می شوند و یا Keylogger ها که کلیدهای فشرده شده را ثبت می کنند .
من دو روش زیر را برای اینکار پيشنهاد می کنم :
۱ - استفاده از یک تابع کتابخانه ای به اسم GetAsyncKeyState موجود در کتابخانه user32.dll . این تابع ، فشرده شدن یا رها شدن یک کلید را تشخیص می دهد . نحوه declare کردن این تابع بصورت زیر است :
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
حال در برنامه تان یک timer قرار داده و در event آن کد زیر را قرار دهید :
For i = 1 To 255
results = 0
results = GetAsyncKeyState(i)
If results <> 0 Then
Msgbox(Chr(i))
End If
Next
برای مشاهده یک برنامه نمونه به این آدرس (http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=36078&lngWId=1)مراجعه کنید .

۲ - استفاده از قلاب یا Hook : قلاب ، یک ابزار در مکانیزم مدیریت پیغام سیستم ویندوز است که توسط آن برنامه ها می توانند یک روتین را برای مدیریت و پردازش پیغامهای خاصی قبل از اینکه آن پیغامها به برنامه مقصد برسند نصب نمایند . قلابها باعث کندی سیستم می شوند زیرا حجم پردازشی سیستم روی هر پیغام را افزایش می دهند بنابراین بایستی زمانیکه واقعاً به قلاب نیاز دارید آنرا نصب نموده و هر چه زودتر آنرا حذف نمایید . سیستم ویندوز از انواع زیادی از قلابها پشتیبانی می کند که هر کدام امکان دستیابی به پیغامهای خاصی را مهیا می نمایند برای مثال یک برنامه کاربردی می تواند با استفاده از قلاب کیبرد برای مدیریت و پردازش پیغامهای مربوط به آن ( مثل فشرده شدن یک کلید خاص یا رها شدن آن ) استفاده کند .
برای نصب یک قلاب در برنامه از یک تابع کتابخانه ای به اسم SetWindowsHookEx استفاده می شود . این تابع یک قلاب را به زنجیره قلابهای سیستم اضافه می کند . نحوه declare کردن این تابع بصورت زیر است :
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
همچنین برای آزاد کردن یک قلاب و حذف آن از زنجیره قلابها از تابع کتابخانه ای UnhookWindowsHookEx استفاده می گردد . نحوه declare کردن این تابع بصورت زیر است :
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
برای ایجاد قلاب کیبرد همچنین نیاز به تعریف یک ثابت است که شماره قلاب کیبرد در آن قرار دارد :
Public Const WH_KEYBOARD = 2
حال بایستی یک تابع پس زمینه یا Callback Function نوشت که به ازای فشرده شدن کیبرد اجرا شود و آدرس آنرا ( با استفاده از کلمه کلیدی Address Of ) بهمراه ثابت فوق به تابع SetWindowsHookEx فرستاد .
برای اطلاعات بیشتر و مشاهده یک نمونه برنامه به این آدرس (http://www.mentalis.org/apilist/SetWindowsHookEx.shtml)مراجعه کنید .

HjSoft
دوشنبه 05 مرداد 1388, 22:54 عصر
من قبلا يك كيلاگر گذاشته بودم ، خيلي كامل بود و تمام كليد ها رو تشخيص مي داد . از ctrl تا fill
يه جستجو بكنيد ، به نتايج جالبي ميرسيد .

mmssoft
سه شنبه 06 مرداد 1388, 09:32 صبح
این هم هست.

دانلود (http://mediavb.persiangig.ir/SourceCode/Other/KeyState.zip)

41134100
شنبه 21 فروردین 1389, 20:17 عصر
من کع نتونستم راه بندازم :(
لطفا یکی بگه چطور کاری کنم با زدن دکمه * msgbox بده برنامه (حتی اگه فوکوس روی فرم دیگه ای باشه مثلا یه بازی)

xxxxx_xxxxx
شنبه 21 فروردین 1389, 22:55 عصر
در مورد Hotkey و Shortcut key تحقیق کنید. (جستجو کنید)
قبلاً مدیر بخش در این مورد مطلبی نوشته بودند.
مورد شما مربوط به Hotkey میشه. البته می تونید با همین تابع GetAsyncKeyState هم پیاده سازیش کنید.



من کع نتونستم راه بندازم :(

کد خودتون رو اینجا قرار بدید تا بررسی بشه.