【问题标题】:Design a keylogger in C using far pointers使用远指针在 C 中设计键盘记录器
【发布时间】:2015-07-25 15:46:50
【问题描述】:

我正在尝试用 C 语言制作一个简单的键盘记录器。所以我决定使用远指针来访问键盘缓冲区。(32 字节,地址 - 0x41E)。我只是将该地址分配给远指针并尝试访问缓冲区。但我输入的代码只显示这 3 个字符 - 笑脸、@ 和很多空格。这是我的代码 -

#include<stdio.h>
#include<conio.h>
int main()
{
char far *s,*p,*m;
char arr[32];
s=(char far*)0x0041E;
m=(char far*)0x0041E;
p=(char far*)0x0043D;
while(!kbhit())
    {
     m=s;
         while(m<=p)
         {
         printf(" %c",*m);
         m++;
         }
    }
  return 0;
}

键盘缓冲区地址的链接-(最近的一点参考:-)) http://wiki.osdev.org/Memory_Map_(x86) http://computer.forensikblog.de/en/2009/04/reading-passwords-from-the-keyboard-buffer.html

【问题讨论】:

  • “远指针”? &lt;conio.h&gt;?这是什么操作系统?
  • 有什么理由使用远指针?
  • @melpomene:我目前使用的是 Windows-7,但 keybuffer 的地址不依赖于操作系统。我们需要包含 以使用 kbhit()。它在 gcc 中不存在不过!
  • 什么是“keybuffer”?另外,什么是远指针?
  • 您应该了解现代操作系统设计、驱动程序、虚拟内存和内存保护,以及未定义的行为。更别提硬件架构了,USB、DOS、BIOS、UEFI等等。

标签: c pointers keylogger


【解决方案1】:

您在这里提到的两个网站中的第一个已经过时了大约 20 年。它并不能准确地代表当今计算机的工作方式。

(您所指的第二个网站在许多细节上存在严重错误;读起来好像作者根据猜测和道听途说占了文章的一半。)

您在此处尝试访问的键盘缓冲区仅在运行较旧的操作系统(例如 DOS)时使用,该操作系统依赖于 PC BIOS 进行输入和输出。它不在任何图形操作系统下使用;它们将键盘输入存储在完全不同的位置,应用程序通常无法直接访问这些位置。

如果您尝试为 Windows 7 编写键盘记录器,则需要使用特定于该操作系统的方法,例如您在评论中提到的 getAsyncKeyState() 方法。是的,它会更复杂。但是,与您在此处尝试使用的过时方法不同,它实际上可以工作。

【讨论】:

  • 我正在尝试制作一个更通用的键盘记录器!无论如何感谢回答!
  • @KatieStone 没有什么能比得上“通用键盘记录器”。您不能在任何计算机/操作系统上运行程序。首先,现代操作系统不允许您直接访问物理内存,只能访问虚拟内存。它们中的每一个也有一组不同的 API 用于访问键盘功能。 DOS 不是“真正的”操作系统,因为它缺少操作系统的大部分服务。即使您在 Windows 中使用 cmd.exe 进行编程,它也不是 DOS。而对于其他架构(因为你没有标记 x86)这些东西将不适用,因为它们有不同的内存映射和不同的方法来获取键盘缓冲区
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多