【发布时间】:2014-03-20 03:18:15
【问题描述】:
我正在创建一个 c# 应用程序以使用 SendMessage() 函数在记事本中发送消息。我已成功将字符串传递给记事本。字符串非常重要,我想知道键盘记录程序是否可以看到此消息?
如果是,您对如何安全地发送字符串还有其他想法吗?
下面是我使用的示例代码。
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
Process[] notepads = Process.GetProcessesByName("notepad");
if (notepads.Length == 0) return;
if (notepads[0] != null)
{
IntPtr child = FindWindowEx(notepads[0].MainWindowHandle, new IntPtr(0), "Edit", null);
SendMessage(child, 0x000C, 0, TextBox1.Text);
}
【问题讨论】:
-
我认为 Keyloggers 会记录键盘上的击键,因此不应记录使用 SendMessage 功能发送的消息,因为实际上没有人按下键盘,这取决于那些消息的来源您正在发送到记事本
-
@juanreyesv 取决于您是指物理(硬件)键盘记录器还是软件键盘记录器。软件键盘记录器可能会安装
WH_KEYBOARD_LL挂钩,因此它会拾取虚拟击键以及物理击键。 -
@TheFrustratedProgrammer 看看你的代码会很好。实际上,您的设置对我来说听起来不是很安全,尤其是您将敏感数据发送到记事本的部分。任何对您的数据感兴趣的人都可以直接从记事本中提取文本,甚至无需理会您的消息。
-
@computerfreaker ,记事本场景只是简化我的问题的一个示例,我会将字符串发送到另一个应用程序,但我仍会使用 SendMessage 来执行此操作。