home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Various Unprotection Examples
/
unprotect.zip
/
unprotect
/
UNPRIX
/
UNPRIX.TXT
< prev
Wrap
Text File
|
1989-09-16
|
6KB
|
188 lines
Works on Grand Prix Circuit EGA version dated 1-25-89.
Place original Accolade disk 2 in drive A.
Type:
dir a:\gp*.*
If you get the following on the screen:
GPEGA EXE 87817 1-25-89 10:06a
follow these instructions. Otherwise you are on your own.
Using DOS or similar utility copy all the files from original disk 2
onto a DOS formated disk. From here on use only the copied disk.
The symbol <-+ in this text means: Press the Carriage Return key.
Rename GPEGA.EXE as GP.TMP (Any non .EXE or .COM extension will do).
Start Debug by typing:
debug a:\gp.tmp<-+
At the prompt - Type:
r<-+ to display the registers.
Debug will display the hex values of the registrs.
My debug version displayed the following:
AX=0000 BX=0001 CX=5709 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=16E4 ES=16E4 SS=16E4 CS=16E4 IP=0100 NV UP EI PL NZ NA PO NC
16E4:0100 4D DEC BP
-
Record on paper the content of CS BX and CX.
Add 800 hex to the hex value of CS to get the hex value GHIJ - Record it.
At the prompt - Type:
sGHIJ:0 ffff 9c 58 80 e4 fe 50 9d<-+
Debug should find only one location and display:
GHIJ:xyzw
Record the hex value xyzw
At the prompt - Type:
sGHIJ:0 ffff a3 22 6e 03 c2<-+
Debug should find only one location and display:
GHIJ:klmn
Record the hex value klmn
At the prompt - Type:
uGHIJ:klmn<-+
Debug should display:
GHIJ:klmn A3226E MOV [6E22],AX << this is location BB >>
GHIJ:kl?? 03C2 ADD AX,DX
GHIJ:kl?? C706266E5700 MOV WORD PTR [6E26],0057
GHIJ:kl?? B85700 MOV AX,0057
GHIJ:kl?? 33DB XOR BX,BX
GHIJ:kl?? A3246E MOV [6E24],AX
GHIJ:kl?? 8EDB MOV DS,BX
GHIJ:kl?? 8B261000 MOV SP,[0010]
GHIJ:kl?? 1F POP DS
GHIJ:kl?? 07 POP ES
GHIJ:kl?? 5F POP DI
GHIJ:kl?? 5E POP SI
GHIJ:kl?? 5D POP BP
Deduct 11 hex from the hex value of xyzw to get XYZW (Record XYZW)
At the prompt - Type:
uGHIJ:XYZW<-+
Debug should display:
GHIJ:XYZY B013 MOV AL,13
GHIJ:XY?? A25305 MOV [0553],AL
GHIJ:XY?? A29106 MOV [0691],AL
GHIJ:XY?? A2FF08 MOV [08FF],AL
GHIJ:XY?? A20D09 MOV [090D],AL
GHIJ:XY?? A22906 MOV [0629],AL
GHIJ:XY?? 9C PUSHF << This is location AA >>
GHIJ:XY?? 58 POP AX
GHIJ:XY?? 80E4FE AND AH,FE
GHIJ:XY?? 50 PUSH AX
GHIJ:XY?? 9D POPF
GHIJ:XY?? B430 MOV AH,30
GHIJ:XY?? CD21 INT 21
GHIJ:XY?? 3C02 CMP AL,02
GHIJ:XY?? 723B JB 611E
Now to the actual modification of the code.
The new code will perform the writing to memory locations to indicate
successful execution of the original code, without actually testing
for an original Accolade floppy disk.
The new code overwrites some of the original code beginning at location AA
and jump to location BB to continue execution of the original code.
At the prompt - Type:
aGHIJ:xyzw<-+ (This is xyzw - not XYZW hex value)
^ ^
+--+-------- Offset value (hex) of location AA
Screen:
GHIJ:xyzw
Type:
mov byte ptr[0513],10<-+
Screen:
GHIJ:xy?? mov byte ptr[0513],10
GHIJ:xy??
Type:
mov byte ptr[050d],3<-+
Screen:
GHIJ:xy?? mov byte ptr[0513],10
GHIJ:xy?? mov byte ptr[050d],3
GHIJ:xy??
Type:
mov ax,0009<-+
Screen:
GHIJ:xy?? mov byte ptr[0513],10
GHIJ:xy?? mov byte ptr[050d],3
GHIJ:xy?? mov ax,0009
GHIJ:xy??
Type:
jmp ne klmn << klmn = hex value of location BB >>
Screen:
GHIJ:xy?? mov byte ptr[0513],10
GHIJ:xy?? mov byte ptr[050d],3
GHIJ:xy?? mov ax,0009
GHIJ:xy?? jmp ne klmn
GHIJ:xy??
Press Carriage Return <-+ (Get out of assemble mode)
At the prompt - Type:
uGHIJ:XYZW<-+
Screen:
GHIJ:XY?? B013 MOV AL,13
GHIJ:XY?? A25305 MOV [0553],AL
GHIJ:XY?? A29106 MOV [0691],AL
GHIJ:XY?? A2FF08 MOV [08FF],AL
GHIJ:XY?? A20D09 MOV [090D],AL
GHIJ:XY?? A22906 MOV [0629],AL
GHIJ:XY?? C606130510 MOV BYTE PTR [0513],10 << Verify
GHIJ:XY?? C6060D0503 MOV BYTE PTR [050D],03 |
GHIJ:XY?? B80900 MOV AX,0009 |
GHIJ:XY?? E94B01 JMP klmn |
^ ^
+--+----- Make sure this = hex value of klmn
At the prompt - Type:
r<-+
Screen:
AX=0000 BX=0001 CX=5709 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=16E4 ES=16E4 SS=16E4 CS=16E4 IP=0100 NV UP EI PL NZ NA PO NC
16E4:0100 4D DEC BP
Compare values of CS BX and CX to those recorded at the beginning.
If no change continue (If values changed see note below).
Next step writes to the floppy in drive A. Make sure drive is ready with
the copied disk in the drive. (Be careful not to ruin the original disk).
At the prompt - Type:
w<-+
Screen:
Writing 15709 bytes
Wait for the prompt
At the prompt - Type:
q<-+ (Quit debug)
At the DOS prompt rename GP.TMP to GPEGA.EXE
Type GPEGA to start the game from your newly created backup disk.
Note: Registers CS BX and CX must equal their hex value at the beginning before
writing the modified code to the disk.
To restore the registers type: rcs<-+ then enter 4 digit hex value<-+
rbx<-+ then enter 4 digit hex value<-+
rcx<-+ then enter 4 digit hex value<-+
End.