System-Meldungen "hooken" (IP address conflict, file or directory is corrupt)



  • Also ich würde das System gerne dazu bringen statt die Meldung anzuzeigen irgendwas von mir aufzurufen/auszuführen

    Der Kernel von Windows erstellt im Falle solcher Fehler System-Threads, auf die der Zugriff aus dem Benutzermodus kläglich scheitern wird. Man müsste daher den Kernelcode direkt ändern, was mit der WinAPI natürlich ebenfalls unmöglich ist und ohnehin auf jedem Rechner als Virus abgestempelt wird.

    Der Benutzer kann Windows über eine als "System Call" bezeichnete Schnittstelle und einem damit verbundenen Index für die sogenannte "Interrupt Descriptor Table" kontaktieren, wobei im Kernel anhand dieser Informationen den entsprechenden Code ausführt. Auch wenn eine Datei (also ein Kernelobjekt) erstellt wird, ist damit stets ein Index verbunden.

    Nun kann es passieren, dass während der Ausführung des Codes zur Erstellung des Kernelobjektes ein Fehler auftritt. Windows regiert darauf, indem z.B die von dir beschriebenen Meldungen angezeigt werden.

    Die Manipulierung des Kernelcodes geht schon sehr stark in Richtung Rookits und erfordert mitunter beste Kentnisse zur Erstellung von Softwaretreibern.

    Auf Windows XP ist die Basisadresse der IDT für Core 0 immer 0x8003F400. Da die Indexer aller entsprechenden Handler sich von System zu System unterscheiden habe ich eine vollständige Liste für alle Windows-Betriebssysteme erstellt. Ein paar weitere Informationen durch Reverse Engineering wirst du allerdings auch dann immer noch benötigen.

    Wenn du die Aufgabe wichtig ist,- und sauber erledigt werden muss,- kannst du mich auf Wunsch per E-Mail für die Liste und Code zur Handledumping der IDT kontaktieren.



  • Gibt es eine Möglichkeit in Windows diverse System-Meldungen zu "hooken"? Also ich würde das System gerne dazu bringen statt die Meldung anzuzeigen irgendwas von mir aufzurufen/auszuführen. Also z.B. eine eigene DLL Funktion oder auch eine .exe rausstarten.
    Einfach nur einen Eventlog Eintrag Schreiben wäre auch eine akzeptable Lösung - dann müssten wir halt das Eventlog überwachen.

    Auf Windows XP ist das durch Techniken wie "API Hooking" ohne weiteres möglich ;). Anhand deiner Anforderung entnehme ich jetzt einfach mal, dass du die nötigen Kenntnisse im Umgang mit der WinAPI hast. Der Ablauf gestaltet sich dann etwa so:

    [] Lokalisiere die Adresse der Zielfunktion (z.B CreateFileW; Kernel32.dll)
    [
    ] Sichere ein paar der ersten Funktionsbytes
    [] Überschreibe die ermittelten Bytes etwa mit einer JUMP Anwendung (Assemblerbefehl) unter Angabe deiner Ersatzfunktion. Die von dir aufzurufende Funktion muss dabei dieselben Parameter, dieselbe Aufrufskonvention und denselben Rückgabetyp haben!
    [
    ] Wenn jetzt CreateFileW von irgendeinem Thread aufgerufen wird führt Windows automatisch den JUMP-Befehl aus und springt damit zu deiner Funktion

    Der Mechanismus sollte natürlich auch wieder Rückgängig gemacht werden, darauf aber genauer einzugehen wäre jetzt overkill zumal du dazu eigentlich gute Tutorials finden kannst.



  • Hähnchenkeule schrieb:

    ... Auf Windows XP ist das durch Techniken wie "API Hooking" ohne weiteres möglich 😉 ...

    LOL, find ich schon witzig, hustbaer so triviale Tipps zu geben 😃



  • @TopKek

    TopKek schrieb:

    Nun kann es passieren, dass während der Ausführung des Codes zur Erstellung des Kernelobjektes ein Fehler auftritt. Windows regiert darauf, indem z.B die von dir beschriebenen Meldungen angezeigt werden.

    Ich weiss nicht was du genau mit "Kernelobjekt" meinst, aber die beiden Fehler haben nichts damit zu tun dass ein IRP nicht erstellt werden könnte.
    Der eine kommt - vermutlich - wenn das File System vom Mass Storage Treiber einen Lesefehler gemeldet bekommt.
    Und der andere, naja gut wann ein "IP address conflict" gemeldet wird sollte klar sein.

    Was dein Angebot angeht: falls dazu ein Rumspielen im/Patchen des Kernel notwendig sein sollte, dann werde ich lieber die Finger davon lassen. Den Aufwand ist es dann doch nicht wert. Trotzdem danke.

    @Hähnchenkeule
    Ja, hooking wäre vermutlich ne gute Idee. Nur welche Funktion?
    Was die "IP address conflict" Meldung angeht liesse sich das vermutlich noch relativ leicht feststellen, da diese sehr einfach zu reproduzieren ist.
    Zumindest wenn, wie ich hoffe, der Thread dem dieses Fenster gehört nicht zum "System" Prozess gehört.

    Aber was die "file corrupt" Meldung angeht bin ich einigermassen ratlos, da ich nicht weiss wie ich diese provozieren kann.
    Eine Möglichkeit an die ich gedacht hatte wäre nen USB Stick zu opfern (einfach immer wieder den selben Block überschreiben, dann sollte der Block nach ein paar tausend Schreibzugriffen hin sein).
    Dummerweise haben billige USB Stick, also die bei denen man davon ausgehen kann dass sie kein Wear-Leveling haben, auch keine brauchbare Fehlererkennung. Und liefern dann beim Lesen von kaputten Flash Blöcken einfach einen Block voll mit 0xFF zurück statt einen Fehler ans OS zu melden.



  • @Mechanics
    Ach was, ich bin für Tips durchaus dankbar.
    Meine Kenntnisse was diverse Techniken angeht die man grob in die Ecke "Hacking" stecken kann sind doch sehr begrenzt. (Oder sagen wir besser meine Erfahrung, theoretische Kenntnisse sind z.T. vorhanden.)

    Nur müsste ich halt wie gesagt wissen welche Funktion man hooken müsste.

    Natürlich könnte man es einfach mal mit "MessageBoxW" probieren.

    Allerdings hatte ich gehofft dass es hier eine API bzw. einen Mechanismus von Windows gibt wo man sich etwas "offizieller" einklinken kann.
    So wie man bei Windows z.B., wenn man WER nicht verwenden will, einfach über ein paar Registry Keys einen Post-Mortem Debugger registrieren kann um Application Crashes zu behandeln.



  • EOP schrieb:

    Hab schon ganz schräge dll-injections bei crackmes gesehen.
    Mal mit ollydbg nach strings suchen?

    IDA geht auch:
    http://www.chip.de/downloads/IDA-Pro-Free-Letzte-Freeware-Version_29744270.html

    Die Idee nach Strings zu suchen ist mir auch schon gekommen. Hab' ich dann allerdings wieder verworfen, da Windows Strings üblicherweise in Resourcen speichert. Und mich da so weit mit nem Disassembler reinzukämpfen dass ich Stellen finden würde wo auf bestimmte Resourcen zugegriffen wird... der Aufwand steht einfach nicht dafür.

    Das ganze ist nicht SO wichtig.
    Es wäre gut wenn es mit relativ geringem Aufwand ginge, aber es ist nicht wirklich sehr wichtig. Wie ich Mechanics gerade schon geantwortet habe hatte ich einfach gehofft dass es da einen Punkt gibt wo man sich ohne grossen Aufwand einhängen kann.

    ps: Gerade weil MS ja immer wieder Embedded Varianten von Windows macht, und auf Embedded Systems könnte es ja durchaus interessant sein solche Dinge programmatisch zu erfassen und evtl. auch die Message Box zu unterdrücken (oder durch eine eigene Meldung zu ersetzen). Von daher die Hoffnung dass es da einen mehr oder weniger offiziellen Weg gibt.



  • hustbaer schrieb:

    Aber was die "file corrupt" Meldung angeht bin ich einigermassen ratlos, da ich nicht weiss wie ich diese provozieren kann.
    Eine Möglichkeit an die ich gedacht hatte wäre nen USB Stick zu opfern (einfach immer wieder den selben Block überschreiben, dann sollte der Block nach ein paar tausend Schreibzugriffen hin sein).
    Dummerweise haben billige USB Stick, also die bei denen man davon ausgehen kann dass sie kein Wear-Leveling haben, auch keine brauchbare Fehlererkennung. Und liefern dann beim Lesen von kaputten Flash Blöcken einfach einen Block voll mit 0xFF zurück statt einen Fehler ans OS zu melden.

    Keine Ahnung ob dir das was hilft, aber laut Microsoft (How do I prevent files from becoming corrupted?) passiert das üblicherweise nur während dem speichern?

    Also vielleicht einfach eine sehr große Datei speichern (die halt lange für den Speichervorgang braucht) und währenddessen den Stecker ziehen. Ka ob das funktioniert, aber dabei dürfte (bis auf die Datei) zumindest nichts kaputt gehen 😃



  • hola

    wenn bei diesen systemfehlern auch logs in der ereignisanzeige erstellt werden, dann koenntest du dich zu mindest da mal reinhaengen.
    hier sowas in der art auf codeproject: http://www.codeproject.com/Articles/4857/A-realtime-event-log-monitoring-tool

    Meep Meep



  • @happystudent
    Da geht's um eine andere Definition von "corrputed files".
    Ich meine welche wo Windows den von mir zitierten Dialog bringt, und der kommt AFAIK nur wenn die Disk einen Lesefehler meldet.

    In dem von dir beschriebenen Artikel geht's einfach um Files mit blödsinnigem Inhalt (die aber von der Disk noch korrekt gelesen werden können). Wie man diese erzeugt ist mir schon klar, bringt mir nur nix.

    @Meep Meep
    Ja, wenn du mir sagst wie & wo ich das umstellen kann so dass die Meldung selbst dann nicht mehr angezeigt wird...

    hustbaer schrieb:

    Einfach nur einen Eventlog Eintrag Schreiben wäre auch eine akzeptable Lösung - dann müssten wir halt das Eventlog überwachen.



  • die idee dahinter war jetzt nicht die message zu unterdruecken,
    sondern das du ei einem bestimmen ereigniss dann was starten kannst.
    naja bissl am thema vorbei 🙂

    Meep Meep



  • Meep Meep schrieb:

    die idee dahinter war jetzt nicht die message zu unterdruecken

    Das ist aber leider das was ich brauche 😉
    Ich will ja nicht zusätzlich 'was anzeigen sondern die Message ersetzen.



  • Kannst du den Fehler bzw. die Meldungen denn reproduzieren wann du willst? Dann könntest du dich eventuell mal mit Ollydebug einklinken und dir den Callstack anzeigen lassen wenn die Nachricht angezeigt wird. Vielleicht hast du ja Glück und da findet sich eine Funktion die du hooken kannst. Brauchst aber eventuell Debugsymbole und wirklich wenig Aufwand ist auch das nicht. 😕
    Was für eine Meldung wird denn ausgegeben? MessageBox oder was anderes?
    Zumindest wäre das gerade das einzige was mir zu dem Thema einfällt.



  • Die Symbole müsste man eigentlich schon bekommen... Müsste eigentlich WinDbg reichen.



  • @DarkShadow44

    DarkShadow44 schrieb:

    Kannst du den Fehler bzw. die Meldungen denn reproduzieren wann du willst?

    Naja eben nicht, das ist ja u.A. das Problem 😉

    hustbaer schrieb:

    @TopKekJa, hooking wäre vermutlich ne gute Idee. Nur welche Funktion?
    Was die "IP address conflict" Meldung angeht liesse sich das vermutlich noch relativ leicht feststellen, da diese sehr einfach zu reproduzieren ist.
    Zumindest wenn, wie ich hoffe, der Thread dem dieses Fenster gehört nicht zum "System" Prozess gehört.

    Aber was die "file corrupt" Meldung angeht bin ich einigermassen ratlos, da ich nicht weiss wie ich diese provozieren kann. (...)

    Und ja, Symbols sind kein Problem -- sind ja über den MS Symbol-Server verfügbar.



  • Diese Funktionalität steht bei den Embedded-Windows-Versionen zur Verfügung:
    Meldung automatisch wegklicken:
    XP: https://msdn.microsoft.com/en-us/library/aa940743(v=winembedded.5).aspx
    WES7: https://msdn.microsoft.com/en-us/library/ff794009(v=winembedded.60).aspx

    Eigene Aktion ausführen bei MessageBox:
    WES7: https://msdn.microsoft.com/en-US/library/ff794863(v=winembedded.60).aspx
    Ob es das bei XP auch schon gibt, weiss ich nicht.



  • Für WES7 werden wir uns vermutlich den Dialog Box Filter mal genauer ansehen.

    Die bei XP verfügbare Option ist aber als Werkzeug leider viel zu breit/stumpf, da wir nicht einfach alle Messageboxen automatisiert wegklicken lassen können.

    Trotzdem danke! 🙂



  • Meep Meeps idee war doch garnicht so schlecht

    Wenn man die Dateien im Prozess kennt kann man diese auch am ausführen hindern, oder denke ich da zu einfach?

    ansonsten:
    Windows: Problem- und Fehlerberichte abschalten
    http://praxistipps.chip.de/windows-problem-und-fehlerberichte-abschalten_27141

    Start -> Einstellungen -> Systemsteuerung -> System -> Erweitert -> Fehlerberichterstattung

    Gehe stark davon aus, dass bis zu einem "gewissen" Punkt, im System, das Gleiche passiert. Da ansetzen..



  • essio schrieb:

    Meep Meeps idee war doch garnicht so schlecht

    Wenn man die Dateien im Prozess kennt kann man diese auch am ausführen hindern, oder denke ich da zu einfach?

    Was für Dateien? Ich hab keine Ahnung wovon du sprichst.

    essio schrieb:

    ansonsten:
    Windows: Problem- und Fehlerberichte abschalten
    http://praxistipps.chip.de/windows-problem-und-fehlerberichte-abschalten_27141

    Start -> Einstellungen -> Systemsteuerung -> System -> Erweitert -> Fehlerberichterstattung

    Gehe stark davon aus, dass bis zu einem "gewissen" Punkt, im System, das Gleiche passiert. Da ansetzen..

    Dass man WER (Windows Error Reporting) konfigurieren kann weiss ich. Bringt mir aber nix, da die von mir erwähnten Meldungen keine Crashes sind.



  • Mh siehst du den Prozess im Taskmanager? Wenn ja dann kannst du mal in die datei reinschauen bzw nach Zusammenhang checken..
    Falls der Prozess zu schnell geht um ihn zuzuordnen kannst du auch deinen Desktop aufnehmen.
    Sobald du die Datei hast, kannst du im netz gucken welcher Struktur sie folgt.

    Zwar sehr theoretisch ich weiß, so gehe ich auch ungefähr bei viren etc vor..
    Habe mal bei freunden ausgeholfen wenn sie Probleme hatten 🙄



  • http://www.youtube.com/watch?v=kJcuFwVMzH4
    Erster Fehler wird so verursacht, siehe link.

    2er Fähler ist etwas komplexer, denke aber dass du den Grund des Auftretens hier finden kannst.

    ...................

    the theoretical possibilities of Event ID 55 error messages. In exact 
    experience, there some possibilities caused such issue: 
    1. Purely file corruption. In most time, it was caused by some inconsistent 
    operation on file system. Eg, when disk is in reading/writing status, an 
    unexpected reboot was triggered.

    2. Microsoft known issue at NTFS.sys. The latest hotfix is 913034.

    3. H/W issue. (Some H/W components that connected to the disk. Eg. SCSI 
    controller.)

    Dated driver/firmware of the disk controller
    --Incorrect hardware configuration (For example, disk write back caching, 
    and so on)
    --Bad hardware (Disk controller and disk drive)
    --Third-party application running in the background. For example, 
    Anti-Virus software (Symantec anti-virus version 8, etc., Quota Software 
    (StorageCeNTral 4.1, QuotaAdvisor 4.1, etc.), Quest Consolidator, Power 
    Path driver, backup exec and so on.


Anmelden zum Antworten