Copy-Discovery 2000 Homepage

Anmelden:Zur Registrierung

ProtectionScript Syntax

verwendete ProtectionScript-Befehle: RETURN, JUMP, ADD

Dieser Artikel beschreibt die Syntax von ProtectionScript.

Außerordentliche Methoden

Außerordentliche Methoden (RETURN, RETURNNOTHING, JUMP, JUMPTRUE, JUMPFALSE, CLEARALL) verfügen zwar in der Regel über Parameter, die vor dem Aufrufen gesetzt werden müssen, geben aber keine Werte zurück.
Beispiel RETURN:

ProtectionScript Code

000
001
002
PUSH SecuROM PUSH2 7.34.0014 RETURN

Die außerordentliche Methode RETURN verwendet das erste und zweite String-Register als Parameter. Aus diesem Grund müssen eben diese Register vor dem Aufruf der Methode mit den allgemeinen Methoden PUSH und PUSH2 gefüllt werden.
Mit RETURN wird der Script erfolgreich beendet und der gefundene Kopierschutz mit Version (wenn vorhanden) an den ProtectionScript Interpreter übergeben.
Angenommen die Version des gefundenen Kopierschutz ist unbekannt, so muss der Wert des zweiten Stringregisters, das für die Kopierschutzversion verwendet wird, auf Nothing gesetzt werden.
Dazu verwendet man die Konstante [Nothing], wie in folgendem Beispiel gezeigt:

ProtectionScript Code

000
001
002
PUSH Smarte PUSH2 [Nothing] RETURN

Allgemeine Methoden

Allgemeine Methoden werden nur dazu verwendet, die Funktionsregister zu befüllen, sprich die benötigten Parameter zum Ausführen einer Methode oder Funktion zu liefern.
Es gibt insgesamt 20 Funktionsregister, jeweils 5 String-, Byte-, Number- und Boolregister. Jedes Funktionsregister hat ihre eigene allgemeine Methode, um ihr einen Wert zuzuweisen. In der nachfolgenden Tabelle ist aufgelistet, welche allgemeine Methode zu welchem Funktionsregister gehört:

Allgemeine Methode Funktionsregister Beispiel
PUSH 1. String-Register PUSH Hello World
PUSH2 2. String-Register PUSH2 Ich bin ein C
PUSH3 3. String-Register PUSH3 ABCDEFGHIJKLM
PUSH4 4. String-Register PUSH4 Blabla blabla
PUSH5 5. String-Register PUSH5 Shanghai
PUSHBYTE 1. Byte-Register PUSHBYTE 4A
PUSHBYTE2 2. Byte-Register PUSHBYTE2 FF
PUSHBYTE3 3. Byte-Register PUSHBYTE3 AD
PUSHBYTE4 4. Byte-Register PUSHBYTE4 10
PUSHBYTE5 5. Byte-Register PUSHBYTE5 E3
PUSHNUMBER 1. Number-Register PUSHNUMBER 570A6E
PUSHNUMBER2 2. Number-Register PUSHNUMBER2 0
PUSHNUMBER3 3. Number-Register PUSHNUMBER3 674367
PUSHNUMBER4 4. Number-Register PUSHNUMBER4 53AE
PUSHNUMBER5 5. Number-Register PUSHNUMBER5 23
PUSHBOOL 1. Bool-Register PUSHBOOL True
PUSHBOOL2 2. Bool-Register PUSHBOOL2 False
PUSHBOOL3 3. Bool-Register PUSHBOOL3 False
PUSHBOOL4 4. Bool-Register PUSHBOOL4 True
PUSHBOOL5 5. Bool-Register PUSHBOOL5 True

Die Parameter zum Ausführen einer Funktion oder Methode müssen immer vor dem Aufruf dieser angegeben werden.
Nehmen wir als Beispiel die außerordentliche Methode JUMP. Diese Methode belegt als Parameter das erste Number-Register. In dieses Register muss die Zeilennummer stehen, in die gesprungen werden soll. Um mit der Methode JUMP in die 20. Zeile zu springen, ist folgener Code nötig:

ProtectionScript Code

000
001
PUSHNUMBER 14 JUMP

In Zeile 000 wird die allgemeine Methode PUSHNUMBER mit dem hexadezimalen Zahlenwert 14 (entspricht 2010) aufgerufen. Damit wird der Wert des ersten Number-Registers auf 14 gesetzt.
In Zeile 001 wird die außerordentliche Methode JUMP aufgerufen. JUMP springt in die Zeile, dessen Nummer im ersten Number-Register angegeben wurde, in diesem Fall Zeile 1416.

Welche Methode/Funktion welche Parameter benötigt, kann in der ProtectionScript Referenz nachgeschlagen werden.

Allgemeine Methoden können drei verschiedene Arten von Werte in die Funktionsregister schreiben.
Direkt angegebene Werte:

ProtectionScript Code

000
001
002
003
PUSH Hello World PUSHBYTE A0 PUSHNUMBER 23F3A PUSHBOOL True

Werte aus Konstanten:

ProtectionScript Code

000
001
002
003
PUSH [Nothing] PUSHBYTE [PE_NumberOfSections] PUSHNUMBER [Size] PUSHBOOL [IsPatched]

Beschreibungen der verwendeten Konstanten: [Nothing], [PE_NumberOfSections], [Size] und [IsPatched]

Und Werte aus Benutzerregister:

ProtectionScript Code

000
001
002
003
PUSH #R3 PUSHBYTE #R2 PUSHNUMBER #R5 PUSHBOOL #R1

Allgemeine, File-spezifische und Drive-spezifische Funktionen

Im Gegensatz zu Methoden geben Funktionen Werte zurück. Deshalb muss beim Aufrufen einer Funktion nicht nur dessen Parameter angegeben werden, sondern auch ein Benutzerregister, in welches der Rückgabewert der Funktion geschrieben wird.
Beispiel ADD:

ProtectionScript Code

000
001
002
PUSHNUMBER 5 PUSHNUMBER2 8 ADD #R1

Die relativ banale Funktion ADD addiert zwei Zahlen, genauer gesagt die Zahlenwerte vom ersten und zweiten Number-Register.
In Zeile 000 und 001 werden die beiden zu addierenden Zahlenwerte in die entsprechenden Register geschrieben.
In Zeile 002 wird die Funktion ADD aufgerufen. Als Register für den Rückgabewert der Funktion wird #R1, das erste Benutzerregister angegeben.
Mögliche Register für Rückgabewerte von Funktionen sind die fünf identischen Benutzerregister #R1, #R2, #R3, #R4 und #R5.
Nachdem diese drei Codezeilen ausgeführt wurden, steht im 1. Benutzerregister (#R1) der hexadezimale Zahlenwert D.

Tutorial bewerten: