Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.sys.apple2.programmer > #2173 > unrolled thread

AppleSoft Basic Copy Protection Help?

Started byapplepcsoftware@gmail.com
First post2016-01-25 04:09 -0800
Last post2016-01-28 12:29 -0800
Articles 17 — 6 participants

Back to article view | Back to comp.sys.apple2.programmer


Contents

  AppleSoft Basic Copy Protection Help? applepcsoftware@gmail.com - 2016-01-25 04:09 -0800
    Re: AppleSoft Basic Copy Protection Help? mverpelli@libero.it - 2016-01-25 04:36 -0800
      Re: AppleSoft Basic Copy Protection Help? applepcsoftware@gmail.com - 2016-01-25 05:12 -0800
        Re: AppleSoft Basic Copy Protection Help? mverpelli@libero.it - 2016-01-25 06:42 -0800
          Re: AppleSoft Basic Copy Protection Help? applepcsoftware@gmail.com - 2016-01-25 08:00 -0800
            Re: AppleSoft Basic Copy Protection Help? mverpelli@libero.it - 2016-01-25 08:22 -0800
            Re: AppleSoft Basic Copy Protection Help? gids.rs@sasktel.net - 2016-01-25 08:47 -0800
    Re: AppleSoft Basic Copy Protection Help? michael.pohoreski@gmail.com - 2016-01-25 10:56 -0800
      Re: AppleSoft Basic Copy Protection Help? michael.pohoreski@gmail.com - 2016-01-25 11:06 -0800
        Re: AppleSoft Basic Copy Protection Help? applepcsoftware@gmail.com - 2016-01-25 13:12 -0800
          Re: AppleSoft Basic Copy Protection Help? gids.rs@sasktel.net - 2016-01-29 20:54 -0800
        Re: AppleSoft Basic Copy Protection Help? applepcsoftware@gmail.com - 2016-01-25 13:15 -0800
          Re: AppleSoft Basic Copy Protection Help? qkumba <peter.ferrie@gmail.com> - 2016-01-25 15:48 -0800
            Re: AppleSoft Basic Copy Protection Help? michael.pohoreski@gmail.com - 2016-01-28 12:29 -0800
              Re: AppleSoft Basic Copy Protection Help? qkumba <peter.ferrie@gmail.com> - 2016-01-29 06:57 -0800
                Re: AppleSoft Basic Copy Protection Help? Michael Pohoreski <michael.pohoreski@gmail.com> - 2016-01-29 14:33 -0800
          Re: AppleSoft Basic Copy Protection Help? michael.pohoreski@gmail.com - 2016-01-28 12:29 -0800

#2173 — AppleSoft Basic Copy Protection Help?

Fromapplepcsoftware@gmail.com
Date2016-01-25 04:09 -0800
SubjectAppleSoft Basic Copy Protection Help?
Message-ID<1cabe2ed-ff75-4555-a3f8-e948376d913f@googlegroups.com>
I have a problem. I can't get my basic applesoft program to compile. It's a simple hangman game but my question is how can I prevent the list from showing? for example say I have this: 

