Re: Sandbox erkennen [Ideen gesucht]
Verfasst: 13.06.2010 03:45
.
Code: Alles auswählen
EnableExplicit
Procedure.i IsSandboxieInjected()
Protected.i Lib
Lib = OpenLibrary(#PB_Any, "SbieDLLX.dll")
CloseLibrary(Lib)
If Lib <> 0
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure.i IsHooked(Module.s, Function.s)
Protected Lib.i
Protected *FuncAddr.Ascii
Lib = OpenLibrary(#PB_Any, Module)
*FuncAddr = GetFunction(Lib, Function)
CloseLibrary(Lib)
If *FuncAddr <> 0
If *FuncAddr\a = $E9
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndIf
EndProcedure
If IsHooked("Ntdll.dll", "NtCreateFile") = #True
MessageRequester("Hook Test", "NtCreateFile is hooked.")
EndIf
If IsSandboxieInjected() = #True
MessageRequester("Sandboxie Injected Test", "Sandboxie is injected.")
EndIf
Dies Überprüft jedoch nur, ob die DLL vorhanden ist, aber nicht ob man sich gerade in einer SandBox befindet. Ich denke nicht das er Kunden verbieten will Sandboxie installiert zu haben. Außerdem schlägt der Test bei mir fehl, da sich die DLL bei mir in einem anderen Verzeichniss befindet. Fakt ist, das die DLL auch nicht in den Process geladen wird, es ist also auf diese Methode NICHT möglich herauszufinden ob man sich in einer SandBox befindet.Thorium hat geschrieben:Code: Alles auswählen
EnableExplicit Procedure.i IsSandboxieInjected() Protected.i Lib Lib = OpenLibrary(#PB_Any, "SbieDLLX.dll") CloseLibrary(Lib) If Lib <> 0 ProcedureReturn #True Else ProcedureReturn #False EndIf EndProcedure
Hier haben wir das andere von mir erwähnte Problem:Thorium hat geschrieben:Code: Alles auswählen
Procedure.i IsHooked(Module.s, Function.s) Protected Lib.i Protected *FuncAddr.Ascii Lib = OpenLibrary(#PB_Any, Module) *FuncAddr = GetFunction(Lib, Function) CloseLibrary(Lib) If *FuncAddr <> 0 If *FuncAddr\a = $E9 ProcedureReturn #True Else ProcedureReturn #False EndIf EndIf EndProcedure
Nein, du hast den Code falsch verstanden, es prüft ob die DLL in den Prozess geladen ist (injiziert wurde). Und das ist nur der Fall, wenn das Programm unter Sandboxie läuft, kannst es ja ausprobieren.Dark hat geschrieben: Dies Überprüft jedoch nur, ob die DLL vorhanden ist, aber nicht ob man sich gerade in einer SandBox befindet. Ich denke nicht das er Kunden verbieten will Sandboxie installiert zu haben. Außerdem schlägt der Test bei mir fehl, da sich die DLL bei mir in einem anderen Verzeichniss befindet. Fakt ist, das die DLL auch nicht in den Process geladen wird, es ist also auf diese Methode NICHT möglich herauszufinden ob man sich in einer SandBox befindet.
Ja richtig. Ich hab ja geschrieben das es eine generische Prozedur ist. Damit muss man halt rummspielen bis man ne gute Kombination hat aus Prozeduren die getestet werden. Ein false positive ist bei generischen Prozeduren immer möglich.Dark hat geschrieben: Hier haben wir das andere von mir erwähnte Problem:
Hook: JA!, Sanxbox? : Keine Ahnung
Ein Hook bedeutet ja nicht gleich das vorliegen einer Sandbox. Es ist nur EVENTUELL möglich, das man sich in einer Sandbox befindet.
Um zu überprüfen ob eine DLL in einem Proces geladen ist musst duhttp://msdn.microsoft.com/en-us/library/ms684175%28VS.85%29.aspx hat geschrieben: LoadLibrary Function
Loads the specified module into the address space of the calling process. The specified module may cause other modules to be loaded.
Code: Alles auswählen
Lib = GetModuleHandle_("SbieDLLX.dll")
^^Dark hat geschrieben:Hallo,
OpenLibrary() ist keine Überprüfung ob sich eine DLL in einem Process befindet, sondern ruft intern nur die Windows API LoadLibrary_() auf. Diese lädt eine DLL in einen Prozess rein, egal ob diese vorher schon im Process geladen ist oder nicht. Siehe MSDN: http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Um zu überprüfen ob eine DLL in einem Proces geladen ist musst duhttp://msdn.microsoft.com/en-us/library/ms684175%28VS.85%29.aspx hat geschrieben: LoadLibrary Function
Loads the specified module into the address space of the calling process. The specified module may cause other modules to be loaded.verwenden.Code: Alles auswählen
Lib = GetModuleHandle_("SbieDLLX.dll")
Dies schlägt aber Fehl, da keine DLL in den Process geladen wird.
mfg,
DarkPlayer
Ist Sandboxie aber installiert und befindet sich die DLL im Windows Verzeichniss, lädt er die DLL und du behauptest das Programm lief in einer Sandbox. Deshalb sollte man lieber den Befehl verwenden den ich geschrieben habe, da dieser es wirklich nur erkennt wenn die DLL auch im Prozess geladen ist. Das Sandboxie installiert ist, sollte ja nicht ein Grund sein die Ausführung des Programms zu verhindern.Thorium hat geschrieben: ^^
Ist die DLL bereits geladen, gibt die Prozedur den Handle der DLL zurück und schlägt nicht fehl.
Ist die nicht bereits geladen und kann auch nicht geladen werden, so schlägt sie fehl. Da sie sich weder im Systemverzeichnis noch im Programmverzeichnis befindet kann sie nicht geladen werden.