java - 什么是 "hook"以及如何用 Java 编写一个?以及如何与内核通信以了解用户按下的键/向操作系统注册

标签 java java-native-interface hook kernel keylogger

虽然我搜索了很多,但我仍然不清楚“钩子(Hook)”到底是什么。例如,我在 wiki answers 上阅读了这篇文章:

A hook is a method of interposing a piece of code in front of another piece of code, so that the first piece of code executes before the second piece of code, giving the first piece of code an opportunity to monitor and/or filter the behavior of the second piece of code. An example might be a mouse hook, allowing the hook code to monitor the mouse while at the same time preserving the functionality of the original mouse event processing routine.

我也读过这个post ,但我仍然不明白“钩子(Hook)”到底是什么。有人可以用外行的话解释什么是“钩子(Hook)”吗?为什么有些人要写一个“钩子(Hook)”?另外,是否可以用 Java 编写一个“钩子(Hook)”?

注意:

我想用 java 写一个键盘记录器,我的一个 friend 说你必须用 C 写一个“钩子(Hook)”。我不能用 Java 写整个键盘记录器(只在 windows 上运行)吗?

编辑

请使用键盘记录器给出答案。我如何使用 Hook 请求内核向我的应用程序提供有关按下的键的信息?或者我如何使用 JNI 向操作系统注册我的应用程序?我希望我的应用程序记录用户按下的键。

最佳答案

我会将钩子(Hook)这个词与至少两个不同的概念联系起来:

a) 观察者模式,其中一个类允许您添加一个监听器,该监听器将在某些事件上得到通知。您可以在整个 Swing、Servlet API 和许多第 3 方框架中找到它。

b) 模板方法模式。抽象类定义了以何种顺序调用哪些方法,实现类可以覆盖这些方法。这样的例子并不常见,但您偶尔会看到它们。

关于java - 什么是 "hook"以及如何用 Java 编写一个?以及如何与内核通信以了解用户按下的键/向操作系统注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285549/

相关文章:

java - Maven 和 native 库

android - 依赖于一个 SO 文件的 JAR 依赖

git - 如何让 Git 提交历史显示在 Redmine 问题跟踪器上

java - 二叉树后缀计算器

java - 报告设计无效。未找到字段 Jasper Reports

java - 通过 JNI 从 C++ 应用程序创建 JVM 后找不到类

php - 在 woocommerce 单页上添加到购物车按钮后添加内容

c++ - 如何使用非托管 EasyHook 从进程中的任何线程 Hook 方法?

java - 如何将 Maven 插件中 @Parameter 的 defaultValue 设置为方法的结果?

java - 从 Collection<Long> 到 LongStream 的直接转换