100  REM  PRODOS STARTUP & SELECTOR
 102  REM  WITH BYE & ONERR & CAT
 105  REM  APPLETECH, 1987-1999
 107  REM 
 110  REM  NEW PROGRAM NAMES GO
 120  REM  IN DATA STATEMENTS IN
 130  REM  LINES AFTER 1000 AND
 140  REM  BEFORE 1900.
 150  REM  THE PROGRAM'S NAME IS
 160  REM  FIRST. A DESCRIPTION
 170  REM  CAN FOLLOW A SPACE.
 172  REM 
 173  REM  EXAMPLES:
 175  REM  1010 DATA UTIL.SYSTEM (COPY II PLUS 7.1)
 177  REM  1020 DATA BLOCK.WARDEN
 200  GOTO 250
 210  REM  GET KEY
 220 ZZ =  PEEK (49152): IF ZZ < 128 THEN 220
 230 K = ZZ - 128:ZZ =  PEEK (49168): IF K > 95 THEN K = K - 32
 240  PRINT : RETURN 
 250  TEXT : HOME 
 260 E$ = "EXIT":H = 2:OO = 0
 270  PRINT  CHR$ (4)"PREFIX": INPUT "";P$
 280  FOR I = 0 TO 20: READ X$: IF X$ <  > E$ THEN  NEXT I
 290 F =  FRE (0):F = I
 300  DIM C$(F)
 310  RESTORE : FOR I = 0 TO F: READ C$(I): NEXT I
 320 V =  INT ((17 - F) / 2): IF V < 1 THEN V = 1
 330  HOME :VV = V + 4:S = VV + 2:O = S:E = S + F: PRINT : VTAB VV: HTAB H - 1: PRINT " WELCOME TO "P$"!": VTAB S: FOR I = 0 TO F: HTAB H: PRINT " "C$(I): NEXT I
 340 C = O - S: VTAB O: HTAB H: INVERSE : PRINT " "C$(C)" ": NORMAL :J = O: GOSUB 220: IF K = 10 THEN O = O + 1: IF J = E THEN O = S
 350  IF K = 11 THEN O = O - 1: IF J = S THEN O = E
 360  IF K <  > 13 THEN  VTAB J: HTAB H: PRINT " "C$(C)" ": GOTO 340
 370  IF C$(C) = E$ THEN  VTAB 24: INVERSE : PRINT " "E$" ";: NORMAL : FOR I = 1 TO 21: PRINT : NEXT I: END 
 380  IF C$(C) = "BYE" THEN  PRINT  CHR$ (4)"BYE"
 390  IF C$(C) = "CAT" THEN  HOME : PRINT  CHR$ (4)"CAT": GOTO 470
 400  IF C$(C) = "HARD DISK" THEN  PRINT  CHR$ (4)"PR#7"
 410 X$ = C$(C):K =  LEN (X$): FOR I = 1 TO K: IF  MID$ (X$,I,1) <  > " " THEN  NEXT I: GOTO 430
 420 X$ =  LEFT$ (X$,I - 1)
 430  ONERR  GOTO 450
 440  HOME : PRINT  CHR$ (4)"-"X$: END 
 450  HOME : VTAB 10: PRINT "COULD NOT START "X$"!";
 460  PRINT  CHR$ (7); CHR$ (7): PRINT : PRINT : POKE 216,0
 470  PRINT "PRESS ANY KEY": GOSUB 220: GOTO 330
 1000  REM PROGRAM NAMES
 1900  DATA CAT
 1910  DATA BYE
 1999  DATA EXIT
 2000  NEW : PRINT "NOT AVAILABLE..." :  POKE 214,255 : TEXT : HOME : D$ =  CHR$ (4): REM          CTRL-D : INT : PRINT "CREATED BY APPLETECH"

When I type List it list the program STARTUP.bas code. How can I make it where it just prints the last or first line "PRINT "CREATED BY APPLETECH"

Thank you :)

[toc] | [next] | [standalone]


#2174

Frommverpelli@libero.it
Date2016-01-25 04:36 -0800
Message-ID<0bf0612f-d67c-40b8-9493-b970d7ee31ac@googlegroups.com>
In reply to#2173
Compile? Are you sure?

Source -> Compiler -> BIN + Runtime. Delete Source and no more LIST avaible.

If you are using the AppleSoft interpreter:

https://groups.google.com/forum/#!topic/comp.sys.apple2/mUf7jtr7OQk

Marco. 

[toc] | [prev] | [next] | [standalone]


#2176

Fromapplepcsoftware@gmail.com
Date2016-01-25 05:12 -0800
Message-ID<1c265f42-c1cf-4a4e-86a7-a67bee2e2458@googlegroups.com>
In reply to#2174
On Monday, January 25, 2016 at 6:36:28 AM UTC-6, mver...@libero.it wrote:
> Compile? Are you sure?
> 
> Source -> Compiler -> BIN + Runtime. Delete Source and no more LIST avaible.
> 
> If you are using the AppleSoft interpreter:
> 
> https://groups.google.com/forum/#!topic/comp.sys.apple2/mUf7jtr7OQk
> 
> Marco.

I'm not sure what you mean by Compile? Are you sure? 

Source -> Compiler -> BIN + Runtime. Delete Source and no more LIST avaible. 

If you are using the AppleSoft interpreter: 

Can you explain further? 

