Hilfe
Könnte mir mal jemand mit kleinen Worten erklären, was ein Hook ist
Mir ist nur der Hook aus "Peter Pan" ein Begriff - denkt doch auch mal an die Unwissenden hier im Forum
Hilfe
Könnte mir mal jemand mit kleinen Worten erklären, was ein Hook ist
Mir ist nur der Hook aus "Peter Pan" ein Begriff - denkt doch auch mal an die Unwissenden hier im Forum
Wer für den Test AntiVir nicht gleich deinstallieren möchte, kann den Rechner im abgesicherten Modus hochfahren, regedit starten, den Schlüssel
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\avipbb
aufrufen und dort den Eintrag ImagePath von
System32\DRIVERS\avipbb.sys
in
;System32\DRIVERS\avipbb.sys
ändern und rebooten.
Zum Aktivieren von avipbb.sys einfach das Semikolon wieder entfernen und nochmals rebooten.
Man sieht dann zweifelsfrei, wer das Chaos verursacht.
Zitat von horsthorn;693941Hilfe
Könnte mir mal jemand mit kleinen Worten erklären, was ein Hook ist
Du kennst eine DLL? Um eine Funktion in einer DLL aufzurufen, gibts du unter anderem einen Funktionsnamen an. Im "Kopf" der DLL befindet sich ein Bereich, in dem diesen Funktionsnamen Adressen in der DLL zugeordnet sind, die dann aufgerufen werden. Ändert man diese zugeordnete Adresse, kann man den Funktionsaufruf auf eigenen Code umleiten (hier tut AntiVir das mit OpenProcess), um die Funktion anders reagieren zu lassen, als sie das normalerweise tut oder auch Parameter abzufangen (hier PROCESS_DUP_HANDLE oder $40). Diese Technik wird unter anderem von Firewalls, Virenscannern und RootKits verwendet.
Das Fehlverhalten liegt an AntiVir. Wo es trotz AntiVir geht, dürfte das eine zeitweise Sache sein - einfach mal rebooten. Sollte das nicht der Fall sein, ist mit großer Sicherheit der alte Treiber noch installiert (bitte dann die Versionsnummer des Treibers mit angeben).
Da ich hier einen Bugfix erreichen möchte (es gehen, wie gesagt, einige Sicherheitstechniken zusammen mit AntiVir nicht mehr), wäre es schön, wenn noch einige testen könnten und meine Ergebnisse bestätigen.
Die Dateiversion des Treibers ist bei mit 1.00.2.65, Produktversion 8.00.00.00..
Hab in Vorbereitung für meine Fehlermeldung an Avira hier den Quelltext als EXE hochgeladen, die sich unter Vista gleich die nötigen Adminrechte verschafft.
Habe die Test-EXE etwas erweitert. Es wird nun auch angezeigt, ob der AntiVir Hook installiert wurde. Die Ergebnisse werden in einem Edit angezeigt und lassen sich über einen Rechtsklick in die Zwischenablage kopieren - das dürfte den Test vereinfachen.
Def GetWindowThreadProcessId(2) !"USER32","GetWindowThreadProcessId"
Def GetLastError(0) !"kernel32", "GetLastError"
Def SetLastError(1) !"kernel32", "SetLastError"
DeF OpenProcess(3) !"KERNEL32", "OpenProcess"
Def CloseHandle(1) !"KERNEL32", "CloseHandle"
DEF LookupPrivilegeValue(3) !"advapi32", "LookupPrivilegeValueA" 'LUID (8-Byte Registrierungszahl) von Privileg erhalten
DEF AdjustTokenPrivileges(6) !"advapi32", "AdjustTokenPrivileges" 'Privilegien einstellen
DEF OpenProcessToken(3) !"advapi32", "OpenProcessToken" 'Tokenhandle öffnen
DEF CopyMemory(3) !"kernel32", "RtlMoveMemory" 'kopiert einen Speicherbereich
DEF GetCurrentProcess(0) !"KERNEL32", "GetCurrentProcess" 'Handle auf den aktuellen Prozess holen
Def CreateToolhelp32Snapshot(2) !"Kernel32", "CreateToolhelp32Snapshot"
Def Process32First(2) !"Kernel32", "Process32First"
Def Process32Next(2) !"Kernel32", "Process32Next"
Declare CSRSS_ID&, PHandle&, Fehler&, TOKEN_PRIVILEGES#, LUID#
Declare Entry#, err&, handle&, cpid&, text$, text2$, Filename#
Declare EditText$, MultiEdit&
Struct PROCESSENTRY32=dwSize&, \
cntUsage&, \
th32ProcessID&, \
th32DefaultHeapID&, \
th32ModuleID&, \
Threads&, \
th32ParentProcessID&, \
pcPriClassBase&, \
dwFlags&, \
szExeFile$(260)
Windowstyle 31
WindowTitle "ID von CSRSS ermitteln und Prozesshandle mit PROCESS_DUP_HANDLE öffnen"
Window 0, 0 - 640, 440
Set_Privilege_Status "SeDebugPrivilege",$2
LET MultiEdit& = @CreateMultiEdit(%HWND, "", 20, 20, 580, 300)
@SendMessage(MultiEdit&,207,1,0) 'ReadOnly
GetWindowThreadProcessId(%Desktop, addr(CSRSS_ID&))
Clear PHandle&, EditText$
Dim Entry#, PROCESSENTRY32
Entry#.dwSize& = SizeOf(Entry#)
handle& = CreateToolhelp32Snapshot(2, 0)
If handle&
err& = Process32First(handle&, Entry#)
If err&
text2$ = Entry#.szExeFile$
IF Upper$(text2$) = "AVGUARD.EXE"
Clear PHandle&
PHandle& = OpenProcess($1, 0, Entry#.th32ProcessID&)
IF PHandle& > 0
EditText$ = EditText$ + "AntiVir OpenProcess-Hook ist nicht installiert!" + "\n"
Settext MultiEdit& , EditText$
Closehandle(PHandle&)
Else
EditText$ = EditText$ + "AntiVir OpenProcess-Hook ist installiert!" + "\n"
Settext MultiEdit& , EditText$
endif
endif
Repeat
err& = Process32Next(handle&, Entry#)
If err&
text2$ = Entry#.szExeFile$
Clear PHandle&
IF Upper$(text2$) = "AVGUARD.EXE"
Clear PHandle&
PHandle& = OpenProcess($1, 0, Entry#.th32ProcessID&)
IF PHandle& > 0
EditText$ = EditText$ + "AntiVir OpenProcess-Hook ist nicht installiert!" + "\n"
Settext MultiEdit& , EditText$
Closehandle(PHandle&)
Else
EditText$ = EditText$ + "AntiVir OpenProcess-Hook ist installiert!" + "\n"
Settext MultiEdit& , EditText$
endif
endif
EndIf
Until err& = 0
CloseHandle(handle&)
EndIf
EndIf
Dispose Entry#
EditText$ =EditText$ + "ID des Subsystems meines Desktops: " + Str$(CSRSS_ID&) + "\n"
Settext MultiEdit& , EditText$
Clear PHandle&
SetLastError(0)
PHandle& = OpenProcess($40, 0, CSRSS_ID&)
Fehler& = GetLastError()
IF PHandle& <> 0
EditText$ = EditText$ + "Das Öffnen des Handles auf CSRSS war erfolgreich!" + "\n"
Settext MultiEdit& , EditText$
CloseHandle(PHANDLE&)
Else
EditText$ = EditText$ + "Es konnte kein Handle auf CSRSS geöffnet werden!" + "\n"
Settext MultiEdit& , EditText$
EditText$ = EditText$ + "Fehlercode beim Öffnen des Handles auf CSRSS: " + Str$(Fehler&) + "\n"
Settext MultiEdit& , EditText$
endif
While 1
Waitinput
wend
Proc Set_Privilege_Status
Parameters Privilege_name$, Aktive&
Declare NewState&, AH_Token_Handle&, LU_SYSTEM$
DIM TOKEN_PRIVILEGES#, 16
DIM LUID#, 8
Clear LUID#, LU_SYSTEM$
LookupPrivilegeValue(ADDR(LU_SYSTEM$), ADDR(Privilege_name$), LUID#)
CLEAR AH_Token_Handle&
LET FEHLER& = OpenProcessToken(GetCurrentProcess(), $20, ADDR(AH_Token_Handle&))
LONG TOKEN_PRIVILEGES#, 0 = 1
LET NewState& = TOKEN_PRIVILEGES#
CopyMemory(NewState& + 4, LUID#, 8)
LET NewState& = Aktive&
Clear Aktive&
IF or(NewState&, $2) = NewState&
LET Aktive& = or(AKTIVE&, $2)
Endif
IF @or(NewState&, $80000000) = NewState&
LET Aktive& = or(AKTIVE&, $80000000)
Endif
LONG TOKEN_PRIVILEGES#, 12 = Aktive&
LET FEHLER& = AdjustTokenPrivileges(AH_Token_Handle&, 0, TOKEN_PRIVILEGES#, 0, 0, 0)
If AH_TOKEN_Handle& <> 0
CLOSEHANDLE(AH_Token_Handle&)
endif
Dispose TOKEN_PRIVILEGES#
Dispose LUID#
endproc
Alles anzeigen
Der Quelltext ist mit Adminrechten auszuführen!
AntiVir OpenProcess-Hook ist nicht installiert!
ID des Subsystems meines Desktops: 620
Das Öffnen des Handles auf CSRSS war erfolgreich!
Treiberversion: 1.0.2.65 (vom 12.04)
Avira-Produktversion: 9.0.0.387
Avira-Guard ist aktiv
Betriebssystem: Vista Ultimate (64Bit)
Habe den PC auch schon neu gestartet: Gleiches Ergebnis
Getestet mit Vista SP1 und Antivir9.
Ergebniss nach Reboot :
ZitatAntiVir OpenProcess-Hook ist installiert!
ID des Subsystems meines Desktops: 748
Es konnte kein Handle auf CSRSS geöffnet werden!
Fehlercode beim Öffnen des Handles auf CSRSS: 5
Das selbe Ergebnis bei XP SP2 und Antivir9.
Danke! Ich denke, das ist jetzt deutlich genug.
Habe die Sache mal hier gemeldet.
Ist der OpenProcess Hook von AntiVir 9 installiert, läuft OpenProcess für CSRSS.EXE mit $40 schief.
Zitat von AHT;694079Danke! Ich denke, das ist jetzt deutlich genug.
Habe die Sache mal hier gemeldet.Ist der OpenProcess Hook von AntiVir 9 installiert, läuft OpenProcess für CSRSS.EXE mit $40 schief.
Das tritt aber scheinbar nur bei XProfan -> %DESKTOP auf ?
Wenn ich das Desktophandle per API ermittle oder stattdessen %hwnd nehme, dann funktioniert es.
Zitat von Andreas Miethe;694081
Du hast das falsche Fenster - überprüfe das Handle!
Kommst du nicht auf die ID von CSRSS.EXE, haut die Funktion natürlich hin.
Zur Info:
CSRSS.EXE enthält ein Handle auf alle offenen Prozesse (ideal für einfaches RootKit Scanning - wird schon jahrelang dafür von Usermode Scannern verwendet). AntiVir will hier verhindern, dass ein gültiges Handle auf avguard erlangt werden kann, indem avipbb.sys das Auslesen der Handles verhindert, denn avguard könnte über ein solches Handle beendet werden. Avira hat hier aber bei dem Hook einen entscheidenen Fehler gemacht (siehe Zombinator), der die ganze Sache überhaupt nicht richtig funktionieren lässt.
Einziger Effekt von Aviras "Schutzaktion": Einige Sicherheitsprogramme gehen nicht mehr.
Alles klar !
So, es tut sich schon mal was:
Zitat
...die Angelegenheit wurde bereits intern berichtet, mal schauen was Avira sagen wird.
Erfahrungswert: Das wird "unter der Hand" ohne weitere Rückmeldung geregelt. Bin gespannt, in welcher Art und Weise das geschieht und was die an "avipbb.sys" ändern werden (und wann).
Die Anführungszeichen stehen hier, weil (wenn sich die Technik von Avira bislang nicht geändert hat) im Prinzip nicht avipbb.sys diese Macke produziert, sondern das versteckte Stück Code, das avipbb.sys in den Kernel injiziert.
Desweiteren sollte man wohl beachten, das AntiVir nicht nur OpenProcess hookt. Falls Interesse besteht, gehe ich etwas näher auf die Technik ein, die AntiVir hier genau verwendet. Es kann ja sein, dass es auch bei den anderen Hooks zu Problemen kommen kann.
Hat sich der Test somit also erledigt?
Zitat von Frabbing;695453Hat sich der Test somit also erledigt?
Ja, haben schon andere übernommen. AntiVir baut da definitiv Mist.
Wäre ja nicht das erste Mal...
Zitat von Frabbing;695521Wäre ja nicht das erste Mal...
Ich glaub, die kennen mich da schon.
Das Problem ist diesmal ja eher kleiner.
Hab von Avira schon mal die Bestätigung bekommen, dass das an AntiVirs Prozessschutz liegt. Ich habe im Augenblick aber den Eindruck, dass die dort nichts mehr freischalten, sondern eher noch was sperren werden :-).
Hab den Queltext und die EXE nochmals angepasst, ich kann dann besser testen, wann Avira da was ändert und was sich da genau tut:
Def GetWindowThreadProcessId(2) !"USER32","GetWindowThreadProcessId"
Def GetLastError(0) !"kernel32", "GetLastError"
Def SetLastError(1) !"kernel32", "SetLastError"
DeF OpenProcess(3) !"KERNEL32", "OpenProcess"
Def CloseHandle(1) !"KERNEL32", "CloseHandle"
DEF LookupPrivilegeValue(3) !"advapi32", "LookupPrivilegeValueA" 'LUID (8-Byte Registrierungszahl) von Privileg erhalten
DEF AdjustTokenPrivileges(6) !"advapi32", "AdjustTokenPrivileges" 'Privilegien einstellen
DEF OpenProcessToken(3) !"advapi32", "OpenProcessToken" 'Tokenhandle öffnen
DEF CopyMemory(3) !"kernel32", "RtlMoveMemory" 'kopiert einen Speicherbereich
DEF GetCurrentProcess(0) !"KERNEL32", "GetCurrentProcess" 'Handle auf den aktuellen Prozess holen
Def CreateToolhelp32Snapshot(2) !"Kernel32", "CreateToolhelp32Snapshot"
Def Process32First(2) !"Kernel32", "Process32First"
Def Process32Next(2) !"Kernel32", "Process32Next"
Declare CSRSS_ID&, PHandle&, Fehler&, TOKEN_PRIVILEGES#, LUID#
Declare Entry#, err&, handle&, cpid&, text$, text2$, Filename#
Declare EditText$, MultiEdit&
Struct PROCESSENTRY32=dwSize&, \
cntUsage&, \
th32ProcessID&, \
th32DefaultHeapID&, \
th32ModuleID&, \
Threads&, \
th32ParentProcessID&, \
pcPriClassBase&, \
dwFlags&, \
szExeFile$(260)
Windowstyle 31
WindowTitle "ID von CSRSS ermitteln und Prozesshandle mit PROCESS_DUP_HANDLE öffnen"
Window 0, 0 - 640, 440
Set_Privilege_Status "SeDebugPrivilege",$2
LET MultiEdit& = @CreateMultiEdit(%HWND, "", 20, 20, 580, 300)
@SendMessage(MultiEdit&,207,1,0) 'ReadOnly
GetWindowThreadProcessId(%Desktop, addr(CSRSS_ID&))
Clear PHandle&, EditText$
Dim Entry#, PROCESSENTRY32
Entry#.dwSize& = SizeOf(Entry#)
handle& = CreateToolhelp32Snapshot(2, 0)
If handle&
err& = Process32First(handle&, Entry#)
If err&
text2$ = Entry#.szExeFile$
IF Upper$(text2$) = "AVGUARD.EXE"
Clear PHandle&
PHandle& = OpenProcess($1, 0, Entry#.th32ProcessID&)
IF PHandle& > 0
EditText$ = EditText$ + "AntiVir OpenProcess-Hook ist nicht installiert!" + "\n"
Settext MultiEdit& , EditText$
Closehandle(PHandle&)
Else
EditText$ = EditText$ + "AntiVir OpenProcess-Hook ist installiert!" + "\n"
Settext MultiEdit& , EditText$
endif
endif
Repeat
err& = Process32Next(handle&, Entry#)
If err&
text2$ = Entry#.szExeFile$
Clear PHandle&
IF Upper$(text2$) = "AVGUARD.EXE"
Clear PHandle&
PHandle& = OpenProcess($1, 0, Entry#.th32ProcessID&)
IF PHandle& > 0
EditText$ = EditText$ + "AntiVir OpenProcess-Hook ist nicht installiert!" + "\n"
Settext MultiEdit& , EditText$
Closehandle(PHandle&)
Else
EditText$ = EditText$ + "AntiVir OpenProcess-Hook ist installiert!" + "\n"
Settext MultiEdit& , EditText$
endif
endif
EndIf
Until err& = 0
CloseHandle(handle&)
EndIf
EndIf
Dispose Entry#
EditText$ =EditText$ + "ID des Subsystems meines Desktops: " + Str$(CSRSS_ID&) + "\n"
Settext MultiEdit& , EditText$
Clear PHandle&
SetLastError(0)
PHandle& = OpenProcess($40, 0, CSRSS_ID&)
Fehler& = GetLastError()
EditText$ = EditText$ + "\n" + "OpenProcess mit Flag PROCESS_DUP_HANDLE:"+"\n"
Settext MultiEdit& , EditText$
IF PHandle& <> 0
EditText$ = EditText$ + "Das Öffnen des Handles auf CSRSS war erfolgreich!" + "\n"
Settext MultiEdit& , EditText$
CloseHandle(PHANDLE&)
Else
EditText$ = EditText$ + "Es konnte kein Handle auf CSRSS geöffnet werden!" + "\n"
Settext MultiEdit& , EditText$
EditText$ = EditText$ + "Fehlercode beim Öffnen des Handles auf CSRSS: " + Str$(Fehler&) + "\n"
Settext MultiEdit& , EditText$
endif
Clear PHandle&
SetLastError(0)
PHandle& = OpenProcess($2000000, 0, CSRSS_ID&)
EditText$ = EditText$ + "\n" + "OpenProcess mit Flag MAXIMUM_ALLOWED:" + "\n"
Settext MultiEdit& , EditText$
IF PHandle& <> 0
EditText$ = EditText$ + "Das Öffnen des Handles auf CSRSS war erfolgreich!" + "\n"
Settext MultiEdit& , EditText$
CloseHandle(PHANDLE&)
Else
EditText$ = EditText$ + "Es konnte kein Handle auf CSRSS geöffnet werden!" + "\n"
Settext MultiEdit& , EditText$
EditText$ = EditText$ + "Fehlercode beim Öffnen des Handles auf CSRSS: " + Str$(Fehler&) + "\n"
Settext MultiEdit& , EditText$
endif
While 1
Waitinput
wend
Proc Set_Privilege_Status
Parameters Privilege_name$, Aktive&
Declare NewState&, AH_Token_Handle&, LU_SYSTEM$
DIM TOKEN_PRIVILEGES#, 16
DIM LUID#, 8
Clear LUID#, LU_SYSTEM$
LookupPrivilegeValue(ADDR(LU_SYSTEM$), ADDR(Privilege_name$), LUID#)
CLEAR AH_Token_Handle&
LET FEHLER& = OpenProcessToken(GetCurrentProcess(), $20, ADDR(AH_Token_Handle&))
LONG TOKEN_PRIVILEGES#, 0 = 1
LET NewState& = TOKEN_PRIVILEGES#
CopyMemory(NewState& + 4, LUID#, 8)
LET NewState& = Aktive&
Clear Aktive&
IF or(NewState&, $2) = NewState&
LET Aktive& = or(AKTIVE&, $2)
Endif
IF @or(NewState&, $80000000) = NewState&
LET Aktive& = or(AKTIVE&, $80000000)
Endif
LONG TOKEN_PRIVILEGES#, 12 = Aktive&
LET FEHLER& = AdjustTokenPrivileges(AH_Token_Handle&, 0, TOKEN_PRIVILEGES#, 0, 0, 0)
If AH_TOKEN_Handle& <> 0
CLOSEHANDLE(AH_Token_Handle&)
endif
Dispose TOKEN_PRIVILEGES#
Dispose LUID#
endproc
Alles anzeigen
Sollte ich vielleicht mal ein Proggie schreiben, das nach Bestätigung durch den User trotz des "Schutzs" alle AntiVir Prozesse beendet und das im Avira Forum vorstellen? ...oder lieber doch nicht?
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!