2011-05-17 90 views
6

我可能会编写一个程序来检测恶意(或非恶意)软件是关键日志记录(记录关键笔划以获取信息)。有没有一种方法来检测关键记录软件?

  1. 将使用什么策略?
    • 是否有某些代码需要查找?
    • 我是否应该搜索某些位置?
  2. 我喜欢的Java和Perl,因为我精通这些语言
    • 是将这些语言的工作?
    • 是否有更好的语言用于这种情况?
  3. 会用什么?
    • 代码?
    • 算法?
    • 功能?
+2

您需要C++。 – SLaks 2011-05-17 15:45:12

回答

3

我认为这取决于你试图做什么。如果您正在查找已知的键盘记录程序,则可以使用任何可以搜索文件系统以查看文件签名的软件。不过,这听起来像你想检测未知的程序。我不相信这是完全可能的。键盘记录应用程序可以被动地收听击键,因此没有可以查找的活动签名。这可能会更容易理解应该在您的计算机上运行的软件,然后检测任何开始运行的新软件。它不一定是按键记录软件,但它将是未经授权的软件(或至少尚未被授权的软件)。

键击会作为事件广播到系统中,您可以在应用程序中订阅该事件。这就是游戏和其他程序如何使用键盘输入。整个系统知道密钥何时被击中以及它是哪个密钥。你无法知道谁在听。

换句话说,如果可能的话,它会杀死软件按键记录器,因为每个防病毒和反间谍软件应用程序都可以选择检测并删除所有这些类型的软件。他们有一个类似于此的选项,但它基于已知的按键记录器的已知签名。

2

作为一个程序,试图确定它的输入是否被键入记录,对于编写不好的键盘记录器,可以寻找一些时间模式,例如记录器回收缓冲器时的周期性延迟,但通常是键盘记录器写得非常好,并且会注入驱动程序链中,因此在正常链条中将难以分辨。

在这种情况下,检测密钥记录器的唯一希望是检查驱动程序链,寻找非标准驱动程序(但某些密钥记录器可能感染标准驱动程序),这在Windows环境中不是特别容易(例如低水平检查)。

需要插入防病毒/防恶意软件钩子,以便能够真正访问不仅驱动程序链定义,而且还要执行真正的代码,以检测是否正在执行一些密钥日志记录,这很困难,充满了官僚作风,并且几乎可以在除C/C++以外的其他任何东西中取消。

相关问题