Hallo Tobias,
On Fri, Sep 13, 2002 at 11:05:42PM +0200, Tobias Koenig wrote:
On Fri, Sep 13, 2002 at 10:09:03PM +0200, Andreas Kretschmer wrote:
Dummerweise ist die besagte CAD-Software DOS-basiert, wegen der Dongel-Abfrage. Nur deswegen,
Die Dongle-Abfrage kann doch aber auch ohne DOS gemacht werden. Das Programm muss dann als root laufen (bzw. nur der folgende code)
#define PORT 0x378
ioperm( PORT, 3, 1 ); // Zugriff auf Port 0x378 und die 2 folgenden erlaubt int byte = inb( PORT ); if ( byte != dongleWert ) return; ioperm( PORT, 3, 0 );
Ganz so bloed sind die Dongle-Hersteller heute nicht mehr. Das duerfte mittlerweile in einer Art Challenge-Response-Dialog zwischen Programm und Dongle ablaufen.
K?nntest du dass dem Entwickler nicht mal nahebringen? Du musst ihm ja nicht sagen, das man im Kernel die 'inb()' methode so umbiegen kann, das sie immer den entsprechenden DongleWert liefert, auch wenn gar kein Dongle drann h?ngt ;)
inb() im Kernel umbiegen hilft gar nichts, da durch ioperm() dem Programm der direkte Zugriff auf die Ports (also die Nutzung der Maschinenbefehle) erlaubt wird. Wenn schon, dann ioperm() simulieren und den GPF-Handler intelligent verbiegen. Dann hast Du immer noch die Schwierigkeit, die Antworten des Dongles auf die verschieden Fragen des Programms vorauszusagen (s.o.). Das Timing sollte noch unkritisch sein, wenn das Programm fuer DOSen konzipiert ist.
Ausserdem hat besagter Programmierer moeglicherweise keinen Einfluss auf die Abfrage, die kommt sicher vom Dongle-Hersteller in einer Bibliothek daher.
Und wer will schon einem derart kompliziertes Programm wie CAD-Software Root-Rechte geben, wenn man nicht mal die Quellen einsehen kann?
Gruss
Holger