PROXYDLL && 0xc0000142



  • Hallo Leute,

    zur besseren Analyse einer Dll habe ich ein proxyDll nach (http://www.codeproject.com/Articles/16541/Create-your-Proxy-DLLs-automatically) geschrieben. Bisher hatte ich positive Erfahrungen mit dieser Vorgehensweise sammeln können, jedoch scheint das Ganze diesmal nicht zu funktionieren, da nach dem Start der Steuerungssoftware, welche die Dll importiert, die Fehlermeldung „0xc0000142“ kommt.

    Laut: „http://msdn.microsoft.com/en-us/library/cc704588(v=prot.20).aspx“ bedeutet dies: {DLL Initialization Failed} Initialization of the dynamic link library %hs failed. The process is terminating abnormally.

    Grundsätzliches Ziel der Dll-Analyse ist, dass die besagte Steuerungssoftware statt der originalen Hardware eine andere Hardware bedienen können soll, wofür noch eine entsprechende AdapterDll konstruiert werden müsste. Auf dem Weg dorthin, versuche ich zu verstehen, wie die Daten aus der originalen Hardware von und zu der Steuerungssoftware gelangen.

    Vielleicht gibt es ja eine Möglichkeit, die Steuerungssoftware doch dazu zu bringen, die ProxyDll zu akzeptieren. U. a. habe ich schon folgende Vorgehensweise (http://blog.kalmbach-software.de/de/2008/03/05/wie-man-statisch-gegen-die-c-runtime-crt-linkt/) ohne Erfolg ausprobiert.

    MfG.



  • Von welcher DLL kommt denn diese Fehlermldung?
    Hast Du es schon mal mit Debuggen versucht?
    Debug mal in die DllMain rein, dort wird ein Fehler zurückgeliefert...



  • Hallo Jochen,
    vielen Dank für Deine Antwort- die Situation ist folgende:

    Die Steuerungssoftware (winXP Anwendung) importiert neben vielen anderen Dll’s auch eine „XYZ_engine.dll“ . Laut IDA enthält die Importsektion der „XYZ_engine.dll“ Funktionen aus den Dll’s: Gerät1_treiber.dll, Gerät2_treiber.dll und Gerät3_treiber.dll. Folglich schlussfolgere ich, dass XYZ_engine.dll die Dll’s: Gerät1_treiber.dll, Gerät2_treiber.dll und Gerät3_treiber.dll importiert.

    Gerät1_treiber.dll initialisiert das Gerät1, dessen Interface mit der Steuersoftware mich interessiert, da ich es gern durch ein anderes Gerät ersetzen möchte. Aus meinen bisherigen Analysen kenne ich alle Funktionen sowie deren Parameter und Rückgabewerte aus dieser Dll.Mit einer Testsoftware versuche ich erstmal die Hardware zu initialisieren, um die Bedeutung der Parameter zu verstehen - hat bisher allerdings noch nicht richtig funktioniert.

    Wahrscheinlich wird von XYZ_engine.dll irgendetwas an Gerät1_treiber.dll übergeben, dass ich noch nicht nachbauen kann. Ich erhoffe mir, durch Analyse der Funktionen aus „XYZ_engine.dll“ weiterführenden Hinweise. Prinzipiell wird eine entsprechende ProxyDll beim Start der Steuersoftware geladen – sofern ich die Bezeichnung der vom ProxyDll exportierten Funktionen verfälsche, produziert die Steuerungssoftware eine Fehlermeldung, dass genau diese Funktion fehlt. Wird alles korrekt exportiert, erhalte ich die Fehlermeldung:0xc0000142
    Vielleicht sind irgendwelche Sicherheitsschranken eingebaut, die mir hier den Weg versperren.

    In der ProxyDll ist erstmal nichts außer dem Code aus:(http://www.codeproject.com/Articles/16541/Create-your-Proxy-DLLs-automatically) enthalten.

    Dein Hinweis, in die XYZ_engine.dll hinein zu debuggen klingt interessant. Ich habe den Debugger bisher nur im Zusammenhang mit Breakpoints verwendet. Kannst Du mir eventuell ein passendes Stichwort liefern, über das ich zu Informationen gelange, die mir sagen, wie ich in eine Dll „hineindebuggen“ kann ? (Ich habe allerdings nicht den Quellcode dieser Dll.)

    MfG



  • Mit IDA Pro kann man schön debuggen, auch mit WinDbg...
    Mit VS kannst Du beim Debuggen mit Ctrl-F11 den Assembler-Code anschauen und dann auch mit F11 reindebuggen...

    Ich verstehe allerdings nicht, warum Du Dich nicht mit dem Hersteller in Verbindung setzt; das ist im endeffekt vermutlich günstiger... und auch legaler...


Anmelden zum Antworten