The Prolok Saga (Was: Applesauce FDC

Tony Aiuto tony.aiuto at gmail.com
Mon Jan 3 22:58:45 CST 2022


Just as my first product was about to go to market, the company president
decided we needed copy protection. He wanted Prolok. I objected, and
proposed that if I could break it in 24 hours, we wouldn't use it. I took
25 hours, and we did use it (fair is fair).

I finally found my notes and the unlock tool.  The very cryptic notes
included inline. I haven't decided where to post the source yet. If anyone
has prolok'ed disks and want to try it out, I'll be happy to send it to
you. I don't run physical DOS machines any more, so my ability to test is
limited.  If you want to just run a random EXE from 1983, you can try
UNPROLOK.EXE here.
https://drive.google.com/corp/drive/folders/1amoYi_fY6f2UYdYeTA1o86rmAtYpsLfF


--- snip ---
prolok.doc                              prolok information sheet

How to Un-Prolok a file

db xxx.exe

A:      g 20            start up
        g =27 3b        skip int 1 and int 3 steal
        r si 1          ruin debugger test
        g 443
        t
        t
        t               should be at 54b
        g =47d 481
                        AL is set to correct disk

B:
        g 4a8
                        make sure AH is 0x10, Carry set
                        at 4c3 the is a write interrupt
                        that must succeed
        g 4c5
        r f NC          clear Carry bit
        r AX 0          set AH to 0

        g 4d2           Carry should be on, AX = 1000
        g 4ea           make sure BX has 47 (from table at 870)
C:
        repeat area from B to C for second entry in table

D:
        g 51c
                        trick decryption part
        t 700
        t c0
        t       until SI = 533  (about 20 times)
        g 53e
                        BX should be 0,
        g 54e
        r
                        ax = 0, bx = 0, cx = 0, dx = 1, sp = 866, bp = 0
                        si = 45a, di = 54d, cs, ss, ds, es = 283e
                        flags: NV UP EI PL ZR NA PE NC
        g 57e
        r f ZR
        g 58b
        r f ZR

        g 5b0
        t
        g =5b6 5b9      skip steal of int 21
        t
        g =5bf 5d3
        g =5e4 5e6      skip steal of int 27h

F:                      convert user program
        r               BX = number of 512 byte PAGES in file
        g 5f4           ax has base segment of user code
        g 627

                        at this point we have the converted user program in
                        main memory.

G:                      write it to disk
        d 0
                        examine the first few bytes
                        if the first two are 5a 4d  or 4d 5a then it is
                        a .EXE file else a .COM file.

        N outfile.com   if it was .EXE you will have to rename it after

                        compute PAGES * 0x200
        r cx, bx        the above value
        w 970
        q               if you continue from this point bx, cx are set wrong
H:                      if we continued rather than writing the file
        g 637
        g =642 644

---
Data Areas (all in CS)

Address (+100)          What

78b     88b             store initial int 21h vector IP (0:84)
78d     88d             store initial int 21h vector CS (0:86)

78b     88b             store initial int 21h vector IP (0:9c)
78b     88b             store initial int 21h vector CS (0:9e)

78b     88b             segment of base of user code (cs:970)

^L

How to disassemble Un-Prolok.exe

d   0 l 100
d cs:0 l 450

u  11 l 40
u 430 l 29
d 458 l 3
u 45b l 23
u 47d l 90
u 50d l f

d cs:50d l f
u 51c l 32
u 54e l 98
u 5e6 l 180

d cs:765 l b

u 770 l 73
u 7e2 l 50

d cs:820 l 150

u 970 l 360
d cs:0800 l 800
d cs:1000 l 800
d cs:1800 l 800
d cs:2000 l 400

q
-------------- next part --------------
prolok.doc				prolok information sheet


How to Un-Prolok a file

db xxx.exe

A:	g 20		start up
	g =27 3b	skip int 1 and int 3 steal
	r si 1		ruin debugger test
	g 443
	t
	t
	t		should be at 54b
	g =47d 481
			AL is set to correct disk

B:
	g 4a8
			make sure AH is 0x10, Carry set
			at 4c3 the is a write interrupt
			that must succeed
	g 4c5
	r f NC		clear Carry bit
	r AX 0		set AH to 0

	g 4d2		Carry should be on, AX = 1000
	g 4ea		make sure BX has 47 (from table at 870)
C:
	repeat area from B to C for second entry in table

D:
	g 51c
			trick decryption part
	t 700
	t c0
	t	until SI = 533	(about 20 times)
	g 53e
			BX should be 0,
	g 54e
	r
			ax = 0, bx = 0, cx = 0, dx = 1, sp = 866, bp = 0
			si = 45a, di = 54d, cs, ss, ds, es = 283e
			flags: NV UP EI PL ZR NA PE NC
	g 57e
	r f ZR
	g 58b
	r f ZR

	g 5b0
	t
	g =5b6 5b9	skip steal of int 21
	t
	g =5bf 5d3
	g =5e4 5e6	skip steal of int 27h

F:			convert user program
	r		BX = number of 512 byte PAGES in file
	g 5f4		ax has base segment of user code
	g 627

			at this point we have the converted user program in
			main memory.

G:			write it to disk
	d 0
			examine the first few bytes
			if the first two are 5a 4d  or 4d 5a then it is
			a .EXE file else a .COM file.

	N outfile.com	if it was .EXE you will have to rename it after

			compute PAGES * 0x200
	r cx, bx	the above value
	w 970
	q		if you continue from this point bx, cx are set wrong


H:			if we continued rather than writing the file
	g 637
	g =642 644




Data Areas (all in CS)


Address (+100)		What

78b	88b		store initial int 21h vector IP (0:84)
78d	88d		store initial int 21h vector CS (0:86)

78b	88b		store initial int 21h vector IP (0:9c)
78b	88b		store initial int 21h vector CS (0:9e)

78b	88b		segment of base of user code (cs:970)




How to disassemble Un-Prolok.exe

d   0 l 100
d cs:0 l 450

u  11 l 40
u 430 l 29
d 458 l 3
u 45b l 23
u 47d l 90
u 50d l f

d cs:50d l f

u 51c l 32
u 54e l 98
u 5e6 l 180

d cs:765 l b

u 770 l 73
u 7e2 l 50

d cs:820 l 150

u 970 l 360
d cs:0800 l 800
d cs:1000 l 800
d cs:1800 l 800
d cs:2000 l 400

q



More information about the cctalk mailing list