home *** CD-ROM | disk | FTP | other *** search
/ Various Unprotection Examples / unprotect.zip / unprotect / COPYPROT / SYMPHONY.UNP < prev    next >
Text File  |  1985-04-04  |  3KB  |  84 lines

  1.  
  2. ;Making SYMPHONY ver 1.00 to run with out SYMPHONY'S master disk -
  3. ;unprotecting it:
  4. ;
  5. ;A>REN SYMPHONY.CMP SYMPHONY.XXX
  6. ;A>DEBUG SYMPHONY.XXX
  7. ;-R            ;find the segment where loaded and add 1000 to it
  8. ;            ;DS=0DFA - xxxx=1DFA (0DFAH+1000H=1DFAH)
  9. ;-E xxxx:3A05 75    ;change INT 13 to INT 75H (see label SYMINT below)
  10. ;-W            ;save changed file
  11. ;-Q            ;exit debuger
  12. ;A>REN SYMPHONY.XXX SYMPHONY.CMP
  13. ;A>SYMPH        ;execute THIS PROGRAM (it modifies the changed interupt
  14. ;            ;back to 13H since SYMPHONY does checksum of it's self)
  15. ;
  16. ;
  17. ;
  18. ;    assemble, link, exe2bin
  19. ;
  20. ;Execute this program before using SYMPHONY.
  21. ;There is no need to re-execute this program after exit from SYMPHONY, in
  22. ;order to use the SYMPHONY again, since it is a resident program
  23. ;
  24. ;
  25. ;to further examine the symphony for possibly other way to solve this, using
  26. ;DEBUG, do:
  27. ;A>DEBUG SYMPHONY.EXE
  28. ;-G2
  29. ;-T3
  30. ;-G8A40
  31. ;-T        ;at this point you will find the the subroutine that fills
  32. ;        ;location ds:8735 with n and int 13 (the second one) which
  33. ;        ;reads the serial number from flopy disk in A. Zeroing 8735
  34. ;        ;fools the symphony, and prevents it from testing for special
  35. ;        ;track/sector structure on the flopy. If the location 8735 is
  36. ;        ;not zeroed, debugging will not be possible after IP 8A4D,
  37. ;        ;since INT 3 will be modified by SYMPHONY.
  38. ;
  39.  
  40. SYMINT    EQU    75H    ;interupt to use
  41.  
  42. SYMFLG    EQU    8735H    ;see above for info
  43.  
  44. CSEG    SEGMENT
  45.     ASSUME    CS:CSEG,DS:CSEG
  46.     ORG    100H
  47. PROGRA:    XOR    AX,AX
  48.     MOV    ES,AX            ;set to segment 0 (interupt table)
  49.     XOR    DX,DX
  50.     MOV    AL,SYMINT        ;interupt number
  51.     MOV    CX,4            ;get position in interupt table
  52.     MUL    CX
  53.     MOV    BX,AX
  54.     TEST    WORD PTR ES:[BX],0    ;test if set?
  55.     JZ    DOIT            ;no, go set it
  56.     INT    20H            ;exit to dos with out mod
  57.  
  58. DOIT:                                ;get interupt routine address
  59.     MOV    word ptr ES:[BX],offset corc      ;store it at the apropriate int address
  60.     MOV    ES:[BX+2],CS        ;also store the segment
  61.     MOV    DX,5+16            ;lenght of this pgm in segments
  62.     MOV    AX,3103H        ;exit & stay resident
  63.     INT    21H
  64.  
  65. ;this is the actual interupt
  66. CORC:    CLI
  67.     PUSH    ES            ;save all used registers
  68.     PUSH    BP
  69.     PUSH    BX
  70.     MOV    BP,SP
  71.     MOV    ES,[BP+8]        ;get calling segment from stack
  72.     MOV    BX,[BP+6]        ;get calling address from stack
  73.     DEC    BX            ;back up one
  74.     MOV    BYTE PTR ES:[BX],13H    ;store interupt 13h there
  75.     MOV    BYTE PTR DS:SYMFLG,0    ;zero out the flopy test flag
  76.     POP    BX            ;restore registers
  77.     POP    BP
  78.     POP    ES
  79.     STI
  80.     IRET                ;back to symphony
  81.  
  82. CSEG    ENDS
  83.     END    PROGRA
  84.