Ein Verstorbener hat mir einen MSDOS PC hinterlassen, auf dem viele Software Werkzeuge zum Schreiben von Programmen bzw. Konfigurieren von alten Steuerungen installiert sind. Die installierte Basis ist dabei MSDOS 6.22. Ich bin jetzt auf ein Programm "spindu.exe" gestoßen, das im Wesentlichen gut funktioniert. Lediglich eine Funktion, nämlich der Aufruf der Dateiübersicht der abgespeicherten Konfigurationen antwortet mit "falsche DOS Version". Jetzt habe ich spindu.exe auf einem anderen PC mit MSDOS 5.00 gestartet. Darauf funktioniert auch dieser Teil des Programmes. Danach habe ich auf dem anderen PC spindu.exe mit MSDOS 6.22 gestartet. Per "setver" Befehl habe ich das Programm "spindu.exe" mit 5.00" eingetragen. Wenn ich "setver" eingebe, bekomme ich eine Liste an deren Ende "spindu.exe 5.00" steht. Dennoch kommt in spindu.exe an der bewussten Stelle die Meldung "falsche DOS Version". Habe ich setver korrekt angewendet? Hätte mit setver 5.00 das "falsche DOS Version" verschwinden müssen? Theoretisch könnte ich das Programm spindu.exe auf einen separaten MSDOS 5.00 PC umziehen, was ich aber vermeiden möchte. Kann ich sonst noch etwas tun, um es unter 6.22 zum Laufen zu bekommen? Unter installiertem 6.0 läuft es auch nicht.
Besorg dir eine Liste der BIOS/DOS-Calls. Such den entsprechenden Call (DOSVER) in deinem Programm. Sorge dafuer, dass das Programm gluecklich ist!
supergrobi schrieb: > Besorg dir eine Liste der BIOS/DOS-Calls. > > Such den entsprechenden Call (DOSVER) in deinem Programm. > > Sorge dafuer, dass das Programm gluecklich ist! Meinst Du, dass ich im Quelltext von spindu.exe arbeiten soll? Den habe ich nicht.
Was macht denn "spindu.exe" so interessantes, daß man sich ein Vierteljahrhundert nach dem Ableben von DOS noch damit beschäftigen will?
Das "B4 30 CD 21" findet man im Hexdump bestimmt schneller als im Quelltext. AH=30h - GET DOS VERSION Das folgende Beratungsmuster wurde auch gluecklich gemacht und verweigerte danach nicht mehr die Kooperation mit seiner Meinung nach falschen Versionen...
1 | X:\>ver |
2 | |
3 | Microsoft Windows XP [Version 5.1.2600] |
4 | |
5 | X:\>netx |
6 | |
7 | NetWare Workstation Shell v3.32 (940524) PTF |
8 | (C) Copyright 1994 Novell, Inc. All Rights Reserved. |
9 | Patent Pending. |
10 | |
11 | Running on DOS V6.99 |
12 | |
13 | SHELL-332-23: IPX has not been loaded. Please load and then run the shell. |
supergrobi schrieb: > Besorg dir eine Liste der BIOS/DOS-Calls. > > Such den entsprechenden Call (DOSVER) in deinem Programm. >>> Rufus Τ. F. schrieb: >>> Setver ist auch in der config.sys eingetragen? >> Kevin Lars schrieb: >> Ja Damit ist klar, dass das nicht helfen kann, denn ziemlich genau das ist ja die Aufgabe von setver, einen Interceptor für diesen Call für dieses Programm zu installieren. Der wirkt aber offensichtlich nicht, ergo: dieses ominöse "spindu.exe" benutzt eben nicht diesen call, um die DOS-Version zu ermitteln. (oder liefert im schlimmsten Fall überhaupt eine Fehlermeldung, die mit seinem tatsächlichen Problem rein garnix zu schaffen hat). Ich würde aber mal stark darauf tippen, dass das eine "behavioral"-Geschichte ist. Sprich: das Programm will irgendwas machen, was so unter DOS6.22 nicht geht (aber unter DOS5) und zieht DARAUS den Schluss, dass es nicht unter DOS5 läuft. D.h.: es gibt überhaupt keinen expliziten Aufruf von DOSVER. Dann kann man diesen natürlich auch nicht patchen oder mit dosver überlisten. Lösen kann man das Problem natürlich mit Assembler nach einer lustigen Disassemblerorgie. Man stellt als erstes fest, wo das Programm diese Fehlermeldung generiert. Dann: wie kommt es zu dieser Stelle. Bis hierhin ist das alles noch relativ einfach. Aber dann wird's kompliziert: man muss verstehen, was das Programm eigentlich zu tun versucht und woran das dann unter DOS6.22 letztlich scheitert. Hat man das verstanden, wird's wieder einfacher: man schreibt Code, der das Gewünschte unter DOS6.22 leisten kann und patched das in den Originalcode...
1. Kannst du die spindu.exe irgendwo hoch laden dann jage ich die mal durch meinen IDA dissassembler, vielleicht laesst sich das wirklich leicht patchen 2. Was macht das Programm denn genau, Hardware Kommunikation? 3. Hast du mal FreeDos probiert?
So steinalte Programme nehmen entweder selbst oder per dazugelinkter Runtimelibrary die Funktion 30h von DOS. Die ganze Uebung reduziert sich dann darauf. nach den oben schon genannten Hexcodes zu suchen und entweder die weitere Auswertung "totzulegen" oder ihr einen geeigneten Wert unterzuschieben. Dazu brauchte man damals nicht mal IDA... (Heute natuerlich auch nicht.) Die Versionsabfrage war eher ein staendiger laufender Verkaufsmotor, um den Kunden scheinbar "neue" Software andrehen zu koennen.
Rufus Τ. F. schrieb: > Was macht denn "spindu.exe" so interessantes, daß man sich ein > Vierteljahrhundert nach dem Ableben von DOS noch damit beschäftigen > will? Beispiel: Es gibt eine Stadtbahnlinie (U79) zwischen den Nachbarstädten Düsseldorf und Duisburg, die an den Endpunkten in beiden Innenstädten unterirdisch fährt. Unterirdisch geht heutzutage nichts ohne Computer. Diese Steuerung ist veraltet. Die Leute, die sich damit auskennen, sind eigentlich schon in Rente oder gar gestorben. Da Duisburg anders als Düsseldorf nicht das Geld hatte, um eine neue Steuerung zu kaufen, drohte die Stilllegung ab Stadtgrenze.[1] Man wirft also ein Stück Ubahn weg, weil die Steuerung veraltet ist. Dabei ist die "Peripherie" des Computers also die eigentliche Ubahn noch gut in Schuss. Für U-bahnen gäbe es aber wenigstens neue Steuerungen, die dann aber mitsamt aller Sensoren und Aktoren entlang der Strecke und in den Bahnen ausgetauscht werden muss. Fast immer ist die Software und oft auch die Hardware proprietär. Häufig hat man eine technische Einrichtung mit fertigen PCs als Blackbox mitsamt aufgespieltem ausführbaren Programm (z.B. *.exe) geliefert bekommen und muss sich in vielen Fällen sogar um die Sicherung desselben bemühen, also die Festplatte imagen oder Eproms oder Microcontroller auslesen. Anders als bei der Ubahn gibt es neue Steuerungen für viele technische Einrichtungen nicht. Und ohne exakte Kenntnis jedes einzelnen kleinen Mechanismus und des Anwendungsprozesses kann man auch keine neue bauen bzw. programmieren. Häufig ist aber nur bekannt, wie sie bedient wird. Genau so, wie in einem Haushalt niemand weiß, wie ein elektronisches Klavier (z.B. die Anschlagdynamik) aufgebaut ist. Bedienen also Spielen kann man es trotzdem. Über den politischen Aspekt, dass der Neubau vieler Verkehrsinfrastrukturprojekte gefördert wird, nicht aber deren Unterhaltung (z. B. jede Menge marode Brücken in Deutschlands Kommunen) wollen wir hier nicht diskutieren. Ein Aspekt, sich damit zu beschäftigen ist es, diese alte Technik am Laufen zu halten. Bei sehr speziellen Ausnahmefällen kann es sogar sein, dass neuere Technik schlicht nicht existiert und noch MSDOS Technik (oder aus der Vorcomputerzeit) gebraucht gesucht und gekauft wird. Es muss sich erst mal eine Firma finden, die den Aufwand einer Neuentwicklung wagt und finanziert. Oft ist schlicht deutlich günstiger, das Alte weiter zu betreiben, als eine Neuentwicklung. Ich habe eine Klinker- und eine Bürstenfabrik gesehen, wo man sich wie im Museum fühlt. Da stehen teilweise rein mechanische Steuerungen mit Kurvenscheiben und gekröpften Wellen. Das hat natürlich auch einen nachhaltigen Aspekt und lässt sich offensichtlich so wirtschaftlich betreiben. Dieser Nachteil hat aber auch eine positive Seite. Man kann Elemente solcher einstmals unerschwinglichen Steuerungen oder unbrauchbar gewordene technische Einrichtungen heute günstig bei ebay also auch privat kaufen. (U-bahnen habe ich allerdings noch nicht gesehen. ;-) Da kommt für viele Nerds der Hackeraspekt zum Tragen, so etwas zu ergründen. Beispielsweise Fabs können sich so manche Dinge (z.B. Drehbänke und Fräsen) überhaupt erst leisten und dann durch Selbstbau die Steuerung ersetzen oder überhaupt erst computerisieren. Man findet im Internet viele Projekte, wo alte mechanische ursprünglich industrielle Technik in privaten Garagen steht. Letztendlich ist "spindu" nur ein Beispiel aus vielen (proprietären) Softwarewerkzeugen auf dem besprochenen PC, mit denen man solche alten Maschinen konfigurieren oder mit einer eigenen Programmiersprache programmieren kann. Auch die besprochene Ubahn könnte über solche Werkzeuge verfügen. Das Problem ist bei technischen Einrichtungen aus der Vorcomputerzeit nicht so ausgeprägt. Denn da gibt es keine unsichtbare Programmierung. Man kann aus den Leiterbahnen und den ICs den Schaltplan reengineeren. So etwas ist besser wartbar. Alte ICs gibt es meist noch auf ebay. Die meisten Datenblätter sind gescannt. Das Problem kam also mit den Computern. Das Problem bei Spindu ist nicht so gravierend. Denn man kann sich die Dateiliste auch auf dem Umweg über MSDOS anschauen. Da das aber nicht multitaskenderweise geht, ist es umständlich. Es wäre schön gewesen, wenn sich das mit Setver oder ähnlich hätte lösen lassen. Es ist aber kein Weltuntergang, wenn es nicht geht. [1] https://de.wikipedia.org/wiki/D%C3%BCsseldorf-Duisburger_Kleinbahn#Zukunft
> Beispiel: Es gibt eine Stadtbahnlinie (U79) zwischen den > Nachbarstädten Düsseldorf und Duisburg, ... > Dabei ist die "Peripherie" des Computers also die eigentliche > Ubahn noch gut in Schuss. Und DIE passt wenigstens auch in jeden Bahnhof: ;-) https://rp-online.de/nrw/staedte/duesseldorf/duesseldorf-neue-fahrzeuge-der-rheinbahn-zu-breit_aid-33545139
> der Hackeraspekt
SETVER ist fuer Warmduscher und wie man sieht ja auch erfolglos.
Das Wegpatchen der Versionsabfrage eigentlich nur eine
Fingeruebung.
Wenn dich das alte Zeug fasziniert, solltest du deine
Methoden mal ueberdenken.
Hallo Kevin Lars, Dein letzter Eintrag ist sehr interessant. Mich würde aber Folgendes interessieren: 1. Was macht das Programm spindu.exe genau? 2. Welche Unterschiede gibt es in der autoexec.bat zwischen den Installationen MSDOS 5.0 und MSDOS 6.x (bitte genau vergleichen!)? 3. Welche Unterschiede gibt es in der config.sys zwischen den Installationen MSDOS 5.0 und MSDOS 6.x (bitte genau vergleichen!)? 4. Falls autoexec.bat und config.sys von MSDOS 5.0 auf MSDOS 6.x weitestgehend übertragbar sein sollte, was ist das Ergebnis? 5. Wieviel RAM ist in beiden Maschinen verbaut? 6. Startest Du das Programm direkt in MSDOS oder in der Windows-Command Shell (DOS-Box)? Mit der Bitte um Antworten!
Kevin Lars schrieb: > Rufus Τ. F. schrieb: >> Was macht denn "spindu.exe" so interessantes, daß man sich ein >> Vierteljahrhundert nach dem Ableben von DOS noch damit beschäftigen >> will? > > Beispiel: Es gibt eine Stadtbahnlinie (U79) zwischen den Nachbarstädten > Düsseldorf und Duisburg, die an den Endpunkten in beiden Innenstädten > unterirdisch fährt. Unterirdisch geht heutzutage nichts ohne Computer. > Diese Steuerung ist veraltet. Die Leute, die sich damit auskennen, sind > eigentlich schon in Rente oder gar gestorben. Da Duisburg anders als > Düsseldorf nicht das Geld hatte, um eine neue Steuerung zu kaufen, > drohte die Stilllegung ab Stadtgrenze.[1] Naja, über das Thema Duisburg und Ubahn schweigen wir lieber: https://www.ksta.de/region/rheinbahn-duesseldorf-neue-strassenbahn-zu-breit-fuer-duisburger-u-bahn-tunnel-31408636
>Es ist aber kein Weltuntergang, wenn es nicht geht.
Du laesst es uns ja nicht weitergehend probieren - siehe meine Fragen,
auf die du nicht geantwortet hast
auch Fragen von anderen sind noch offen
Ich finde deine Strategie gut und habe schon ein paar kleinere Dos
Programmen für sowas wieder zum Leben verholfen oder Nachbauten (ohne
Quelltext zu haben) erstellt
Kopiere dochmal die COMMAND.COM des DOS 5.0 auf den 6.22-PC und führe es dort aus mit spindu.exe als Argument. Ich hab auch viele uralte DOS-Programm auf modernen PCs unter DOSBox zum Laufen gebracht. Sogar die COM1..4 laufen dort wieder (über USB-Umsetzer). https://www.dosbox.com/
:
Bearbeitet durch User
supergrobi schrieb: > Das "B4 30 CD 21" findet man im Hexdump bestimmt schneller > als im Quelltext. > > AH=30h - GET DOS VERSION es muss ja nicht sein, dass das AH Register direkt vor dem CALL geladen wird.. ich würde erst mal nach CD 21 suchen und dann was davor passiert es gibt auch noch sowas Ab DOS 5.00 lässt sich die „wirkliche” Versionsnummer mit einer Untervariante der Funktion 33h abfragen: Aufruf: AH=33 AL=06 Untervariante „Get Version” Return: AL=FF Fehler, diese Funktion wird nicht unterstützt AL=06 diese Funktion wird unterstützt. Dann gilt: BL= DOS-Version BH= Revision DX=Bitflag Bits 0,1,2 Revisionsnummer im Bereich 0 bis 7 Bit 11 1=ROM-Version von DOS Bit 12 1=DOS ist im HMA-Bereich geladens:
:
Bearbeitet durch User
WR schrieb: > Was macht das Programm spindu.exe genau? Es sind wie gesagt mehrere Programme auf dem PC. Spindu ist nur eines von vielen. Es sind Programme zum Konfigurieren von Motorsteuerungen, Mischautometen, Klimakammern, Türsteuerungen, Uhren, Verkaufsautometen, Maschinen zur Herstellung von Wicklungen für Motoren und Trafos etc. sowie diverse SPS Programmierumgebungen. Bei einigen muss ich noch ergründen, wozu sie dienen. Das wird sich hoffentlich spätestens dann herausstellen, wenn die zugehörigen Geräte ausfallen oder geändert werden müssen. Wenn das nie der Fall sein wird, werden diese überhaupt nicht mehr laufen müssen. Es gibt also viel dringendere Probleme zu lösen, als das Setver. Wenn ich spindu auf MSDOS 5.0 draufsetze, funktioniert es korrekt. Aber es ist dann nicht gesagt, dass die anderen Programme dann noch funktionieren. Da diese wie gesagt, teilweise noch nie probiert werden konnten, belasse ich es bei dem oben beschriebenen Workaround. Das Andere folgt, wenn ich mal ganz viel Zeit haben sollte ...... Es steht jetzt ins Haus, die Programme mit geklärtem Zweck auf neueren Rechnern zum Laufen zu bekommen. Das größte Problem ist dabei vermutlich, die COM Schnittstellen zu den Geräten ans Laufen zu bekommen. Freedos, Dosbox und Virtualbox sind die Kandidaten.
Kevin Lars schrieb: > Es gibt also viel dringendere Probleme zu lösen, als das Setver. Wenn > ich spindu auf MSDOS 5.0 draufsetze, funktioniert es korrekt. Aber es > ist dann nicht gesagt, dass die anderen Programme dann noch > funktionieren. Da diese wie gesagt, teilweise noch nie probiert werden > konnten, belasse ich es bei dem oben beschriebenen Workaround. Das > Andere folgt, wenn ich mal ganz viel Zeit haben sollte ...... Früher wurde manchmal ziemlich häßlich programmiert (BTDT), da könnten auch Systemdateien zur Prüfung gelesen worden sein oder bestimmte DOS-Funktionen auf bestimmte Rückgabewerte (zwecks Unterstützung bestimmter Features) aufgerufen werden. Da heute Festplattenplatz extrem billig ist: mach dir doch einfach ein Multiboot-System, auf dem du DOS 3.3, 4.0, 5.0 und 6.22 installierst. Dann kannst du die alten Programme jeweils zum passenden OS packen. Ein Bootmenü sollte sich auch noch finden lassen (notfalls nimmt man dafür ein kleines Linux, um das über grub zu lösen).
Beitrag #5641305 wurde von einem Moderator gelöscht.
Kevin Lars schrieb: > Theoretisch könnte ich das Programm spindu.exe auf einen separaten MSDOS > 5.00 PC umziehen, was ich aber vermeiden möchte. Kann ich sonst noch > etwas tun, um es unter 6.22 zum Laufen zu bekommen? Unter installiertem > 6.0 läuft es auch nicht. Warum willst du es auf MS-DOS 6.x umstellen? MS-DOS 6.x bietet jetzt nicht so viel neues gegenüber MS-DOS 5.x dass man MS-DOS 6.x unbedingt braucht. MS-DOS 6.x bietet weder fat32 noch kann es mit langen Dateinahmen umgehen. Das kam alles erst mit MS-DOS 7 bzw. Win95 bzw. Win95b. c-hater schrieb: > Lösen kann man das Problem natürlich mit Assembler nach einer lustigen > Disassemblerorgie. Man stellt als erstes fest, wo das Programm diese > Fehlermeldung generiert. Dann: wie kommt es zu dieser Stelle. Bis > hierhin ist das alles noch relativ einfach. Aber dann wird's > kompliziert: man muss verstehen, was das Programm eigentlich zu tun > versucht und woran das dann unter DOS6.22 letztlich scheitert. Hypothese: Diese Funktion könnte eine bloße Arbeitssicherungsmaßnahme gewesen sein. Damit der Entwickler wieder den Job kriegt, wenn das Betriebssystem irgendwann mal gewechselt und auf neue Systeme umgestellt wird. Wenn dem so ist, dann macht die Funktion gar nichts außer zu prüfen, ob das eine alte DOS Version ist. Das geht schon in dem man einen kleinen Bytestrom des DOS Kernels einliest, daraus einen Hash bildet und den Hash mit dem zu erwartenden Hash vergleicht. Ist der dann nicht identisch, dann ist es die falsche DOS Version. Der Trick würde also in dem Fall also darin bestehen einfach die Sprunganweisung zu ändern. Im Prinzip ist das wie beim Cracken eines Kopierschutzes. Letzten Endes will man ja nicht wissen, was das Programm bei der Überprüfung macht, sondern was es danach macht, wenn die Prüfung erfolgreich war. Wenn das Programm für eine U-Bahn eingesetzt wurde, dann könnten aber auch rechtliche Gründe der Grund sein warum man die DOS Version abfragt. Denn das Programm wurde nur für eine bestimmte DOS Version spezifiziert und darauf umfangreich geprüft. Aus Haftungsfragen könnte der Hersteller also ein Interesse daran gehabt haben, dass das Programm den Dienst verweigert, wenn es nicht das System, für welches es spezifiziert wurde, vorfindet. Will man setver überlisten, dann geht das wie oben beschrieben. Wenn das Programm die DOS Version nur anhand der msdos.sys Datei auf dem Datenträger überprüft und nicht an dem Kernel, der tatsächlich in den Speicher geladen wurde, dann könnte man auch versuchen dem Programm einfach die Datei eines alten Kernels unterzuschieben, während der neue Kernel im Speicher läuft. Versuch dazu mal die Dateien einfach mal umzukopieren. Wenn der neue Kernel geladen ist, die Datei des neuen Kernel nach msdos.bac umkopieren und dann den alten Kernel nach msdos.sys kopieren. Danach das Programm starten. Wenn die Funktion dann läuft, dann wird nur die Kerneldatei überprüft.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.