Ich habe versucht, die DLL-Datei "bcryptprimitives.dll" (die in meinem Fall ursprünglich sitzt unter "C: \ Windows \ syswow64 \ bcryptprimitives.dll") von einem anderen Ort, mit diesem Code-snippet:STATUS_INVALID_IMAGE_HASH (0xc0000428) auf gültige PE-Dateien
LoadLibraryW(L"<altered path>\\bcryptprimitives.dll");
jedoch direkt nach dieser Zeile Code ausführen bekomme ich folgende Fehlermeldung:
C: \ Program Files (x86) \ Notepad ++ \ bcryptprimitives.dll ist entweder nicht entworfen, um unter Windows zu laufen, oder es enthält einen Fehler. Versuchen Sie, das Programm erneut auf dem ursprünglichen Installationsmedium zu installieren, oder wenden Sie sich an den Systemadministrator oder den Softwarehersteller, um Unterstützung zu erhalten. Fehlerstatus 0xc0000428.
Ich suchte den 0xc0000428 NTSTATUS im folgenden Wörterbuch: https://msdn.microsoft.com/en-us/library/cc704588.aspx und anscheinend dieser Status bedeutet STATUS_INVALID_IMAGE_HASH
.
Der Fehler zuerst macht Sinn, weil ich das "LoaderFlags" -Feld in der Image-PE-Header von 0x00000000 zu 0x00000001 geändert hat (was nichts zu beeinflussen hat, weil dieses Feld veraltet ist), aber obwohl ich geändert habe Feld, reparierte ich die PE-Prüfsumme.
jedoch Loadlibrary weigert sich immer noch die DLL zu laden. Tauchen tief in ntdll
zeigt, dass der Fehler von Kernel zurückgegeben:
Es lässt mich denken, dass die DLL irgendwie unterzeichnet und die Kernel überprüft, ob die DLL geändert wurde. Also zu meinem Punkt, wie kann ich diese DLL sowieso von einem anderen Ort laden und die Zeichenprüfung entfernen?
Warum fühlen Sie sich verpflichtet, dies zu tun? Wäre es nicht einfacher, sich an das System anzupassen, anstatt es zu unterlaufen? –
@DavidHeffernan, das ist der ganze Spaß daran. Ich arbeite in einem Unternehmen, das einzigartige Sicherheitslösungen entwickelt, die nur durch Subversion des Systems implementiert werden können. – Aviv
Riecht wie Malware –