Problem bei Treiberprogrammierung unter Windows
-
Hallo,
ich habe mir vor Kurzem das Buch "Rootkits - Den Windows Kernel unterwandern" (http://www.c-plusplus.net/cms/modules.php?op=modload&name=mbBooks&file=index&func=isbn&isbn=382732341X)
gekauft.
Habe nun aber aber einige Probleme die dort gezeigten Beispiele selbst zu schreiben.Zunächst wollte ich nur einen kleinen Treiber schreiben, welcher einfach als Debug-Meldung ein "Hallo Welt" ausgibt.
Der Code sieht folgendermaßen aus://Basic Device Driver #include "E:\Coding\Programme\WINDDK\3790.1830\inc\ddk\wxp\ntddk.h" NTSTATUS OnStubDispatch(IN PDEVICE_OBJECT DeviceObject, PIRP Irp) { Irp->IoStatus.Status = STATUS_SUCCESS; IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_SUCCESS; } //Entladefunktion VOID OnUnload ( IN PDRIVER_OBJECT DriverObject) { DbgPrint("Unload Called\n"); } NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath) { int i; DbgPrint("Huhu"); //Zeiger auf die Entladefunktion in "theDriverObject" initialisieren theDriverObject->DriverUnload = OnUnload; for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) { theDriverObject->MajorFunction[i] = OnStubDispatch; } return STATUS_SUCCESS; }Danach hab ich eine "SOURCES"-Datei:
TARGETNAME=test TARGETPATH=OBJ TARGETTYPE=DRIVER SOURCES= driver.c TARGETLIBS=$(DDK_LIB_PATH)\ndis.libund eine "MAKEFILE" angelegt:
!INCLUDE $(NTMAKEENV)\makefile.defAnschließen das ganze mittels WDK (checked) kompiliert und scheinbar auch keine Fehlermeldung erhalten:
BUILD: Computing Include file dependencies: BUILD: Examining e:\coding\rootkit directory for files to compile. Compiling (NoSync) e:\coding\rootkit directory ******************** 'nmake.exe /nologo BUILDMSG=Stop. -i NTTEST= UMTEST= NOLINK=1 NOPASS0=1 386=1' cl -nologo -Ii386\ -I. -IE:\Coding\PROGRA~1\WINDDK\3790~1.183\inc\mfc42 -Iobjchk_wxp_x86\i386 -IE:\Coding\PROGRA~1\WINDDK\3790~1.183\inc\wxp -IE:\Coding\PROGRA~1\WINDDK\3790~1.183\inc\wxp -IE:\Coding\PROGRA~1\WINDDK\3790~1.183\inc\ddk\wxp -IE:\Coding\PROGRA~1\WINDDK\3790~1.183\inc\ddk\wdm\wxp -IE:\Coding\PROGRA~1\WINDDK\3790~1.183\inc\crt -D_X86_=1 -Di386=1 -DSTD_CALL -DCONDITION_HANDLING=1 -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0501 /DWINVER=0x0501 -D_WIN32_IE=0x0603 -DWIN32_LEAN_AND_MEAN=1 -DDEVL=1 -DDBG=1 -D__BUILDMACHINE__=WinDDK -DFPO=0 -DNDEBUG -D_DLL=1 /c /Zl /Zp8 /Gy /Gm- -cbstring /W3 /WX /Gz /GX- /GR- /GF /GS /G6 /Ze /Gi- /QIfdiv- /hotpatch -Z7 /Od /Oi /Oy- -FIE:\Coding\PROGRA~1\WINDDK\3790~1.183\inc\wxp\warning.h .\driver.c driver.c Stop. Linking e:\coding\rootkit directory ******************** 'nmake.exe /nologo BUILDMSG=Stop. -i LINKONLY=1 NOPASS0=1 NTTEST= UMTEST= 386=1' link -out:objchk_wxp_x86\i386\test.sys -machine:ix86 @C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\nm138A.tmp Microsoft (R) Incremental Linker Version 7.10.4035 Copyright (C) Microsoft Corporation. All rights reserved. -MERGE:_PAGE=PAGE -MERGE:_TEXT=.text -SECTION:INIT,d -OPT:REF -OPT:ICF -IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221 -INCREMENTAL:NO -FULLBUILD /release -NODEFAULTLIB /WX -debug -debugtype:cv -version:5.1 -osversion:5.1 /functionpadmin:5 /safeseh /pdbcompress -STACK:0x40000,0x1000 -driver -base:0x10000 -align:0x80 /stub:E:\Coding\PROGRA~1\WINDDK\3790~1.183\lib\wxp\stub512.com -subsystem:native,5.01 -entry:GsDriverEntry@8 -out:objchk_wxp_x86\i386\test.sys objchk_wxp_x86\i386\driver.obj E:\Coding\PROGRA~1\WINDDK\3790~1.183\lib\wxp\i386\BufferOverflowK.lib E:\Coding\PROGRA~1\WINDDK\3790~1.183\lib\wxp\i386\ntoskrnl.lib E:\Coding\PROGRA~1\WINDDK\3790~1.183\lib\wxp\i386\hal.lib E:\Coding\PROGRA~1\WINDDK\3790~1.183\lib\wxp\i386\wmilib.lib E:\Coding\PROGRA~1\WINDDK\3790~1.183\lib\wxp\i386\ndis.lib E:\Coding\PROGRA~1\WINDDK\3790~1.183\lib\wxp\i386\sehupd.lib echo Skip Binplace: Skip Binplace: Stop.Wenn ich den Treiber allerdings mit "InstDriver.exe" installiere und anschließend testen will bekomme ich nur die Meldung:
Fail To Start The Service "test"So, das war jetzt ganz schön viel.
Ich würd mich aber freuen wenn mir da jemand weiterhelfen kann
-
Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
artificial schrieb:
-entry:GsDriverEntry@8
dein einsprungpunkt heisst aber 'DriverEntry'
vielleicht isses das?
-
Also habe grad mal "DriverEntry" in "GsDriverEntry" geändert und neu kompiliert aber es bringt leider nichts...
-
als erstes musste mal feststellen, ob deine 'DriverEntry' überhaupt angesprungen wird. damit z.b: http://www.microsoft.com/technet/sysinternals/utilities/debugview.mspx
einen 'DbgPrint' aufruf hast du ja schon drin...

-
Undertaker schrieb:
als erstes musste mal feststellen, ob deine 'DriverEntry' überhaupt angesprungen wird. damit z.b: http://www.microsoft.com/technet/sysinternals/utilities/debugview.mspx
einen 'DbgPrint' aufruf hast du ja schon drin...

Mit DebugView seh ich leider nichts weil ich den Treiber ja nicht testen kann.
Die Installation funktioniert noch ohne Probleme. Ich nehme an ich muss die .sys-Datei zum installieren auswählen.
Falls nicht klärt mich bitte auf
-
artificial schrieb:
Ich nehme an ich muss die .sys-Datei zum installieren auswählen.
der treiber muss selbstverständlich geladen werden

probier's damit: http://www.codeproject.com/system/tdriver.asp
falls das auch nicht geht, könnte ein übler hack helfen: du kannst den treiber in dein /%systemroot%/drivers verzeichnis kopieren und dann umbenennen, so dass er z.b. den namen eines nicht benutzten usb-devices hat, dann das usb-device reinstecken und der treiber müsste geladen werden...
-
Auch mit diesem Programm bekomme ich nur die Meldung:
Error. I can't load the driver.Also muss entweder im Code oder beim build was schief gelaufen sein...
-
da ist irgendwo der wurm drin

probier's doch mal zum anfang damit: http://tiger.la.asu.edu/Quick_Ref/DeviceDriver.pdf
vergleich' auch mal die DriverEntry mit deiner und mach den 'build' und die installation des DDK wie dort beschrieben...
und das: http://www.codeproject.com/system/driverdev.asp
könnteste auch mal lesen.