[toc] | [prev] | [next] | [standalone]


#2177

Frommverpelli@libero.it
Date2016-01-25 06:42 -0800
Message-ID<4595c0c6-71ad-4192-b559-9954217a4055@googlegroups.com>
In reply to#2176
You say: "I can't get my basic applesoft program to compile"
I say: what compiler are you using? TASC, Beagle, Einsten, Micol...
What error(s) returns the compiler?

When and if you get a BAS(ic) source program compiled, the resulting file will be a BIN(ary) or SYS(tem) and there no need of distribute to third parties the source.

On the other hand if you are using the build-in AppleSoft interpreter I give you the link of a post with hint how to hide the listing. If this is the case I know at least a couple of guy that would be happy to "crack" your protection and made the program again LIST(able) :)

Marco

[toc] | [prev] | [next] | [standalone]


#2178

Fromapplepcsoftware@gmail.com
Date2016-01-25 08:00 -0800
Message-ID<0a455468-fba5-4588-9317-6908828066b9@googlegroups.com>
In reply to#2177
On Monday, January 25, 2016 at 8:42:41 AM UTC-6, mver...@libero.it wrote:
> You say: "I can't get my basic applesoft program to compile"
> I say: what compiler are you using? TASC, Beagle, Einsten, Micol...
> What error(s) returns the compiler?
> 
> When and if you get a BAS(ic) source program compiled, the resulting file will be a BIN(ary) or SYS(tem) and there no need of distribute to third parties the source.
> 
> On the other hand if you are using the build-in AppleSoft interpreter I give you the link of a post with hint how to hide the listing. If this is the case I know at least a couple of guy that would be happy to "crack" your protection and made the program again LIST(able) :)
> 
> Marc
I've tried beagle but it gives me errors, I've tried hayden also no luck. I sort of had some luck with tasc. do you know which one is the best one to use?

[toc] | [prev] | [next] | [standalone]


#2180

Frommverpelli@libero.it
Date2016-01-25 08:22 -0800
Message-ID<f3799df6-4366-4296-a8cd-ac28d1145040@googlegroups.com>
In reply to#2178
I'm ProDos oriented and always used Beagle.

It is difficult to help without seeing the source and know the error
could be anything: &, POKE, ...

Marco.

P.S. The startup program have no problem with Beagle 3.2

[toc] | [prev] | [next] | [standalone]


#2181

Fromgids.rs@sasktel.net
Date2016-01-25 08:47 -0800
Message-ID<4303d7bd-9957-4211-8eaa-1ae117899133@googlegroups.com>
In reply to#2178
On Monday, January 25, 2016 at 10:00:36 AM UTC-6, applepc...@gmail.com wrote:
> On Monday, January 25, 2016 at 8:42:41 AM UTC-6, mver...@libero.it wrote:
> > You say: "I can't get my basic applesoft program to compile"
> > I say: what compiler are you using? TASC, Beagle, Einsten, Micol...
> > What error(s) returns the compiler?
> > 
> > When and if you get a BAS(ic) source program compiled, the resulting file will be a BIN(ary) or SYS(tem) and there no need of distribute to third parties the source.
> > 
> > On the other hand if you are using the build-in AppleSoft interpreter I give you the link of a post with hint how to hide the listing. If this is the case I know at least a couple of guy that would be happy to "crack" your protection and made the program again LIST(able) :)
> > 
> > Marc
> I've tried beagle but it gives me errors, I've tried hayden also no luck. I sort of had some luck with tasc. do you know which one is the best one to use?


In the program itself or at the prompt you can define the line # you wish to list, as in, LIST 100,177 or LIST 2000.  But if you compile your program, you no longer have that option since LIST is an applesoft command. not a compiler command.

If you want the strings in the REM statements to display when running from a compiler, then change them to PRINT statements.

so 

100 REM  PRODOS STARTUP & SELECTOR

becomes

100 PRINT "PRODOS STARTUP & SELECTOR"

[toc] | [prev] | [next] | [standalone]


#2182

