-
Die
vorliegende Erfindung betrifft das Laden von Software.
-
Bei
modernen Computersystemen wird die Anwendungssoftware üblicherweise
in einem externen Speicher (wie beispielsweise einer Festplatte und
dergleichen) gespeichert, wenn sie nicht benötigt wird. Die Anwendungssoftware
wird in den Hauptspeicher (RAM) geladen, wenn sie zur Ausführung aufgerufen
wird.
-
Die
internationale Patentanmeldung WO 98/08163 A beschreibt ein Verfahren
und eine Vorrichtung zum selektiven Steuern von Teilen eines ankommenden
Datenstroms von einer externen Quelle zu einer ausgewählten Stelle,
an der Programmbestandteile in dem ankommenden Datenstrom übersetzt
und ausgeführt
werden können.
Dies verringert die Korruption oder die Beschädigung von Daten oder Programmen,
die in einem Endanwender-Computersystemnetzwerk
gehalten werden, durch mobile Programmbestandteile, die aus einer
externen Quelle in das System importiert werden. Es wird auch beschrieben,
dass diese Anordnungen erlauben, dass große Programmbestandteile in
dem ankommenden Datenstrom übersetzt
und auf einem spezifischen Server ausgeführt werden und somit die Belastung der
Prozessoren in dem stromabwärtigen
Endanwender-Computersystem verringern. Das System ist so beschrieben,
dass es den Bedarf an großer
Verarbeitungskapazität
einzelner Terminals in dem stromabwärtigen System verringert.
-
Das
Verfahren des Ladens der Software aus dem externen Speicher in den
Hauptspeicher wird durch ein als „Ladevorrichtung" bezeichnetes Programm
gesteuert.
-
Zusätzlich zum
Installieren der Anwendungssoftware kann eine Ladevorrichtung verschiedene andere
Operationen ausführen.
Einige dieser Operationen können
die Initialisierung verschiedener Daten, Register oder dergleichen
umfassen, wie es für die
Anwendungssoftware erforderlich ist. Andere Operationen können die
Sicherheit betreffen, wie beispielsweise die Überprüfung der Lizenzierungsdetails,
die im System enthalten sind.
-
In
jüngerer
Zeit sind Bemühungen
unternommen worden, diese Sicherheitsüberprüfungen zu umgehen, um zu erlauben,
dass unlizenzierte Kopien der Software verwendet werden. Eine Art,
die Sicherheit zu umgehen, ist als „Reinlegen der Ladevorrichtung" bekannt. Ein Softwarestück, ähnlich einem
Reparaturprogramm, wird verwendet, um eine Ausführung der Ladevorrichtung Schritt-für-Schritt
zu erlauben, während
eine jede Anweisung in der Ladevorrichtung analysiert wird und Sprunganweisungen oder
Patches eingeführt
werden, wenn Anweisungen nachgewiesen werden, die nach einer Sicherheitsüberprüfung verlangen.
Entsprechend kann die Ladevorrichtung veranlasst werden, ihre Ausführung zu beenden,
ohne Sicherheitsüberprüfungen vorgenommen
zu haben, wodurch erlaubt wird, dass die Sicherheit umgangen wird.
-
Gemäß der vorliegenden
Erfindung wird eine Software-Ladevorrichtungsanordnung bereitgestellt, die
so betreibbar ist, dass ein Computerprogramm aus einem externen
Speicher in eine zugeteilte Region des Hauptspeichers zur Ausführung geladen
wird, wobei die Anordnung eine Vielzahl von Softwaremodulen und
ein Koordinatormodul aufweist, das, bei der Anwendung, an eine zuvor
bestimmte Stelle der zugeteilten Region geladen wird und betreibbar
ist, um die Ausführung
des oder eines jeden anderen Moduls zu koordinieren, und wenigstens
ein Ladevorrichtungsmodul betreibbar ist, um wenigstens einen Teil
der Ladeoperation durchzuführen,
wobei das Koordinatormodul weiter betreibbar ist, um das oder ein
jegliches Ladevorrichtungsmodul zur Ausführung aus der Anfangsspeicherstelle
des Ladevorrichtungsmoduls in eine temporäre Speicherstelle zu schreiben,
um die Ausführung
des Moduls zu initiieren, und um nach der Ausführung das Modul aus der temporären Speicherstelle
zu löschen.
-
Bevorzugterweise
sind mehrere Ladevorrichtungsmodule enthalten, die entsprechende
Teile der Ladeoperation vorsehen. Die mehreren Ladevorrichtungsmodule
werden bevorzugterweise der Reihe nach in temporäre Speicherstellen geschrieben. Ein
jedes Ladevorrichtungsmodul ist bevorzugterweise ausgewählt aus
einer Gruppe von Modulen, wobei Module einer jeden Gruppe Anweisungssequenzen umfassen,
die in einem jeden Modul verschieden sind und die dasselbe Ergebnis
erreichen, wenn sie vollständig
ausgeführt
sind.
-
Bevorzugterweise
ist ein Ladevorrichtungsteil der zugeteilten Region für Ladevorrichtungsoperationen
bestimmt, wobei sich die oder eine jede temporäre Speicherstelle innerhalb
des besagten Ladevorrichtungsteils befindet. Die oder eine jede
Ladevorrichtung befindet sich bevorzugterweise anfänglich außerhalb
des besagten Ladevorrichtungsteils. Ein Programmteil der zugeteilten
Region ist bevorzugterweise für
das Computerprogramm vorgesehen, wobei das oder ein jedes Ladevorrichtungsmodul
anfänglich
nach dem Programmteil angeordnet ist.
-
Das
Koordinatormodul behält
bevorzugterweise bedeutungslose Daten innerhalb des Ladevorrichtungsteils,
ausgenommen an der Speicherstelle eines Ladevorrichtungsmoduls,
das ausgeführt
werden wird. Das oder ein jedes Ladevorrichtungsmodul wird bevorzugterweise
anfangs in einer verschlüsselten
Form gehalten, wobei das Koordinatormodul so betreibbar ist, dass
es entschlüsselt,
während
es ein Modul in eine temporäre
Speicherstelle schreibt.
-
Das
Koordinatormodul schreibt, bei seiner Anwendung, bevorzugterweise
das oder ein jedes Ladevorrichtungsmodul in eine Adresse, die zum Zeitpunkt
des Schreibens ausgewählt
wird. Die Auswahl der Adresse erfolgt bevorzugterweise pseudo-zufällig.
-
Die
Erfindung stellt auch ein computerlesbares Signal zur Verfügung, das
sich in einem Computernetzwerk ausbreitet, um von einem Computer empfangen
zu werden, und Informationen trägt,
die eine Software-Ladevorrichtungsanordnung gemäß einer der oben angegebenen
Definitionen darstellen und die wie zuvor gesagt betreibbar ist,
um ein Computerprogramm zur Ausführung
durch den Empfangscomputer zu laden.
-
In
einem zweiten Aspekt stellt die Erfindung ein Computerprogramm bereit,
das, bei der Anwendung, von einem externen Speicher zur Ausführung in
eine zugeteilte Region des Hauptspeichers geladen wird, wobei das
Programm mit einer Software-Ladevorrichtungsanordnung
gemäß einer
der oben angegebenen Definitionen verbunden ist.
-
Im
Zusammenhang mit diesem Aspekt stellt die Erfindung weiter ein computerlesbares
Signal bereit, das sich über
ein Computernetzwerk verbreitet und von einem Computer empfangen
werden soll, und Informationen trägt, die ein Computerprogramm wie
oben definiert darstellen, wobei die Informationen das Computerprogramm
und die damit verbundene Software-Ladevorrichtungsanordnung darstellen, wie
sie oben in dem vorhergehenden Abschnitt definiert sind.
-
In
einem dritten Aspekt stellt die Erfindung eine Suite von Softwaremodulen
bereit, die wenigstens ein Koordinatormodul einer Software-Ladevorrichtungsanordnung,
wie gemäß dem ersten
Aspekt der Erfindung definiert, und mehrere Ladevorrichtungsmodule
der Ladevorrichtungsanordnung umfasst, wobei die Ladevorrichtungsmodule
Gruppen von Modulen ausbilden, wobei die Module einer jeden Gruppe
Anweisungssequenzen enthalten, die in einem jeden Modul unterschiedlich
sind und die das gleiche Ergebnis erzielen, wenn sie vollständig ausgeführt sind,
wobei eine Software-Ladevorrichtungsanordnung ausgebildet sein kann
durch Auswählen des
oder eines der Koordinatormodule und eines Ladevorrichtungsmoduls
aus der oder einer jeden Gruppe von Ladevorrichtungsmodulen.
-
In
einem vierten Aspekt liefert die Erfindung ein Verfahren zum Laden
eines Computerprogrammes zur Ausführung von einem externen Speicher
in eine zugewiesene Region eines Hauptspeichers, wobei das Koordinatormodul
an eine zuvor bestimmte Stelle in der zugewiesenen Region geladen
wird und betreibbar ist, um die Ausführung von wenigstens einem
Ladevorrichtungsmodul zu koordinieren, wobei das oder ein jedes
Ladevorrichtungsmodul betreibbar ist, um wenigstens einen Teil der
Ladeoperation durchzuführen,
wobei das Koordinatormodul das oder ein jedes Ladevorrichtungsmodul
von der Anfangsspeicherstelle des Ladevorrichtungsmoduls zur Ausführung in
eine temporäre
Speicherstelle schreibt, was die Ausführung des Moduls initiiert,
und das Modul nach der Ausführung
aus der temporären Speicherstelle
löscht.
-
Mehrere
Ladevorrichtungsmodule werden bevorzugterweise bereitgestellt, um
entsprechende Teile der Ladeoperation durchzuführen. Das Koordinatormodul
schreibt bevorzugterweise die Ladevorrichtungsmodule der Reihe nach
in eine temporäre Speicherstelle.
-
Bevorzugterweise
schreibt das Koordinatormodul das oder ein jedes Ladevorrichtungsmodul
in eine temporäre
Speicherstelle, die sich innerhalb eines Ladevorrichtungsteils der
zugewiesenen Region befindet, die für Ladevorrichtungsoperationen
bestimmt ist.
-
Das
Koordinatormodul hält
Daten, die keine Funktionalität
bezüglich
der Ladeoperation aufweisen, bevorzugterweise innerhalb des Ladevorrichtungsteils,
ausgenommen an der Stelle eines Ladevorrichtungsmoduls, das ausgeführt werden
soll. Das Koordinatormodul kann eine verschlüsselte Version des Ladevorrichtungsmoduls
entschlüsseln,
während
es das Modul in eine temporäre
Speicherstelle schreibt.
-
Das
Koordinatormodul wählt
bevorzugterweise zum Zeitpunkt des Schreibens eine Adresse für die temporäre Speicherstelle
aus. Die Auswahl der Adresse erfolgt bevorzugterweise pseudo-zufällig.
-
Beispiele
der vorliegenden Erfindung werden nun lediglich beispielhaft und
unter Bezugnahme auf die beigefügten
Zeichnungen detaillierter beschrieben, wobei:
-
1 ein
vereinfachtes Blockdiagramm eines Computersystems ist, mit dem die
vorliegende Erfindung verwendet werden kann;
-
2 in
schematischer Form die Inhalte des Hauptspeichers des Systems von 1 während eines
herkömmlichen
Ladens von Anwendungssoftware veranschaulicht;
-
3a, 3b und 3c ein
vereinfachtes Flussdiagramm des Betriebs der Software-Ladeanordnung für die vorliegende
Erfindung bilden;
-
4a – 4e den
Zustand des Hauptspeichers während
eines Ladevorgangs gemäß der vorliegenden
Erfindung veranschaulichen; und
-
5 schematisch
die Ausbildung der Software-Ladeanordnung gemäß der vorliegenden Erfindung
zeigt.
-
1 stellt
ein vereinfachtes Blockdiagramm eines Computersystems 10 dar,
das einen Prozessor 12 enthält, der mit dem Hauptspeicher (RAM) 14,
dem externen Speicher 16 (wie beispielsweise einer Festplatte
oder anderer Massenspeichervorrichtung) und geeigneten Eingangs-
und Ausgangsvorrichtungen verbunden ist, die allgemein mit 18 angegeben
sind. Diese können
ein Plattenlaufwerk 18a zum Lesen von Daten von einer Diskette oder
einem anderem Datenträger 19,
oder eine Verbindung mit einem Netzwerk umfassen, wie beispielsweise
einem lokalen Netzwerk (LAN) 20 oder dem Internet.
-
Das
Computersystem 10 ist ein Mehrzweckcomputersystem, das
in der Lage ist, eine Vielzahl von Aufgaben unter Softwaresteuerung
durchzuführen.
Das System 10 kann von der Art sein, die als IBM-kompatibler
Arbeitsplatzrechner (PC) bekannt ist, die Erfindung kann aber auch
auf anderen Arten von Computern implementiert sein. Anwendungssoftware
(wie beispielsweise Textverarbeitungssoftware) zum Steuern des Systems 10 wird üblicherweise
in dem externen Speicher 16 gespeichert, wenn sie nicht
erforderlich ist. Wenn die Anwendung zum ersten Mal aufgerufen wird,
muss die Anwendung durch Laden aus dem externen Speicher 16 in
den RAM 14 installiert werden, wie durch den Pfeil 21 angegeben.
-
Der
Ladevorgang 21 wird herkömmlicherweise unter der Kontrolle
eines „Ladevorrichtungsprogrammes" ausgeführt, das
Sicherheitsüberprüfungen etc.,
wie oben angegeben, einbauen wird.
-
2 veranschaulicht
schematisch die Inhalte des relevanten Teils des RAM 14 während des Ladevorgangs.
Eine Region 22 ist der Anwendung zugeteilt und ist in einen
Ladevorrichtungsteil 24 am Beginn der Region 22 und
einen Programmteil 26, der dem Ladevorrichtungsteil 24 folgt,
aufgeteilt. Es soll verstanden werden, dass relative Begriffe, wie beispielsweise „vor", „nach" etc. verwendet werden, um
die Adressen innerhalb des RAM 14 und die Reihenfolge zu
bezeichnen, in der sie während
der Ausführung
der Software gelesen werden.
-
Anfänglich ist
die Region 22 leer, wie durch die diagonalen Linien, die
durch den Ladevorrichtungsteil 24 und den Programmteil 26 gezogen
sind, angegeben.
-
Als
eine erste Stufe des Ladeprozesses 21 wird das Betriebssystem
des Prozessors 12, bei 24, ein Ladevorrichtungsprogramm
installieren, das mit der Anwendung verbunden ist. Die Steuerung
wird dann bei 24 an die Ladevorrichtung übergeben.
Die Ausführung
der Ladevorrichtung wird Sicherheitsüberprüfungen, Initialisierung etc.
umfassen, wobei danach die Anwendung aus dem externen Speicher 16 gelesen
und in den Programmteil 26 installiert werden wird. Der
Betrieb der Ladevorrichtung ist dann abgeschlossen und die Steuerung
geht auf die Anwendung über.
Die Anwendung ist dann zur Verwendung fertig.
-
Während dieser
Ladeoperation kann die Technik des „Reinlegens der Ladevorrichtung" verwendet werden,
um die Sicherheit, die von der Ladevorrichtung ausgeführt werden,
in der oben beschriebenen Art und Weise zu umgehen. Ein Ladevorgang gemäß der vorliegenden
Erfindung, der auf einem Computersystem, wie dem System 10 von 1, ausgeführt werden soll,
kann nun detaillierter und mit Bezug auf die 3a, 3b, 3c, 4 und 5 beschrieben
werden.
-
3a veranschaulicht
die anfängliche
Abfolge von Schritten, die erfolgt, wenn eine Anwendung bei 30 aufgerufen
wird. Das Betriebssystem teilt bei 32 Speicher für die Anwendung
zu (gemäß dem oben
beschriebenen herkömmlichen
Schritt). Wo herkömmlicherweise
das Betriebssystem dann eine Ladevorrichtung installieren würde, die
mit der Anwendung verbunden ist, wird die Anordnung der Erfindung
einen damit verbundenen Header installieren, dessen Funktion unten
beschrieben wird. Der Header ist ein Programm, das innerhalb der
Anwendung in dem äußeren Speicher 16 in
der Weise aufgenommen werden wird, in der das Betriebssystem eine
Ladevorrichtung zu finden erwarten würde und entsprechend wird der
Header bei 34 installiert und dann bei 36 die
Steuerung auf ihn übergeben.
Dies ändert
den Zustand des RAM 14 zu dem in 4a gezeigten
Zustand, bei der die zugeteilte Region des Speichers 38 leer
ist mit Ausnahme des Headers bei 40. Bei diesem Beispiel
ist das Header-Programm am Beginn der Region 38 gezeigt
und wird deshalb als „Header" bezeichnet. Es soll
jedoch verstanden werden, dass das Programm an einer beliebigen
anderen Speicherstelle angeordnet sein könnte, wenn die Speicherstelle
so bestimmt ist, dass das Programm wie erforderlich ausgeführt werden
kann.
-
3b und 3c bilden
ein Flussdiagramm der Ausführung
des Headers. Das Symbol X wird verwendet, um anzugeben, wie sich
die zwei Teile des Flussdiagramms miteinander verbinden, um den
vollständigen
Prozess auszubilden. Anfänglich, bei 39,
teilt der Header die zugewiesene Region 38, um Teile als
einen Ladevorrichtungsteil 42, der unmittelbar dem Header 40 folgt,
einen Anwendungsteil 44 und einen Programmstumpfteil 46 zuzuteilen.
-
Programmstumpfmodule,
die beschrieben werden sollen, werden dann bei 48 in dem
Programmstumpfteil 46 installiert. Bei diesem Beispiel werden
fünf Programmstumpfmodule
installiert, die als PROGRAMMSTUMPF 1, PROGRAMMSTUMPF 2 etc. bezeichnet
sind, es wird jedoch leicht offensichtlich sein, dass alternativ
irgendeine andere Anzahl von Programmstümpfen verwendet werden könnte. Die
Region 38 liegt dann in dem in 46 dargestellten
Zustand vor.
-
Der
Header 40 koordiniert dann die Reihenfolge der Verwendung
der Programmstumpfmodule, wie angegeben. Ein Zähler wird bei 50 initialisiert
und der entsprechende Programmstumpf wird bei 52 örtlich festgelegt.
Bei Schritt 54 teilt der Header innerhalb des Ladervorrichtungsteils 42 dem
Programmstumpf eine Speicherstelle zu. Diese Zuteilung kann einem
Algorithmus folgen oder zufällig oder
pseudo-zufällig
sein.
-
Nach
einem optionalen Entschlüsselungsschritt 56 wird
dann bei 58 der Programmstumpf in die Speicherstelle geschrieben,
die bei Schritt 54 zugewiesen wird. Der RAM befindet sich
nun in dem in 4c gezeigten Zustand, wobei
der Ladevorrichtungsteil 42 mit Ausnahme des Bereiches
leer ist, der durch den Programmstumpf besetzt ist, und wobei der
Anwendungsteil 44 noch leer ist.
-
Der
Header 40 ruft den Programmstumpf bei Schritt 60 auf
und wartet dann bei 62 (3c) auf
die Vervollständigung
der Ausführung
des Programmstumpfes. Wenn es ausgeführt wird, wird das Programmstumpfmodul
wenigstens einen Teil der Ladeoperation der Anwendung in dem Anwendungsteil 44 durchführen. Dies
kann ein beliebiger Teil der Ladeoperation sein, einschließlich des
Schreibens von Daten in den Anwendungsteil 44, Durchführen von
Sicherheitsüberprüfungen,
Initialisieren von Daten oder Registern oder dergleichen. Beispiele
hinsichtlich der Art, in der die Ladeoperation in geeigneter Weise
aufgeteilt sein kann, werden unten angegeben werden.
-
Wenn
ein Programmstumpfmodul erfolgreich ausgeführt worden ist, entfernt der
Header den Programmstumpf bei 64 und hinterlässt die
entsprechenden Bereiche des RAM leer oder korrumpiert die Daten
oder überschreibt
den Bereich mit Daten, die bedeutungslos sind hinsichtlich der Ladeoperationen,
d. h. diesbezüglich
keine Funktionalität
aufweisen. Entfernen, Korrumption und Überschreiben werden hierin
aus Gründen
der Einfachheit als „Löschen" bezeichnet. Dies
führt den
RAM 14 in den in 4b gezeigten
Zustand zurück,
sofern nicht der Programmstumpf Daten in den Anwendungsteil 44 geschrieben
hat, und mit der Ausnahme, dass ein Teil der Region 22 bedeutungslose
Daten enthalten kann, statt wie in 4b gezeigt
leer zu sein.
-
Der
Wert von N wird dann bei 66 erhöht und es wird bei 68 eine
Entscheidung gefällt,
um zu bestimmen, ob weitere Programmstumpfmodule auszuführen sind.
Dies wird durch Vergleichen der Inkrementwerte von N mit Nmax erreicht, der auf die Gesamtzahl von
Programmstumpfmodulen festgesetzt ist, und wiederholtes Zurückkehren
zu Schritt 52, bis N Nmax überschreitet.
-
Während der
zweiten Ausführung
der Schleife wird in entsprechender Weise das Programmstumpfmodul
PROGRAMMSTUMPF 2 in den Ladevorrichtungsteil 42 (4d)
geschrieben und ausgeführt.
Dieser Zyklus wird fortgesetzt, bis alle Programmstumpfmodule ausgeführt worden
sind. Der RAM 14 wird sich dann in dem Zustand von 4e befinden,
wobei der Ladevorrichtungsteil 42 leer ist, die Anwendung
in dem Anwendungsteil 44 installiert ist und die Programmstumpfmodule
in ihren ursprünglichen
Positionen verbleiben.
-
Die
Steuerung wird dann bei 70 an die Anwendung übergeben,
die dann in der Lage ist, in der normalen Art und Weise zu funktionieren.
-
Der
Betrieb der oben beschriebenen Softwareladevorrichtungsanordnung
liefert einen Schutz gegen das „Reinlegen der Ladevorrichtung" wie folgt. Zuerst
erscheinen die Programmstumpfmodule in dem Ladevorrichtungsteil 42 lediglich
transient. Während
des größten Teils
der Ladeoperation ist der größte Teil
des Ladevorrichtungsteils 42 leer oder enthält bevorzugterweise
Daten, die bedeutungslose Daten sind (d. h. nicht funktional bezüglich des
Ladens). Bedeutungslose Daten sind bevorzugt, um den Ladevorrichtungsteil 42 leer
zu lassen, da bedeutungslose Daten dabei helfen können, ein
Programm zu verwirren, das die Ladevorrichtung reinlegt. Zweitens
können
die Programmstumpfmodule, wenn sie in dem Ladevorrichtungsteil 42 auftreten, bei
einer jeden Gelegenheit eine andere Speicherstelle belegen (entsprechend
der in Schritt 54 zufällig oder
pseudo-zufällig
zugewiesenen Speicherstelle (3b)).
Entsprechend ist es unwahrscheinlich, dass ein Programm, das die
Ladevorrichtung reinlegt und das eine Zugriffsanweisung in einer
speziellen Adresse sucht (d. h. einer Adresse, die relativ zum Start
der zugewiesenen Region 38 fixiert oder eine Absolutadresse
ist), die Zielinstruktion an dieser Speicherstelle findet. Man kann
erwarten, dass ein einfaches Programm, das die Ladevorrichtung reinlegt,
bei den meisten Fällen,
bei denen die Anwendung aufgerufen wird, daran scheitert, die Sicherheit zu
umgehen, und es ist somit unwahrscheinlich, dass es entweder bei
einer jeden Gelegenheit zu der Kopie der Anwendung oder zu anderen
Kopien der gleichen Anwendung generisch ist.
-
Der
Erfolg eines Programms, das die Ladevorrichtung reinlegt, könnte verbessert
sein, wenn es möglich
wäre, vorab
die Speicherstelle zu bestimmen, die einem speziellen Progranunstumpfmodul zugewiesen
werden würde.
Obwohl in der Praxis unwahrscheinlich, könnte dies theoretisch erreicht
werden durch Analysieren des Algorithmus innerhalb des Headers 40,
durch den Programmstumpfmodule Stellen innerhalb des Ladevorrichtungsteils 24 zugeteilt
werden. Herkömmliche
Techniken wie beispielsweise Verschlüsselung können verwendet werden, um den
Header 40 gegenüber
einem derartigen Angriff zu schützen,
die Erfindung fasst aber einen weiteren Schutz in der folgenden
Form ins Auge, der wirksam ist, selbst wenn der Speicherstellenzuteilungsalgorithmus
analysiert worden ist.
-
Die
beschriebene Softwareladevorrichtungsanordnung besteht aus einem
Header und fünf
Programmstumpfmodulen. Die Softwareladevorrichtung kann deshalb
als ein Softwareblock dargestellt werden, der diese Bestandteile
enthält,
wie auf der rechten Seite von 5 dargestellt.
Es soll insbesondere festgestellt werden, dass dies vollständig schematisch
ist, um vorzuschlagen, dass der Header und die Programmstumpfmodule
im Speicher nacheinander enthalten sein werden. Es ist aus der obigen
Beschreibung (insbesondere 4) offenkundig,
dass bei der Anwendung, insbesondere innerhalb des RAM 14,
der Header und die Programmstumpfmodule nicht konsekutiv gehalten
werden.
-
Der
Header und die Programmstumpfmodule bilden eine in 5 mit 72 markierte
Anordnung. Die Anordnung 72 wird mit einer Kopie der Anwendung
im externen Speicher 16 verbunden sein, wie dies beschrieben
worden ist. Die Anordnung 72 wird jedoch nicht für jede authorisierte
Kopie der Anwendungssoftware identisch sein. Die Wirkung einer jeden
Anordnung 72 wird jedoch in einem jeden Fall und wie oben
beschrieben die gleiche sein. Dies wird wie folgt erreicht.
-
Die
Anordnung 72, wie sie in 5 dargestellt
ist, wird ausgebildet durch eine Auswahl aus einer Softwarebibliothek 74,
die auf der linken Seite von 5 dargestellt
ist. Die Bibliothek umfasst eine Gruppe 76 aus Headermodulen 78,
die mit HEADER 1 und HEADER 2 bezeichnet sind. Die Module 78 sind
unterschiedlich beschrieben. Das heißt, die Anweisungssequenzen
innerhalb der Module 78 korrespondieren nicht überall in
den Modulen 78. Die Wirkung eines jeden der Module 78 ist
jedoch identisch, wenn sie ausgeführt werden.
-
Dies
kann erreicht werden durch erneutes Schreiben einiger der durch
die Module 78 ausgeführten
Funktionen, durch Ändern
der Reihenfolge von Anweisungen innerhalb der Sequenz oder dergleichen.
Alternativ könnte
ein jeder Header 78 einen anderen Algorithmus zum Erzeugen
von pseudozufälligen
Zuteilungen für
Programmstumpfmodule innerhalb des Ladevorrichtungsteiles 42 einbauen.
-
In ähnlicher
Weise umfasst die Bibliothek 74 fünf Programmstumpfgruppen 80 (PROGRAMMSTUMPF
1 bis PROGRAMMSTUMPF 5), die, in diesem Beispiel, jeweils fünf alternative
Programmstumpfmodule 82 enthalten, die in der ersten Programmstumpfgruppe 80 mit
PROGRAMMSTUMPF 1A bis PROGRAMMSTUMPF 1E bezeichnet sind. Wie bezüglich der
Headermodule 78 beschrieben sind die Programmstumpfe wiederum
innerhalb einer jeden Gruppe in dem Ausmaß austauschbar, dass, nach
der Ausführung,
jeder genau die gleichen Ergebnisse erzielen wird, wie ein jedes
andere Programmstumpfmodul innerhalb der selben Gruppe 80,
aber die Anweisungssequenzen innerhalb eines jeden Programmstumpfmoduls
der gleichen Gruppe 80 insoweit nicht identisch sind, als dass
sie sich in der Reihenfolge oder in der Art und Weise, in der sie
geschrieben worden sind, unterscheiden.
-
Die
anderen fünf
Programmstumpfgruppen 80 enthalten ebenfalls jeweils fünf austauschbare Programmstumpfmodule.
-
Die
Bibliothek 74 kann in der folgenden Art und Weise verwendet
werden. Wenn eine Kopie einer Anwendungssoftware geschützt werden
soll, wird eine Anordnung 72 ausgebildet durch Auswählen eines
Softwareblocks aus einer jeden der Gruppen 76, 80,
um die Anordnung 72 auszubilden. Dies führt zu einer Anordnung 72,
die in der im Zusammenhang mit den 3a, 3b, 3c und 4 beschriebenen Art und Weise funktionieren
wird. Die Bibliothek 74 liefert, in diesem Beispiel, 6250
(5 × 5 × 5 × 5 × 5 × 2) unterschiedliche
Kombinationen von Headern und Programmstumpfmodulen. Wenn ein Programm, das
eine Ladevorrichtung reinlegt, versucht, den durch eine Anordnung 72 bereitgestellten
Schutz zu umgehen, wird konsequenterweise ein jegliches generische
Programm, das die Ladevorrichtung reinlegt und das in jeder Hinsicht
annimmt, dass die Ladeanordnung bei jeder Gelegenheit oder für eine jede
Kopie der Anwendung die gleiche sein wird, fehlerhaft sein und nicht
in der Lage sein, zu funktionieren. Es kann leicht verstanden werden,
dass durch Erhöhen der
Anzahl von Gruppen in der Bibliothek 74 und durch Erhöhen der
Anzahl von Modulen innerhalb einer jeden Gruppe die Gesamtzahl von
Möglichkeiten ohne
eine echte Begrenzung erhöht
werden kann. Man erwartet, dass es dies erforderlich macht, dass ein
erfolgreiches Programm, das die Ladevorrichtung reinlegt, so ausgeklügelt ist,
dass es einem Programm gleichkommt, das ein neues Problem bei jeder
Gelegenheit löst,
d. h. in keiner Weise generisch ist. Man erwartet, dass das Ausmaß an technischer Raffinesse,
das somit erforderlich ist, ausreichend schwierig zu überwinden
ist, um die Ladevorrichtung reinzulegen, und damit für die Mehrzahl
derer so unattraktiv macht, die versuchen würden, die Verwendung von unlizenzierter
Software zu ermöglichen.
-
Die
Ladeoperation kann unterteilt werden in irgendeiner passenden Art
und Weise, um Programmstumpfmodule auszubilden, nach der Gruppen
von Programmstumpfmodulen, die die Bibliothek bilden, geschrieben
werden können.
Beispielsweise könnten
sich zusätzlich
zu dem Primärprozess
des Ladens der Anwendung in den Anwendungsteil 44 Module
mit dem Entschlüsseln,
Umbauen oder Verschlüsseln
des IAT, Überprüfen auf
Manipulation oder Zeichen für
nicht-authorisierte Aktivität
durch Überprüfen der
zyklischen Blocksicherungs(CRC)-Signaturen oder auf die Anwesenheit
von Debuggern hin befassen.
-
Eine
Softwareladeanordnung von der oben beschriebenen Art kann auf verschiedenen
Wegen einem möglichen
Anwender zur Verfügung
gestellt werden, wie beispielsweise einem Softwarehersteller, der
versucht, eine Anwendung gemäß dieser
Erfindung zu schützen.
Beispielsweise kann eine Ladevorrichtungsanordnung, die wie oben
beschrieben, insbesondere bezüglich 5 ausgebildet
ist, aufgezeichnet werden auf einem Aufzeichnungsmedium zum Übergeben
an einen potentiellen Anwender oder kann verschickt werden durch
Erzeugen eines Signals, das Informationen trägt, die die Anordnung darstellen,
wobei sich das Signal zu dem potentiellen Anwender durch ein geeignetes
Medium, wie beispielsweise ein Computernetzwerk verbreitet. In ähnlicher
Weise kann ein Programm, das eine Ladevorrichtungsanordnung von
der beschriebenen Art enthält,
auf einem Aufzeichnungsmedium zur Abgabe an einen Kunden aufgezeichnet
sein oder es kann über
ein Netzwerk verschickt werden, indem ein Signal, wie oben dargelegt
erzeugt wird.