所谓回调函哗燃数,一般就是悔衡把函数的地址作为参碧芦做数传进去,让调用的函数在内部可以调用这个函数。
例子:
void CALLBACK fun(){...} 这是一个函数,回调函数
void AAA(int a, Fun* p)这是一个普通函数,但第二个参数是fun
AAA(5, fun)
**********补充一下啊××××××××如果你是想真正实现键盘记录功能,那只能用消息钩子实现,具体怎么搞你搜索一下API HOOK,原理我在下面都说过了。早期的黑客软件都是这样实现的。你可以到安全焦点上看看。主要的技术有:远程线程注入、钩子、键盘消息。
另外,java的进程到底能不能注入很难说,所以辩答我说应该用全局钩子,也就是说对所有的信息进行拦截,所以需要把函数写道DLL文件里实现内存的共享。
另外其实可以投机取巧的方法实现。比如就是空间隐藏,完全可以实现,但是要注意技巧,比如防止焦点丢失啊,因为这样键盘输入的东西就记不冲扰下来了~~~
怎么样~这样可以给分了吗?有问题再问啊~~
键盘记录器,估计java是不可能实现的。。。
涉及到windows编程。。
可以用c实现。。。原理是这样的。。
键盘被按下之后,会向窗口发送一个按键消息,这个消息传递给窗口,在窗口的消息循环中被处理,这个时候,如果用c语言写了一个钩子,加入窗口所在进程中,拦截传入的消息,从中读出按下的键是哪个就可以了。。。
java貌似不可能实现那个东西,如果有的话也肯定是钩子之类的~~~
反正进程钩子是有携判慧的,消息钩子不知道有没有。。
用c实现的步骤:
写个DLL文件,把钩子处理函数写在里面,然后导出这个函数。编译成DLL文件
然后注入进程。如果你是要在java的程序里记录,那是不可能设置为局部钩子的,只能是全局钩子!!!
java调用c是这样的:
使用jni技术:
首先java中写一个本地方法
1、然后编译这个类,然后用javah编译它,会产生一个头文件
2、在vc中包含这个头文件,重写里面的方法(这个方法和你在java中写的本地方法是对应的),同样生成一个DLL
3、java中,用System.loadLibrary加载这个dll文件,调用你写的那个方法就可以了~~~
4、键盘记录好像不能直接被java读取,可以先记录到一个文件中,java里面直接读文件了,这样还能避免用jni
你搜索一下呗~~关键字:
api hook、jni、java 钩子
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)