Frommichael.pohoreski@gmail.com
Date2016-01-25 10:56 -0800
Message-ID<31927be0-4404-40f4-b18f-3cda27c5ca9d@googlegroups.com>
In reply to#2173
On Monday, January 25, 2016 at 4:09:19 AM UTC-8, applepc...@gmail.com wrote:
> I have a problem. I can't get my basic applesoft program to compile. It's a simple hangman game but my question is how can I prevent the list from showing? for example say I have this: 
> When I type List it list the program STARTUP.bas code. How can I make it where it just prints the last or first line "PRINT "CREATED BY APPLETECH"
> 
> Thank you :)

You would need a custom Applesoft shim that sits in
the **middle** of a binary program.
(Should work for DOS3.3, left as an exercise for ProDOS)

1. Assemble your binary to $838
2. BLOAD it at A$838
3. Insert this Applesoft shim

- - - 8< - - -
NEW
0 CALL2104:REM******************CREATED BY APPLETECH
- - - 8< - - -

4. Replace the '*' with backspaces

CALL-151
80C:08
80D<80C.81CM 

5. Binary Startup
7FD:4C 38 08

6. Example of our assembly program

838:20 58 FC A2 00 BD 49 08
840:F0 06 20 ED FD E8 D0 F5
848:60 C8 C5 CC CC CF 8D 00

7. BSAVE protected version start at $7FD .. end of your program.

If you want to save it as Applesoft program
you'll need to hack your DOS so it "thinks"
the end of your Applsoft is really the end
of your binary.


Demo:

7FD:4C 38 08
800:00 33 08 00 00 8C 32 31
808:30 34 3A B2 08 08 08 08
810:08 08 08 08 08 08 08 08
818:08 08 08 08 08 08 43 52
820:45 41 54 45 44 20 42 59
828:20 41 50 50 4C 45 54 45
830:43 48 00 00 00 FF FF FF
838:20 58 FC A2 00 BD 49 08
840:F0 06 20 ED FD E8 D0 F5
848:60 C8 C5 CC CC CF 8D 00

Obviously BRUN will work, but if a
user tries to BLOAD and type LIST they will see:

 CREATED BY APPLETECH

Michael

[toc] | [prev] | [next] | [standalone]


#2185

Frommichael.pohoreski@gmail.com
Date2016-01-25 11:06 -0800
Message-ID<0c661934-d317-4b70-8f02-5e8eb9dd763f@googlegroups.com>
In reply to#2182
And if they try to RUN it, they will get the binary program output -- in the demo they will see a clear screen and:

HELLO

[toc] | [prev] | [next] | [standalone]


#2186

Fromapplepcsoftware@gmail.com
Date2016-01-25 13:12 -0800
Message-ID<500c8f0f-4c96-4308-9f38-322ec04cdafd@googlegroups.com>
In reply to#2185
On Monday, January 25, 2016 at 1:06:00 PM UTC-6, michael....@gmail.com wrote:
> And if they try to RUN it, they will get the binary program output -- in the demo they will see a clear screen and:
> 
> HELLO

OKAY! Thank you I will try this and post the result.

[toc] | [prev] | [next] | [standalone]


#2202

Fromgids.rs@sasktel.net
Date2016-01-29 20:54 -0800
Message-ID<22a6663c-72ce-438e-aa00-6b6d97276455@googlegroups.com>
In reply to#2186
On Monday, January 25, 2016 at 3:12:25 PM UTC-6, applepc...@gmail.com wrote:
> On Monday, January 25, 2016 at 1:06:00 PM UTC-6, michael....@gmail.com wrote:
> > And if they try to RUN it, they will get the binary program output -- in the demo they will see a clear screen and:
> > 
> > HELLO
> 
> OKAY! Thank you I will try this and post the result.


Probably the simplest and easiest form of protection to both initiate and to bypass is the well known POKE 214,255.

This forces any command to make the program RUN.  Trying to LIST the basic program would make it RUN instead.

[toc] | [prev] | [next] | [standalone]


#2187

Fromapplepcsoftware@gmail.com
Date2016-01-25 13:15 -0800
Message-ID<ffab1ef2-b8e0-4318-8cbf-03445ff89f1b@googlegroups.com>
In reply to#2185
On Monday, January 25, 2016 at 1:06:00 PM UTC-6, michael....@gmail.com wrote:
> And if they try to RUN it, they will get the binary program output -- in the demo they will see a clear screen and:
> 
> HELLO

One question if I may. What is a  custom Applesoft shim?

[toc] | [prev] | [next] | [standalone]


#2189

Fromqkumba <peter.ferrie@gmail.com>
Date2016-01-25 15:48 -0800
Message-ID<934a8ece-6d74-441c-ae9d-df8c0f1c11ee@googlegroups.com>
In reply to#2187
I described a collection of protections for AppleSoft programs in PoC||GTFO #10: infinite lists, missing lines, self-modifying lines, etc.
You might find something there to interest you.

[toc] | [prev] | [next] | [standalone]


#2193

Frommichael.pohoreski@gmail.com
Date2016-01-28 12:29 -0800
Message-ID<d9a48bf6-bf22-4b79-af2c-7dd3c65a391b@googlegroups.com>
In reply to#2189
That would be great / interesting to read !  Post a link! :-)

[toc] | [prev] | [next] | [standalone]


#2197

Fromqkumba <peter.ferrie@gmail.com>
Date2016-01-29 06:57 -0800
Message-ID<fb6f9771-a6d1-409e-be89-4f3c257dddea@googlegroups.com>
In reply to#2193
> That would be great / interesting to read !  Post a link! :-)

See issue 0x10 on https://www.alchemistowl.org/pocorgtfo/
The Basic protection is part of the article on Apple II copy-protections.

[toc] | [prev] | [next] | [standalone]


#2199

FromMichael Pohoreski <michael.pohoreski@gmail.com>
Date2016-01-29 14:33 -0800
Message-ID<76934028-6d84-470f-9a3d-bb287307f183@googlegroups.com>
In reply to#2197
On Friday, January 29, 2016 at 6:57:11 AM UTC-8, qkumba wrote:
> See issue 0x10 on https://www.alchemistowl.org/pocorgtfo/

Holy sh!t issue -- 0x10 is freaking awesome!!

That "7 A Brief Description of Some Popular Copy-Protection Techniques" is _perfect timing_ for one of the projects I'm working on. :-)

I've always hated the Q6L, Q6H, Q7L, Q7H labels used by "Beneath Apple DOS".  I'm using the more reader friendly:

        DRIVE_PHASE_0_OFF   = $C080 ;
        DRIVE_PHASE_0_ON    = $C081 ;
        DRIVE_PHASE_1_OFF   = $C082 ;
        DRIVE_PHASE_1_ON    = $C083 ;
        DRIVE_PHASE_2_OFF   = $C084 ;
        DRIVE_PHASE_2_ON    = $C085 ;
        DRIVE_PHASE_3_OFF   = $C086 ;
        DRIVE_PHASE_3_ON    = $C087 ;
        DRIVE_MOTOR_OFF     = $C088 ;
        DRIVE_MOTOR_ON      = $C089 ;
        DRIVE_SELECT_1      = $C08A ;
        DRIVE_SELECT_2      = $C08B ;
        DRIVE_DATA_BYTE     = $C08C ; Q6L Strobe Data Latch for I/O
        DRIVE_DATA_LATCH    = $C08D ; Q6H Load   Data Latch
        DRIVE_MODE_READ     = $C08E ; Q7L Prepare latch for input
        DRIVE_MODE_WRITE    = $C08F ; Q7H Prepare latch for output

I didn't realize you wrote that article Peter!!  Great to see you and 4AM "preserving" this info. :-)

[toc] | [prev] | [next] | [standalone]


#2192

Frommichael.pohoreski@gmail.com
Date2016-01-28 12:29 -0800
Message-ID<f3c22492-a2e3-4753-9f62-505a010fd167@googlegroups.com>
In reply to#2187
On Monday, January 25, 2016 at 1:15:32 PM UTC-8, applepc...@gmail.com wrote:
> One question if I may. What is a  custom Applesoft shim?

I'm using the word "shim" (very) loosely.

"Custom" means you hex-edit the Applesoft program to do stuff that you normally can't type in.

"Shim" means a "transition".  The Applesoft BASIC program has an attached binary program with it.  Usually you would fix the "next statement" pointer for line 0 to go past the end of the binary program.  If someone tried to view that they would see "random" tokens

[toc] | [prev] | [standalone]


Back to top | Article view | comp.sys.apple2.programmer


csiph-web